Repository: leanprover/theorem_proving_in_lean4 Branch: master Commit: 63fad08fcd5f Files: 86 Total size: 2.6 MB Directory structure: gitextract_265n7ear/ ├── .github/ │ └── workflows/ │ └── ci.yml ├── .gitignore ├── .gitmodules ├── LICENSE ├── README.md ├── book/ │ ├── .gitignore │ ├── .verso/ │ │ ├── verso-xref-manifest.json │ │ └── verso-xref.json │ ├── Main.lean │ ├── TPiL/ │ │ ├── AxiomsComputation.lean │ │ ├── Conv.lean │ │ ├── DependentTypeTheory.lean │ │ ├── Examples.lean │ │ ├── InductionAndRecursion.lean │ │ ├── InductiveTypes.lean │ │ ├── InteractingWithLean.lean │ │ ├── Intro.lean │ │ ├── PropositionsAndProofs.lean │ │ ├── QuantifiersEquality.lean │ │ ├── StructuresAndRecords.lean │ │ ├── Tactics.lean │ │ └── TypeClasses.lean │ ├── TPiL.lean │ ├── lake-manifest.json │ ├── lakefile.toml │ ├── lean-toolchain │ ├── static/ │ │ ├── fonts/ │ │ │ ├── noto-sans-mono/ │ │ │ │ ├── OFL.txt │ │ │ │ └── noto-sans-mono.css │ │ │ ├── source-code-pro/ │ │ │ │ ├── LICENSE.md │ │ │ │ ├── OTF/ │ │ │ │ │ ├── SourceCodePro-Black.otf │ │ │ │ │ ├── SourceCodePro-BlackIt.otf │ │ │ │ │ ├── SourceCodePro-Bold.otf │ │ │ │ │ ├── SourceCodePro-BoldIt.otf │ │ │ │ │ ├── SourceCodePro-ExtraLight.otf │ │ │ │ │ ├── SourceCodePro-ExtraLightIt.otf │ │ │ │ │ ├── SourceCodePro-It.otf │ │ │ │ │ ├── SourceCodePro-Light.otf │ │ │ │ │ ├── SourceCodePro-LightIt.otf │ │ │ │ │ ├── SourceCodePro-Medium.otf │ │ │ │ │ ├── SourceCodePro-MediumIt.otf │ │ │ │ │ ├── SourceCodePro-Regular.otf │ │ │ │ │ ├── SourceCodePro-Semibold.otf │ │ │ │ │ └── SourceCodePro-SemiboldIt.otf │ │ │ │ └── source-code-pro.css │ │ │ ├── source-sans/ │ │ │ │ ├── LICENSE.md │ │ │ │ ├── OTF/ │ │ │ │ │ ├── SourceSans3-Black.otf │ │ │ │ │ ├── SourceSans3-BlackIt.otf │ │ │ │ │ ├── SourceSans3-Bold.otf │ │ │ │ │ ├── SourceSans3-BoldIt.otf │ │ │ │ │ ├── SourceSans3-ExtraLight.otf │ │ │ │ │ ├── SourceSans3-ExtraLightIt.otf │ │ │ │ │ ├── SourceSans3-It.otf │ │ │ │ │ ├── SourceSans3-Light.otf │ │ │ │ │ ├── SourceSans3-LightIt.otf │ │ │ │ │ ├── SourceSans3-Medium.otf │ │ │ │ │ ├── SourceSans3-MediumIt.otf │ │ │ │ │ ├── SourceSans3-Regular.otf │ │ │ │ │ ├── SourceSans3-Semibold.otf │ │ │ │ │ └── SourceSans3-SemiboldIt.otf │ │ │ │ ├── VF/ │ │ │ │ │ ├── SourceSans3VF-Italic.otf │ │ │ │ │ └── SourceSans3VF-Upright.otf │ │ │ │ ├── source-sans-3.css │ │ │ │ └── source-sans-3VF.css │ │ │ └── source-serif/ │ │ │ ├── LICENSE.md │ │ │ ├── OTF/ │ │ │ │ ├── SourceSerif4-Black.otf │ │ │ │ ├── SourceSerif4-BlackIt.otf │ │ │ │ ├── SourceSerif4-Bold.otf │ │ │ │ ├── SourceSerif4-BoldIt.otf │ │ │ │ ├── SourceSerif4-ExtraLight.otf │ │ │ │ ├── SourceSerif4-ExtraLightIt.otf │ │ │ │ ├── SourceSerif4-It.otf │ │ │ │ ├── SourceSerif4-Light.otf │ │ │ │ ├── SourceSerif4-LightIt.otf │ │ │ │ ├── SourceSerif4-Regular.otf │ │ │ │ ├── SourceSerif4-Semibold.otf │ │ │ │ └── SourceSerif4-SemiboldIt.otf │ │ │ └── source-serif-text.css │ │ └── theme.css │ └── verso-sources.json ├── examples/ │ ├── .gitignore │ ├── Examples/ │ │ └── Basic.lean │ ├── Examples.lean │ ├── lake-manifest.json │ ├── lakefile.toml │ └── lean-toolchain └── unixode.sty ================================================ FILE CONTENTS ================================================ ================================================ FILE: .github/workflows/ci.yml ================================================ name: build and test book content # Controls when the action will run. on: push: branches: - master pull_request: branches: - master # A workflow run is made up of one or more jobs that can run sequentially or in parallel jobs: Build: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v2 with: # interferes with lean4-nightly authentication persist-credentials: false submodules: true - name: Setup elan toolchain on this build run: | curl -O --location https://raw.githubusercontent.com/leanprover/elan/master/elan-init.sh chmod u+x elan-init.sh ./elan-init.sh -y --default-toolchain none - name: Set elan paths run: | echo "$HOME/.elan/bin" >> $GITHUB_PATH - name: Install lean toolchain for examples run: | cd examples lean --version - name: Install lean toolchain for text run: | cd book lean --version - name: Cache book/.lake uses: actions/cache@v4 with: path: book/.lake # The SHA is in the key to get the most recent cache possible, rather than just saving a single one for each Lean/deps version and not touching it. key: ${{ runner.os }}-${{ hashFiles('book/lake-manifest.json') }}-${{ hashFiles('book/lean-toolchain') }}-${{ steps.shortSHA.outputs.short_sha }} # Try to restore cache for same OS/Lean/deps, but don't get less specific, because Lake isn't always happy to get build product version mismatches restore-keys: | ${{ runner.os }}-${{ hashFiles('book/lake-manifest.json') }}-${{ hashFiles('book/lean-toolchain') }}- - name: Build book run: | pushd book lake exe tpil --verbose popd - name: Save book/.lake uses: actions/cache/save@v4 with: path: book/.lake # The SHA is in the key to get the most recent cache possible, rather than just saving a single one for each Lean/deps version and not touching it. key: ${{ runner.os }}-${{ hashFiles('book/lake-manifest.json') }}-${{ hashFiles('book/lean-toolchain') }}-${{ steps.shortSHA.outputs.short_sha }} - name: Deploy to Netlify hosting uses: nwtgck/actions-netlify@v2.0 if: github.event_name == 'push' && github.ref_name == 'master' with: publish-dir: book/_out/html-multi production-branch: master github-token: ${{ secrets.GITHUB_TOKEN }} deploy-message: | ${{ github.event_name == 'pull_request' && format('pr#{0}: {1}', github.event.number, github.event.pull_request.title) || format('ref/{0}: {1}', github.ref_name, steps.deploy-info.outputs.message) }} alias: ${{ steps.deploy-info.outputs.alias }} enable-commit-comment: false enable-pull-request-comment: false github-deployment-environment: "lean-lang.org/theorem_proving_in_lean4" fails-without-credentials: true env: NETLIFY_AUTH_TOKEN: ${{ secrets.NETLIFY_AUTH_TOKEN }} NETLIFY_SITE_ID: "51300c89-2f6c-4bba-a575-8cf12e434502" - name: GH pages deploy uses: JamesIves/github-pages-deploy-action@4.1.5 if: github.event_name == 'push' && github.ref_name == 'master' with: branch: gh-pages folder: book/_out/html-multi ================================================ FILE: .gitignore ================================================ *.olean /_target /leanpkg.path out/ .vs/ .vscode/ */_out/* .DS_Store ================================================ FILE: .gitmodules ================================================ ================================================ FILE: LICENSE ================================================ Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "{}" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright {yyyy} {name of copyright owner} Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ================================================ FILE: README.md ================================================ Theorem Proving in Lean 4 ----------------------- This repository contains the source code of the book _Theorem Proving in Lean 4_ by Jeremy Avigad, Leonardo de Moura, Soonho Kong, and Sebastian Ullrich, with contributions from the Lean Community. To build the book, change to the `book` directory and run `lake exe tpil`. After this, `book/_out/html-multi` contains a multi-page Web version of the book. ================================================ FILE: book/.gitignore ================================================ /.lake ================================================ FILE: book/.verso/verso-xref-manifest.json ================================================ {"version": 0, "sources": {"manual": {"updateFrequency": "manual", "shortName": "ref", "root": "https://lean-lang.org/doc/reference/4.26.0/", "longName": "Lean Language Reference"}}, "outputDir": ".verso"} ================================================ FILE: book/.verso/verso-xref.json ================================================ {"manual": {"Verso.Genre.Manual.section": {"title": "Sections or chapters of the manual", "description": "Sections or chapters of the manual", "contents": {"whitespace": [{"id": "whitespace", "data": {"title": "Whitespace", "shortTitle": null, "sectionNum": "5.2.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Source Files and Modules", "shortTitle": null, "number": "5"}, {"title": "Concrete Syntax", "shortTitle": null, "number": "2"}, {"title": "Whitespace", "shortTitle": null, "number": "1"}]}, "address": "/Source-Files-and-Modules/"}], "wf-rel": [{"id": "wf-rel", "data": {"title": "Well-Founded Relations", "shortTitle": null, "sectionNum": "7.6.3.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Definitions", "shortTitle": null, "number": "7"}, {"title": "Recursive Definitions", "shortTitle": null, "number": "6"}, {"title": "Well-Founded Recursion", "shortTitle": null, "number": "3"}, {"title": "Well-Founded Relations", "shortTitle": null, "number": "1"}]}, "address": "/Definitions/Recursive-Definitions/"}], "well-founded-recursion": [{"id": "well-founded-recursion", "data": {"title": "Well-Founded Recursion", "shortTitle": null, "sectionNum": "7.6.3.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Definitions", "shortTitle": null, "number": "7"}, {"title": "Recursive Definitions", "shortTitle": null, "number": "6"}, {"title": "Well-Founded Recursion", "shortTitle": null, "number": "3"}]}, "address": "/Definitions/Recursive-Definitions/"}], "well-founded-preprocessing": [{"id": "well-founded-preprocessing", "data": {"title": "Preprocessing Function Definitions", "shortTitle": null, "sectionNum": "7.6.3.6.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Definitions", "shortTitle": null, "number": "7"}, {"title": "Recursive Definitions", "shortTitle": null, "number": "6"}, {"title": "Well-Founded Recursion", "shortTitle": null, "number": "3"}, {"title": "Preprocessing Function Definitions", "shortTitle": null, "number": "6"}]}, "address": "/Definitions/Recursive-Definitions/"}], "well-formed-inductives": [{"id": "well-formed-inductives", "data": {"title": "Well-Formedness Requirements", "shortTitle": null, "sectionNum": "4.4.3.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "The Type System", "shortTitle": null, "number": "4"}, {"title": "Inductive Types", "shortTitle": null, "number": "4"}, {"title": "Logical Model", "shortTitle": null, "number": "3"}, {"title": "Well-Formedness Requirements", "shortTitle": null, "number": "2"}]}, "address": "/The-Type-System/Inductive-Types/"}], "unsafe": [{"id": "unsafe", "data": {"title": "Unsafe Definitions", "shortTitle": null, "sectionNum": "7.6.5.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Definitions", "shortTitle": null, "number": "7"}, {"title": "Recursive Definitions", "shortTitle": null, "number": "6"}, {"title": "Partial and Unsafe Definitions", "shortTitle": null, "number": "5"}, {"title": "Unsafe Definitions", "shortTitle": null, "number": "2"}]}, "address": "/Definitions/Recursive-Definitions/"}], "unexpand-and-delab": [{"id": "unexpand-and-delab", "data": {"title": "Extending Lean's Output", "shortTitle": null, "sectionNum": "22.7.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Notations and Macros", "shortTitle": null, "number": "22"}, {"title": "Extending Lean's Output", "shortTitle": null, "number": "7"}]}, "address": "/Notations-and-Macros/Extending-Lean___s-Output/"}], "typographical-conventions": [{"id": "typographical-conventions", "data": {"title": "Typographical Conventions", "shortTitle": null, "sectionNum": "1.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Introduction", "shortTitle": null, "number": "1"}, {"title": "Typographical Conventions", "shortTitle": null, "number": "2"}]}, "address": "/Introduction/"}], "typed-syntax-helpers": [{"id": "typed-syntax-helpers", "data": {"title": "Helpers for Typed Syntax", "shortTitle": null, "sectionNum": "22.4.9.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Notations and Macros", "shortTitle": null, "number": "22"}, {"title": "Defining New Syntax", "shortTitle": null, "number": "4"}, {"title": "Helpers for Typed Syntax", "shortTitle": null, "number": "9"}]}, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "typed-syntax": [{"id": "typed-syntax", "data": {"title": "Typed Syntax", "shortTitle": null, "sectionNum": "22.4.7.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Notations and Macros", "shortTitle": null, "number": "22"}, {"title": "Defining New Syntax", "shortTitle": null, "number": "4"}, {"title": "Typed Syntax", "shortTitle": null, "number": "7"}]}, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "type-system": [{"id": "type-system", "data": {"title": "The Type System", "shortTitle": null, "sectionNum": "4.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "The Type System", "shortTitle": null, "number": "4"}]}, "address": "/The-Type-System/"}], "type-classes": [{"id": "type-classes", "data": {"title": "Type Classes", "shortTitle": null, "sectionNum": "11.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Type Classes", "shortTitle": null, "number": "11"}]}, "address": "/Type-Classes/"}], "tuples": [{"id": "tuples", "data": {"title": "Tuples", "shortTitle": null, "sectionNum": "20.13.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Tuples", "shortTitle": null, "number": "13"}]}, "address": "/Basic-Types/Tuples/"}], "true-false": [{"id": "true-false", "data": {"title": "Truth", "shortTitle": null, "sectionNum": "19.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Propositions", "shortTitle": null, "number": "19"}, {"title": "Truth", "shortTitle": null, "number": "1"}]}, "address": "/Basic-Propositions/Truth/"}], "totality": [{"id": "totality", "data": {"title": "Totality and Termination", "shortTitle": null, "sectionNum": "4.1.4.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "The Type System", "shortTitle": null, "number": "4"}, {"title": "Functions", "shortTitle": null, "number": "1"}, {"title": "Totality and Termination", "shortTitle": null, "number": "4"}]}, "address": "/The-Type-System/Functions/"}], "token-antiquotations": [{"id": "token-antiquotations", "data": {"title": "Token Antiquotations", "shortTitle": null, "sectionNum": "22.5.3.3.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Notations and Macros", "shortTitle": null, "number": "22"}, {"title": "Macros", "shortTitle": null, "number": "5"}, {"title": "Quotation", "shortTitle": null, "number": "3"}, {"title": "Token Antiquotations", "shortTitle": null, "number": "3"}]}, "address": "/Notations-and-Macros/Macros/"}], "the-simplifier": [{"id": "the-simplifier", "data": {"title": "The Simplifier", "shortTitle": null, "sectionNum": "16.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "The Simplifier", "shortTitle": null, "number": "16"}]}, "address": "/The-Simplifier/"}], "test-lint-drivers": [{"id": "test-lint-drivers", "data": {"title": "Test and Lint Drivers", "shortTitle": null, "sectionNum": "24.1.1.4.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Build Tools and Distribution", "shortTitle": null, "number": "24"}, {"title": "Lake", "shortTitle": null, "number": "1"}, {"title": "Concepts and Terminology", "shortTitle": null, "number": "1"}, {"title": "Test and Lint Drivers", "shortTitle": null, "number": "4"}]}, "address": "/Build-Tools-and-Distribution/Lake/"}], "terms": [{"id": "terms", "data": {"title": "Terms", "shortTitle": null, "sectionNum": "10.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Terms", "shortTitle": null, "number": "10"}]}, "address": "/Terms/"}], "terminal-simp": [{"id": "terminal-simp", "data": {"title": "Terminal vs Non-Terminal Positions", "shortTitle": null, "sectionNum": "16.5.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "The Simplifier", "shortTitle": null, "number": "16"}, {"title": "Terminal vs Non-Terminal Positions", "shortTitle": null, "number": "5"}]}, "address": "/The-Simplifier/Terminal-vs-Non-Terminal-Positions/"}], "technical-terms": [{"id": "technical-terms", "data": {"title": "Technical Terminology", "shortTitle": null, "sectionNum": "1.2.3.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Introduction", "shortTitle": null, "number": "1"}, {"title": "Typographical Conventions", "shortTitle": null, "number": "2"}, {"title": "Technical Terminology", "shortTitle": null, "number": "3"}]}, "address": "/Introduction/"}], "tactics": [{"id": "tactics", "data": {"title": "Tactic Proofs", "shortTitle": null, "sectionNum": "13.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Tactic Proofs", "shortTitle": null, "number": "13"}]}, "address": "/Tactic-Proofs/"}], "tactic-ref-term-helpers": [{"id": "tactic-ref-term-helpers", "data": {"title": "Term Elaboration Backends", "shortTitle": null, "sectionNum": "13.5.20.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Tactic Proofs", "shortTitle": null, "number": "13"}, {"title": "Tactic Reference", "shortTitle": null, "number": "5"}, {"title": "Term Elaboration Backends", "shortTitle": null, "number": "20"}]}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "tactic-ref-spred": [{"id": "tactic-ref-spred", "data": {"title": "Tactics for Stateful Goals in Std.Do.SPred", "shortTitle": null, "sectionNum": "13.5.23.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Tactic Proofs", "shortTitle": null, "number": "13"}, {"title": "Tactic Reference", "shortTitle": null, "number": "5"}, {"title": "Verification Condition Generation", "shortTitle": null, "number": "23"}, {"title": "Tactics for Stateful Goals in Std.Do.SPred", "shortTitle": null, "number": "1"}]}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "tactic-ref-search": [{"id": "tactic-ref-search", "data": {"title": "Library Search", "shortTitle": null, "sectionNum": "13.5.15.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Tactic Proofs", "shortTitle": null, "number": "13"}, {"title": "Tactic Reference", "shortTitle": null, "number": "5"}, {"title": "Library Search", "shortTitle": null, "number": "15"}]}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "tactic-ref-sat": [{"id": "tactic-ref-sat", "data": {"title": "SAT Solver Integration", "shortTitle": null, "sectionNum": "13.5.17.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Tactic Proofs", "shortTitle": null, "number": "13"}, {"title": "Tactic Reference", "shortTitle": null, "number": "5"}, {"title": "Decision Procedures", "shortTitle": null, "number": "17"}, {"title": "SAT Solver Integration", "shortTitle": null, "number": "1"}]}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "tactic-ref-rw": [{"id": "tactic-ref-rw", "data": {"title": "Rewriting", "shortTitle": null, "sectionNum": "13.5.13.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Tactic Proofs", "shortTitle": null, "number": "13"}, {"title": "Tactic Reference", "shortTitle": null, "number": "5"}, {"title": "Rewriting", "shortTitle": null, "number": "13"}]}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "tactic-ref-relations": [{"id": "tactic-ref-relations", "data": {"title": "Relations", "shortTitle": null, "sectionNum": "13.5.4.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Tactic Proofs", "shortTitle": null, "number": "13"}, {"title": "Tactic Reference", "shortTitle": null, "number": "5"}, {"title": "Relations", "shortTitle": null, "number": "4"}]}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "tactic-ref-quantifiers": [{"id": "tactic-ref-quantifiers", "data": {"title": "Quantifiers", "shortTitle": null, "sectionNum": "13.5.3.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Tactic Proofs", "shortTitle": null, "number": "13"}, {"title": "Tactic Reference", "shortTitle": null, "number": "5"}, {"title": "Quantifiers", "shortTitle": null, "number": "3"}]}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "tactic-ref-other": [{"id": "tactic-ref-other", "data": {"title": "Other", "shortTitle": null, "sectionNum": "13.5.22.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Tactic Proofs", "shortTitle": null, "number": "13"}, {"title": "Tactic Reference", "shortTitle": null, "number": "5"}, {"title": "Other", "shortTitle": null, "number": "22"}]}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "tactic-ref-mvcgen": [{"id": "tactic-ref-mvcgen", "data": {"title": "Verification Condition Generation", "shortTitle": null, "sectionNum": "13.5.23.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Tactic Proofs", "shortTitle": null, "number": "13"}, {"title": "Tactic Reference", "shortTitle": null, "number": "5"}, {"title": "Verification Condition Generation", "shortTitle": null, "number": "23"}]}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "tactic-ref-lemmas": [{"id": "tactic-ref-lemmas", "data": {"title": "Lemmas", "shortTitle": null, "sectionNum": "13.5.6.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Tactic Proofs", "shortTitle": null, "number": "13"}, {"title": "Tactic Reference", "shortTitle": null, "number": "5"}, {"title": "Lemmas", "shortTitle": null, "number": "6"}]}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "tactic-ref-inductive-intro": [{"id": "tactic-ref-inductive-intro", "data": {"title": "Introduction", "shortTitle": null, "sectionNum": "13.5.14.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Tactic Proofs", "shortTitle": null, "number": "13"}, {"title": "Tactic Reference", "shortTitle": null, "number": "5"}, {"title": "Inductive Types", "shortTitle": null, "number": "14"}, {"title": "Introduction", "shortTitle": null, "number": "1"}]}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "tactic-ref-inductive-elim": [{"id": "tactic-ref-inductive-elim", "data": {"title": "Elimination", "shortTitle": null, "sectionNum": "13.5.14.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Tactic Proofs", "shortTitle": null, "number": "13"}, {"title": "Tactic Reference", "shortTitle": null, "number": "5"}, {"title": "Inductive Types", "shortTitle": null, "number": "14"}, {"title": "Elimination", "shortTitle": null, "number": "2"}]}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "tactic-ref-inductive": [{"id": "tactic-ref-inductive", "data": {"title": "Inductive Types", "shortTitle": null, "sectionNum": "13.5.14.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Tactic Proofs", "shortTitle": null, "number": "13"}, {"title": "Tactic Reference", "shortTitle": null, "number": "5"}, {"title": "Inductive Types", "shortTitle": null, "number": "14"}]}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "tactic-ref-goals": [{"id": "tactic-ref-goals", "data": {"title": "Goal Management", "shortTitle": null, "sectionNum": "13.5.8.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Tactic Proofs", "shortTitle": null, "number": "13"}, {"title": "Tactic Reference", "shortTitle": null, "number": "5"}, {"title": "Goal Management", "shortTitle": null, "number": "8"}]}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "tactic-ref-false": [{"id": "tactic-ref-false", "data": {"title": "Falsehood", "shortTitle": null, "sectionNum": "13.5.7.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Tactic Proofs", "shortTitle": null, "number": "13"}, {"title": "Tactic Reference", "shortTitle": null, "number": "5"}, {"title": "Falsehood", "shortTitle": null, "number": "7"}]}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "tactic-ref-ext": [{"id": "tactic-ref-ext", "data": {"title": "Extensionality", "shortTitle": null, "sectionNum": "13.5.10.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Tactic Proofs", "shortTitle": null, "number": "13"}, {"title": "Tactic Reference", "shortTitle": null, "number": "5"}, {"title": "Extensionality", "shortTitle": null, "number": "10"}]}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "tactic-ref-equality": [{"id": "tactic-ref-equality", "data": {"title": "Equality", "shortTitle": null, "sectionNum": "13.5.4.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Tactic Proofs", "shortTitle": null, "number": "13"}, {"title": "Tactic Reference", "shortTitle": null, "number": "5"}, {"title": "Relations", "shortTitle": null, "number": "4"}, {"title": "Equality", "shortTitle": null, "number": "1"}]}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "tactic-ref-decision": [{"id": "tactic-ref-decision", "data": {"title": "Decision Procedures", "shortTitle": null, "sectionNum": "13.5.17.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Tactic Proofs", "shortTitle": null, "number": "13"}, {"title": "Tactic Reference", "shortTitle": null, "number": "5"}, {"title": "Decision Procedures", "shortTitle": null, "number": "17"}]}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "tactic-ref-debug": [{"id": "tactic-ref-debug", "data": {"title": "Debugging Utilities", "shortTitle": null, "sectionNum": "13.5.21.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Tactic Proofs", "shortTitle": null, "number": "13"}, {"title": "Tactic Reference", "shortTitle": null, "number": "5"}, {"title": "Debugging Utilities", "shortTitle": null, "number": "21"}]}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "tactic-ref-control": [{"id": "tactic-ref-control", "data": {"title": "Control Flow", "shortTitle": null, "sectionNum": "13.5.19.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Tactic Proofs", "shortTitle": null, "number": "13"}, {"title": "Tactic Reference", "shortTitle": null, "number": "5"}, {"title": "Control Flow", "shortTitle": null, "number": "19"}]}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "tactic-ref-classical": [{"id": "tactic-ref-classical", "data": {"title": "Classical Logic", "shortTitle": null, "sectionNum": "13.5.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Tactic Proofs", "shortTitle": null, "number": "13"}, {"title": "Tactic Reference", "shortTitle": null, "number": "5"}, {"title": "Classical Logic", "shortTitle": null, "number": "1"}]}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "tactic-ref-casts": [{"id": "tactic-ref-casts", "data": {"title": "Cast Management", "shortTitle": null, "sectionNum": "13.5.9.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Tactic Proofs", "shortTitle": null, "number": "13"}, {"title": "Tactic Reference", "shortTitle": null, "number": "5"}, {"title": "Cast Management", "shortTitle": null, "number": "9"}]}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "tactic-ref-cases": [{"id": "tactic-ref-cases", "data": {"title": "Case Analysis", "shortTitle": null, "sectionNum": "13.5.16.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Tactic Proofs", "shortTitle": null, "number": "13"}, {"title": "Tactic Reference", "shortTitle": null, "number": "5"}, {"title": "Case Analysis", "shortTitle": null, "number": "16"}]}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "tactic-ref-assumptions": [{"id": "tactic-ref-assumptions", "data": {"title": "Assumptions", "shortTitle": null, "sectionNum": "13.5.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Tactic Proofs", "shortTitle": null, "number": "13"}, {"title": "Tactic Reference", "shortTitle": null, "number": "5"}, {"title": "Assumptions", "shortTitle": null, "number": "2"}]}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "tactic-ref-associativity-commutativity": [{"id": "tactic-ref-associativity-commutativity", "data": {"title": "Associativity and Commutativity", "shortTitle": null, "sectionNum": "13.5.5.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Tactic Proofs", "shortTitle": null, "number": "13"}, {"title": "Tactic Reference", "shortTitle": null, "number": "5"}, {"title": "Associativity and Commutativity", "shortTitle": null, "number": "5"}]}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "tactic-ref": [{"id": "tactic-ref", "data": {"title": "Tactic Reference", "shortTitle": null, "sectionNum": "13.5.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Tactic Proofs", "shortTitle": null, "number": "13"}, {"title": "Tactic Reference", "shortTitle": null, "number": "5"}]}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "tactic-reducibility": [{"id": "tactic-reducibility", "data": {"title": "Controlling Reduction", "shortTitle": null, "sectionNum": "13.5.18.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Tactic Proofs", "shortTitle": null, "number": "13"}, {"title": "Tactic Reference", "shortTitle": null, "number": "5"}, {"title": "Controlling Reduction", "shortTitle": null, "number": "18"}]}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "tactic-macros": [{"id": "tactic-macros", "data": {"title": "Tactic Macros", "shortTitle": null, "sectionNum": "13.8.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Tactic Proofs", "shortTitle": null, "number": "13"}, {"title": "Custom Tactics", "shortTitle": null, "number": "8"}, {"title": "Tactic Macros", "shortTitle": null, "number": "1"}]}, "address": "/Tactic-Proofs/Custom-Tactics/"}], "tactic-macro-extension": [{"id": "tactic-macro-extension", "data": {"title": "Extensible Tactic Macros", "shortTitle": null, "sectionNum": "13.8.1.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Tactic Proofs", "shortTitle": null, "number": "13"}, {"title": "Custom Tactics", "shortTitle": null, "number": "8"}, {"title": "Tactic Macros", "shortTitle": null, "number": "1"}, {"title": "Extensible Tactic Macros", "shortTitle": null, "number": "1"}]}, "address": "/Tactic-Proofs/Custom-Tactics/"}], "tactic-language-unfolding": [{"id": "tactic-language-unfolding", "data": {"title": "Controlling Unfolding", "shortTitle": null, "sectionNum": "13.3.6.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Tactic Proofs", "shortTitle": null, "number": "13"}, {"title": "The Tactic Language", "shortTitle": null, "number": "3"}, {"title": "Namespace and Option Management", "shortTitle": null, "number": "6"}, {"title": "Controlling Unfolding", "shortTitle": null, "number": "1"}]}, "address": "/Tactic-Proofs/The-Tactic-Language/"}], "tactic-language-success-failure": [{"id": "tactic-language-success-failure", "data": {"title": "Success and Failure", "shortTitle": null, "sectionNum": "13.3.1.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Tactic Proofs", "shortTitle": null, "number": "13"}, {"title": "The Tactic Language", "shortTitle": null, "number": "3"}, {"title": "Control Structures", "shortTitle": null, "number": "1"}, {"title": "Success and Failure", "shortTitle": null, "number": "1"}]}, "address": "/Tactic-Proofs/The-Tactic-Language/"}], "tactic-language-sequencing": [{"id": "tactic-language-sequencing", "data": {"title": "Sequencing", "shortTitle": null, "sectionNum": "13.3.1.3.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Tactic Proofs", "shortTitle": null, "number": "13"}, {"title": "The Tactic Language", "shortTitle": null, "number": "3"}, {"title": "Control Structures", "shortTitle": null, "number": "1"}, {"title": "Goal Selection", "shortTitle": null, "number": "3"}, {"title": "Sequencing", "shortTitle": null, "number": "1"}]}, "address": "/Tactic-Proofs/The-Tactic-Language/"}], "tactic-language-options": [{"id": "tactic-language-options", "data": {"title": "Options", "shortTitle": null, "sectionNum": "13.4.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Tactic Proofs", "shortTitle": null, "number": "13"}, {"title": "Options", "shortTitle": null, "number": "4"}]}, "address": "/Tactic-Proofs/Options/"}], "tactic-language-namespaces-options": [{"id": "tactic-language-namespaces-options", "data": {"title": "Namespace and Option Management", "shortTitle": null, "sectionNum": "13.3.6.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Tactic Proofs", "shortTitle": null, "number": "13"}, {"title": "The Tactic Language", "shortTitle": null, "number": "3"}, {"title": "Namespace and Option Management", "shortTitle": null, "number": "6"}]}, "address": "/Tactic-Proofs/The-Tactic-Language/"}], "tactic-language-multiple-goals": [{"id": "tactic-language-multiple-goals", "data": {"title": "Working on Multiple Goals", "shortTitle": null, "sectionNum": "13.3.1.3.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Tactic Proofs", "shortTitle": null, "number": "13"}, {"title": "The Tactic Language", "shortTitle": null, "number": "3"}, {"title": "Control Structures", "shortTitle": null, "number": "1"}, {"title": "Goal Selection", "shortTitle": null, "number": "3"}, {"title": "Working on Multiple Goals", "shortTitle": null, "number": "2"}]}, "address": "/Tactic-Proofs/The-Tactic-Language/"}], "tactic-language-local-defs": [{"id": "tactic-language-local-defs", "data": {"title": "Local Definitions and Proofs", "shortTitle": null, "sectionNum": "13.3.4.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Tactic Proofs", "shortTitle": null, "number": "13"}, {"title": "The Tactic Language", "shortTitle": null, "number": "3"}, {"title": "Local Definitions and Proofs", "shortTitle": null, "number": "4"}]}, "address": "/Tactic-Proofs/The-Tactic-Language/"}], "tactic-language-iteration": [{"id": "tactic-language-iteration", "data": {"title": "Repetition and Iteration", "shortTitle": null, "sectionNum": "13.3.1.5.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Tactic Proofs", "shortTitle": null, "number": "13"}, {"title": "The Tactic Language", "shortTitle": null, "number": "3"}, {"title": "Control Structures", "shortTitle": null, "number": "1"}, {"title": "Repetition and Iteration", "shortTitle": null, "number": "5"}]}, "address": "/Tactic-Proofs/The-Tactic-Language/"}], "tactic-language-hygiene": [{"id": "tactic-language-hygiene", "data": {"title": "Names and Hygiene", "shortTitle": null, "sectionNum": "13.3.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Tactic Proofs", "shortTitle": null, "number": "13"}, {"title": "The Tactic Language", "shortTitle": null, "number": "3"}, {"title": "Names and Hygiene", "shortTitle": null, "number": "2"}]}, "address": "/Tactic-Proofs/The-Tactic-Language/"}], "tactic-language-goal-selection": [{"id": "tactic-language-goal-selection", "data": {"title": "Goal Selection", "shortTitle": null, "sectionNum": "13.3.1.3.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Tactic Proofs", "shortTitle": null, "number": "13"}, {"title": "The Tactic Language", "shortTitle": null, "number": "3"}, {"title": "Control Structures", "shortTitle": null, "number": "1"}, {"title": "Goal Selection", "shortTitle": null, "number": "3"}]}, "address": "/Tactic-Proofs/The-Tactic-Language/"}], "tactic-language-focusing": [{"id": "tactic-language-focusing", "data": {"title": "Focusing", "shortTitle": null, "sectionNum": "13.3.1.4.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Tactic Proofs", "shortTitle": null, "number": "13"}, {"title": "The Tactic Language", "shortTitle": null, "number": "3"}, {"title": "Control Structures", "shortTitle": null, "number": "1"}, {"title": "Focusing", "shortTitle": null, "number": "4"}]}, "address": "/Tactic-Proofs/The-Tactic-Language/"}], "tactic-language-control": [{"id": "tactic-language-control", "data": {"title": "Control Structures", "shortTitle": null, "sectionNum": "13.3.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Tactic Proofs", "shortTitle": null, "number": "13"}, {"title": "The Tactic Language", "shortTitle": null, "number": "3"}, {"title": "Control Structures", "shortTitle": null, "number": "1"}]}, "address": "/Tactic-Proofs/The-Tactic-Language/"}], "tactic-language-branching": [{"id": "tactic-language-branching", "data": {"title": "Branching", "shortTitle": null, "sectionNum": "13.3.1.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Tactic Proofs", "shortTitle": null, "number": "13"}, {"title": "The Tactic Language", "shortTitle": null, "number": "3"}, {"title": "Control Structures", "shortTitle": null, "number": "1"}, {"title": "Branching", "shortTitle": null, "number": "2"}]}, "address": "/Tactic-Proofs/The-Tactic-Language/"}], "tactic-language-assumptions": [{"id": "tactic-language-assumptions", "data": {"title": "Accessing Assumptions", "shortTitle": null, "sectionNum": "13.3.2.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Tactic Proofs", "shortTitle": null, "number": "13"}, {"title": "The Tactic Language", "shortTitle": null, "number": "3"}, {"title": "Names and Hygiene", "shortTitle": null, "number": "2"}, {"title": "Accessing Assumptions", "shortTitle": null, "number": "1"}]}, "address": "/Tactic-Proofs/The-Tactic-Language/"}], "tactic-language-assumption-management": [{"id": "tactic-language-assumption-management", "data": {"title": "Assumption Management", "shortTitle": null, "sectionNum": "13.3.3.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Tactic Proofs", "shortTitle": null, "number": "13"}, {"title": "The Tactic Language", "shortTitle": null, "number": "3"}, {"title": "Assumption Management", "shortTitle": null, "number": "3"}]}, "address": "/Tactic-Proofs/The-Tactic-Language/"}], "tactic-language": [{"id": "tactic-language", "data": {"title": "The Tactic Language", "shortTitle": null, "sectionNum": "13.3.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Tactic Proofs", "shortTitle": null, "number": "13"}, {"title": "The Tactic Language", "shortTitle": null, "number": "3"}]}, "address": "/Tactic-Proofs/The-Tactic-Language/"}], "tactic-config": [{"id": "tactic-config", "data": {"title": "Configuration", "shortTitle": null, "sectionNum": "13.3.5.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Tactic Proofs", "shortTitle": null, "number": "13"}, {"title": "The Tactic Language", "shortTitle": null, "number": "3"}, {"title": "Configuration", "shortTitle": null, "number": "5"}]}, "address": "/Tactic-Proofs/The-Tactic-Language/"}], "syntax-rules": [{"id": "syntax-rules", "data": {"title": "Syntax Rules", "shortTitle": null, "sectionNum": "22.4.11.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Notations and Macros", "shortTitle": null, "number": "22"}, {"title": "Defining New Syntax", "shortTitle": null, "number": "4"}, {"title": "Syntax Rules", "shortTitle": null, "number": "11"}]}, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "syntax-indentation": [{"id": "syntax-indentation", "data": {"title": "Indentation", "shortTitle": null, "sectionNum": "22.4.12.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Notations and Macros", "shortTitle": null, "number": "22"}, {"title": "Defining New Syntax", "shortTitle": null, "number": "4"}, {"title": "Indentation", "shortTitle": null, "number": "12"}]}, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "syntax-ext": [{"id": "syntax-ext", "data": {"title": "Defining New Syntax", "shortTitle": null, "sectionNum": "22.4.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Notations and Macros", "shortTitle": null, "number": "22"}, {"title": "Defining New Syntax", "shortTitle": null, "number": "4"}]}, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "syntax-data": [{"id": "syntax-data", "data": {"title": "Syntax Model", "shortTitle": null, "sectionNum": "22.4.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Notations and Macros", "shortTitle": null, "number": "22"}, {"title": "Defining New Syntax", "shortTitle": null, "number": "4"}, {"title": "Syntax Model", "shortTitle": null, "number": "1"}]}, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "syntax-categories": [{"id": "syntax-categories", "data": {"title": "Syntax Categories", "shortTitle": null, "sectionNum": "22.4.10.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Notations and Macros", "shortTitle": null, "number": "22"}, {"title": "Defining New Syntax", "shortTitle": null, "number": "4"}, {"title": "Syntax Categories", "shortTitle": null, "number": "10"}]}, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "sum-types": [{"id": "sum-types", "data": {"title": "Sum Types", "shortTitle": null, "sectionNum": "20.14.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Sum Types", "shortTitle": null, "number": "14"}]}, "address": "/Basic-Types/Sum-Types/"}], "sum-syntax": [{"id": "sum-syntax", "data": {"title": "Syntax", "shortTitle": null, "sectionNum": "20.14.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Sum Types", "shortTitle": null, "number": "14"}, {"title": "Syntax", "shortTitle": null, "number": "1"}]}, "address": "/Basic-Types/Sum-Types/"}], "sum-api": [{"id": "sum-api", "data": {"title": "API Reference", "shortTitle": null, "sectionNum": "20.14.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Sum Types", "shortTitle": null, "number": "14"}, {"title": "API Reference", "shortTitle": null, "number": "2"}]}, "address": "/Basic-Types/Sum-Types/"}], "subsingleton-elimination": [{"id": "subsingleton-elimination", "data": {"title": "Subsingleton Elimination", "shortTitle": null, "sectionNum": "4.4.3.1.1.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "The Type System", "shortTitle": null, "number": "4"}, {"title": "Inductive Types", "shortTitle": null, "number": "4"}, {"title": "Logical Model", "shortTitle": null, "number": "3"}, {"title": "Recursors", "shortTitle": null, "number": "1"}, {"title": "Recursor Types", "shortTitle": null, "number": "1"}, {"title": "Subsingleton Elimination", "shortTitle": null, "number": "1"}]}, "address": "/The-Type-System/Inductive-Types/"}], "subarray": [{"id": "subarray", "data": {"title": "Sub-Arrays", "shortTitle": null, "sectionNum": "20.16.5.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Arrays", "shortTitle": null, "number": "16"}, {"title": "Sub-Arrays", "shortTitle": null, "number": "5"}]}, "address": "/Basic-Types/Arrays/"}], "structures": [{"id": "structures", "data": {"title": "Structure Declarations", "shortTitle": null, "sectionNum": "4.4.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "The Type System", "shortTitle": null, "number": "4"}, {"title": "Inductive Types", "shortTitle": null, "number": "4"}, {"title": "Structure Declarations", "shortTitle": null, "number": "2"}]}, "address": "/The-Type-System/Inductive-Types/"}], "structure-params": [{"id": "structure-params", "data": {"title": "Structure Parameters", "shortTitle": null, "sectionNum": "4.4.2.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "The Type System", "shortTitle": null, "number": "4"}, {"title": "Inductive Types", "shortTitle": null, "number": "4"}, {"title": "Structure Declarations", "shortTitle": null, "number": "2"}, {"title": "Structure Parameters", "shortTitle": null, "number": "1"}]}, "address": "/The-Type-System/Inductive-Types/"}], "structure-inheritance": [{"id": "structure-inheritance", "data": {"title": "Structure Inheritance", "shortTitle": null, "sectionNum": "4.4.2.4.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "The Type System", "shortTitle": null, "number": "4"}, {"title": "Inductive Types", "shortTitle": null, "number": "4"}, {"title": "Structure Declarations", "shortTitle": null, "number": "2"}, {"title": "Structure Inheritance", "shortTitle": null, "number": "4"}]}, "address": "/The-Type-System/Inductive-Types/"}], "structure-fields": [{"id": "structure-fields", "data": {"title": "Fields", "shortTitle": null, "sectionNum": "4.4.2.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "The Type System", "shortTitle": null, "number": "4"}, {"title": "Inductive Types", "shortTitle": null, "number": "4"}, {"title": "Structure Declarations", "shortTitle": null, "number": "2"}, {"title": "Fields", "shortTitle": null, "number": "2"}]}, "address": "/The-Type-System/Inductive-Types/"}], "structure-constructors": [{"id": "structure-constructors", "data": {"title": "Structure Constructors", "shortTitle": null, "sectionNum": "4.4.2.3.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "The Type System", "shortTitle": null, "number": "4"}, {"title": "Inductive Types", "shortTitle": null, "number": "4"}, {"title": "Structure Declarations", "shortTitle": null, "number": "2"}, {"title": "Structure Constructors", "shortTitle": null, "number": "3"}]}, "address": "/The-Type-System/Inductive-Types/"}], "structural-recursion": [{"id": "structural-recursion", "data": {"title": "Structural Recursion", "shortTitle": null, "sectionNum": "7.6.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Definitions", "shortTitle": null, "number": "7"}, {"title": "Recursive Definitions", "shortTitle": null, "number": "6"}, {"title": "Structural Recursion", "shortTitle": null, "number": "2"}]}, "address": "/Definitions/Recursive-Definitions/"}], "string-syntax": [{"id": "string-syntax", "data": {"title": "Syntax", "shortTitle": null, "sectionNum": "20.8.3.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Strings", "shortTitle": null, "number": "8"}, {"title": "Syntax", "shortTitle": null, "number": "3"}]}, "address": "/Basic-Types/Strings/"}], "string-runtime": [{"id": "string-runtime", "data": {"title": "Run-Time Representation", "shortTitle": null, "sectionNum": "20.8.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Strings", "shortTitle": null, "number": "8"}, {"title": "Run-Time Representation", "shortTitle": null, "number": "2"}]}, "address": "/Basic-Types/Strings/"}], "string-performance": [{"id": "string-performance", "data": {"title": "Performance Notes", "shortTitle": null, "sectionNum": "20.8.2.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Strings", "shortTitle": null, "number": "8"}, {"title": "Run-Time Representation", "shortTitle": null, "number": "2"}, {"title": "Performance Notes", "shortTitle": null, "number": "1"}]}, "address": "/Basic-Types/Strings/"}], "string-literals": [{"id": "string-literals", "data": {"title": "String Literals", "shortTitle": null, "sectionNum": "20.8.3.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Strings", "shortTitle": null, "number": "8"}, {"title": "Syntax", "shortTitle": null, "number": "3"}, {"title": "String Literals", "shortTitle": null, "number": "1"}]}, "address": "/Basic-Types/Strings/"}], "string-iterators": [{"id": "string-iterators", "data": {"title": "Legacy Iterators", "shortTitle": null, "sectionNum": "20.8.4.10.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Strings", "shortTitle": null, "number": "8"}, {"title": "API Reference", "shortTitle": null, "number": "4"}, {"title": "Legacy Iterators", "shortTitle": null, "number": "10"}]}, "address": "/Basic-Types/Strings/"}], "string-interpolation": [{"id": "string-interpolation", "data": {"title": "Interpolated Strings", "shortTitle": null, "sectionNum": "20.8.3.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Strings", "shortTitle": null, "number": "8"}, {"title": "Syntax", "shortTitle": null, "number": "3"}, {"title": "Interpolated Strings", "shortTitle": null, "number": "2"}]}, "address": "/Basic-Types/Strings/"}], "string-ffi": [{"id": "string-ffi", "data": {"title": "FFI", "shortTitle": null, "sectionNum": "20.8.5.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Strings", "shortTitle": null, "number": "8"}, {"title": "FFI", "shortTitle": null, "number": "5"}]}, "address": "/Basic-Types/Strings/"}], "string-api-valid-pos": [{"id": "string-api-valid-pos", "data": {"title": "Positions", "shortTitle": null, "sectionNum": "20.8.4.4.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Strings", "shortTitle": null, "number": "8"}, {"title": "API Reference", "shortTitle": null, "number": "4"}, {"title": "Positions", "shortTitle": null, "number": "4"}]}, "address": "/Basic-Types/Strings/"}], "string-api-substring": [{"id": "string-api-substring", "data": {"title": "Raw Substrings", "shortTitle": null, "sectionNum": "20.8.4.12.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Strings", "shortTitle": null, "number": "8"}, {"title": "API Reference", "shortTitle": null, "number": "4"}, {"title": "Raw Substrings", "shortTitle": null, "number": "12"}]}, "address": "/Basic-Types/Strings/"}], "string-api-slice": [{"id": "string-api-slice", "data": {"title": "String Slices", "shortTitle": null, "sectionNum": "20.8.4.11.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Strings", "shortTitle": null, "number": "8"}, {"title": "API Reference", "shortTitle": null, "number": "4"}, {"title": "String Slices", "shortTitle": null, "number": "11"}]}, "address": "/Basic-Types/Strings/"}], "string-api-props": [{"id": "string-api-props", "data": {"title": "Properties", "shortTitle": null, "sectionNum": "20.8.4.3.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Strings", "shortTitle": null, "number": "8"}, {"title": "API Reference", "shortTitle": null, "number": "4"}, {"title": "Properties", "shortTitle": null, "number": "3"}]}, "address": "/Basic-Types/Strings/"}], "string-api-pos": [{"id": "string-api-pos", "data": {"title": "Raw Positions", "shortTitle": null, "sectionNum": "20.8.4.5.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Strings", "shortTitle": null, "number": "8"}, {"title": "API Reference", "shortTitle": null, "number": "4"}, {"title": "Raw Positions", "shortTitle": null, "number": "5"}]}, "address": "/Basic-Types/Strings/"}], "string-api-modify": [{"id": "string-api-modify", "data": {"title": "Manipulation", "shortTitle": null, "sectionNum": "20.8.4.9.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Strings", "shortTitle": null, "number": "8"}, {"title": "API Reference", "shortTitle": null, "number": "4"}, {"title": "Manipulation", "shortTitle": null, "number": "9"}]}, "address": "/Basic-Types/Strings/"}], "string-api-meta": [{"id": "string-api-meta", "data": {"title": "Metaprogramming", "shortTitle": null, "sectionNum": "20.8.4.13.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Strings", "shortTitle": null, "number": "8"}, {"title": "API Reference", "shortTitle": null, "number": "4"}, {"title": "Metaprogramming", "shortTitle": null, "number": "13"}]}, "address": "/Basic-Types/Strings/"}], "string-api-lookup": [{"id": "string-api-lookup", "data": {"title": "Lookups and Modifications", "shortTitle": null, "sectionNum": "20.8.4.6.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Strings", "shortTitle": null, "number": "8"}, {"title": "API Reference", "shortTitle": null, "number": "4"}, {"title": "Lookups and Modifications", "shortTitle": null, "number": "6"}]}, "address": "/Basic-Types/Strings/"}], "string-api-fold": [{"id": "string-api-fold", "data": {"title": "Folds and Aggregation", "shortTitle": null, "sectionNum": "20.8.4.7.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Strings", "shortTitle": null, "number": "8"}, {"title": "API Reference", "shortTitle": null, "number": "4"}, {"title": "Folds and Aggregation", "shortTitle": null, "number": "7"}]}, "address": "/Basic-Types/Strings/"}], "string-api-encoding": [{"id": "string-api-encoding", "data": {"title": "Encodings", "shortTitle": null, "sectionNum": "20.8.4.14.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Strings", "shortTitle": null, "number": "8"}, {"title": "API Reference", "shortTitle": null, "number": "4"}, {"title": "Encodings", "shortTitle": null, "number": "14"}]}, "address": "/Basic-Types/Strings/"}], "string-api-convert": [{"id": "string-api-convert", "data": {"title": "Conversions", "shortTitle": null, "sectionNum": "20.8.4.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Strings", "shortTitle": null, "number": "8"}, {"title": "API Reference", "shortTitle": null, "number": "4"}, {"title": "Conversions", "shortTitle": null, "number": "2"}]}, "address": "/Basic-Types/Strings/"}], "string-api-compare": [{"id": "string-api-compare", "data": {"title": "Comparisons", "shortTitle": null, "sectionNum": "20.8.4.8.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Strings", "shortTitle": null, "number": "8"}, {"title": "API Reference", "shortTitle": null, "number": "4"}, {"title": "Comparisons", "shortTitle": null, "number": "8"}]}, "address": "/Basic-Types/Strings/"}], "string-api-build": [{"id": "string-api-build", "data": {"title": "Constructing", "shortTitle": null, "sectionNum": "20.8.4.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Strings", "shortTitle": null, "number": "8"}, {"title": "API Reference", "shortTitle": null, "number": "4"}, {"title": "Constructing", "shortTitle": null, "number": "1"}]}, "address": "/Basic-Types/Strings/"}], "string-api": [{"id": "string-api", "data": {"title": "API Reference", "shortTitle": null, "sectionNum": "20.8.4.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Strings", "shortTitle": null, "number": "8"}, {"title": "API Reference", "shortTitle": null, "number": "4"}]}, "address": "/Basic-Types/Strings/"}], "strict-positivity": [{"id": "strict-positivity", "data": {"title": "Strict Positivity", "shortTitle": null, "sectionNum": "4.4.3.2.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "The Type System", "shortTitle": null, "number": "4"}, {"title": "Inductive Types", "shortTitle": null, "number": "4"}, {"title": "Logical Model", "shortTitle": null, "number": "3"}, {"title": "Well-Formedness Requirements", "shortTitle": null, "number": "2"}, {"title": "Strict Positivity", "shortTitle": null, "number": "2"}]}, "address": "/The-Type-System/Inductive-Types/"}], "stdio": [{"id": "stdio", "data": {"title": "Standard I/O", "shortTitle": null, "sectionNum": "15.5.5.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "IO", "shortTitle": null, "number": "15"}, {"title": "Files, File Handles, and Streams", "shortTitle": null, "number": "5"}, {"title": "Standard I/O", "shortTitle": null, "number": "5"}]}, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "state-monads": [{"id": "state-monads", "data": {"title": "State", "shortTitle": null, "sectionNum": "14.5.4.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Functors, Monads and do -Notation", "shortTitle": null, "number": "14"}, {"title": "Varieties of Monads", "shortTitle": null, "number": "5"}, {"title": "State", "shortTitle": null, "number": "4"}]}, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "standard-axioms": [{"id": "standard-axioms", "data": {"title": "Standard Axioms", "shortTitle": null, "sectionNum": "8.4.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Axioms", "shortTitle": null, "number": "8"}, {"title": "Standard Axioms", "shortTitle": null, "number": "4"}]}, "address": "/Axioms/"}], "squash-types": [{"id": "squash-types", "data": {"title": "Squash Types", "shortTitle": null, "sectionNum": "4.5.7.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "The Type System", "shortTitle": null, "number": "4"}, {"title": "Quotients", "shortTitle": null, "number": "5"}, {"title": "Squash Types", "shortTitle": null, "number": "7"}]}, "address": "/The-Type-System/Quotients/"}], "splices": [{"id": "splices", "data": {"title": "Splices", "shortTitle": null, "sectionNum": "22.5.3.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Notations and Macros", "shortTitle": null, "number": "22"}, {"title": "Macros", "shortTitle": null, "number": "5"}, {"title": "Quotation", "shortTitle": null, "number": "3"}, {"title": "Splices", "shortTitle": null, "number": "2"}]}, "address": "/Notations-and-Macros/Macros/"}], "source-info": [{"id": "source-info", "data": {"title": "Source Positions", "shortTitle": null, "sectionNum": "22.4.5.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Notations and Macros", "shortTitle": null, "number": "22"}, {"title": "Defining New Syntax", "shortTitle": null, "number": "4"}, {"title": "Source Positions", "shortTitle": null, "number": "5"}]}, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "sort-coercion": [{"id": "sort-coercion", "data": {"title": "Coercing to Sorts", "shortTitle": null, "sectionNum": "12.3.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Coercions", "shortTitle": null, "number": "12"}, {"title": "Coercing to Sorts", "shortTitle": null, "number": "3"}]}, "address": "/Coercions/Coercing-to-Sorts/"}], "simp-vs-rw": [{"id": "simp-vs-rw", "data": {"title": "Simplification vs Rewriting", "shortTitle": null, "sectionNum": "16.7.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "The Simplifier", "shortTitle": null, "number": "16"}, {"title": "Simplification vs Rewriting", "shortTitle": null, "number": "7"}]}, "address": "/The-Simplifier/Simplification-vs-Rewriting/"}], "simp-tactics": [{"id": "simp-tactics", "data": {"title": "Simplification", "shortTitle": null, "sectionNum": "13.5.12.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Tactic Proofs", "shortTitle": null, "number": "13"}, {"title": "Tactic Reference", "shortTitle": null, "number": "5"}, {"title": "Simplification", "shortTitle": null, "number": "12"}]}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "simp-tactic-params": [{"id": "simp-tactic-params", "data": {"title": "Parameters", "shortTitle": null, "sectionNum": "16.1.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "The Simplifier", "shortTitle": null, "number": "16"}, {"title": "Invoking the Simplifier", "shortTitle": null, "number": "1"}, {"title": "Parameters", "shortTitle": null, "number": "1"}]}, "address": "/The-Simplifier/Invoking-the-Simplifier/"}], "simp-tactic-naming": [{"id": "simp-tactic-naming", "data": {"title": "Invoking the Simplifier", "shortTitle": null, "sectionNum": "16.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "The Simplifier", "shortTitle": null, "number": "16"}, {"title": "Invoking the Simplifier", "shortTitle": null, "number": "1"}]}, "address": "/The-Simplifier/Invoking-the-Simplifier/"}], "simp-sets": [{"id": "simp-sets", "data": {"title": "Simp sets", "shortTitle": null, "sectionNum": "16.3.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "The Simplifier", "shortTitle": null, "number": "16"}, {"title": "Simp sets", "shortTitle": null, "number": "3"}]}, "address": "/The-Simplifier/Simp-sets/"}], "simp-rewrites": [{"id": "simp-rewrites", "data": {"title": "Rewrite Rules", "shortTitle": null, "sectionNum": "16.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "The Simplifier", "shortTitle": null, "number": "16"}, {"title": "Rewrite Rules", "shortTitle": null, "number": "2"}]}, "address": "/The-Simplifier/Rewrite-Rules/"}], "simp-options": [{"id": "simp-options", "data": {"title": "Options", "shortTitle": null, "sectionNum": "16.6.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "The Simplifier", "shortTitle": null, "number": "16"}, {"title": "Configuring Simplification", "shortTitle": null, "number": "6"}, {"title": "Options", "shortTitle": null, "number": "1"}]}, "address": "/The-Simplifier/Configuring-Simplification/"}], "simp-normal-forms": [{"id": "simp-normal-forms", "data": {"title": "Simp Normal Forms", "shortTitle": null, "sectionNum": "16.4.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "The Simplifier", "shortTitle": null, "number": "16"}, {"title": "Simp Normal Forms", "shortTitle": null, "number": "4"}]}, "address": "/The-Simplifier/Simp-Normal-Forms/"}], "simp-config": [{"id": "simp-config", "data": {"title": "Configuring Simplification", "shortTitle": null, "sectionNum": "16.6.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "The Simplifier", "shortTitle": null, "number": "16"}, {"title": "Configuring Simplification", "shortTitle": null, "number": "6"}]}, "address": "/The-Simplifier/Configuring-Simplification/"}], "signature-syntax": [{"id": "signature-syntax", "data": {"title": "Headers and Signatures", "shortTitle": null, "sectionNum": "7.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Definitions", "shortTitle": null, "number": "7"}, {"title": "Headers and Signatures", "shortTitle": null, "number": "2"}]}, "address": "/Definitions/Headers-and-Signatures/"}], "sigma-types": [{"id": "sigma-types", "data": {"title": "Dependent Pairs", "shortTitle": null, "sectionNum": "20.13.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Tuples", "shortTitle": null, "number": "13"}, {"title": "Dependent Pairs", "shortTitle": null, "number": "2"}]}, "address": "/Basic-Types/Tuples/"}], "setoids": [{"id": "setoids", "data": {"title": "Setoids", "shortTitle": null, "sectionNum": "4.5.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "The Type System", "shortTitle": null, "number": "4"}, {"title": "Quotients", "shortTitle": null, "number": "5"}, {"title": "Setoids", "shortTitle": null, "number": "2"}]}, "address": "/The-Type-System/Quotients/"}], "section-variables": [{"id": "section-variables", "data": {"title": "Section Variables", "shortTitle": null, "sectionNum": "6.2.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Namespaces and Sections", "shortTitle": null, "number": "6"}, {"title": "Section Scopes", "shortTitle": null, "number": "2"}, {"title": "Section Variables", "shortTitle": null, "number": "2"}]}, "address": "/Namespaces-and-Sections/"}], "scopes": [{"id": "scopes", "data": {"title": "Section Scopes", "shortTitle": null, "sectionNum": "6.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Namespaces and Sections", "shortTitle": null, "number": "6"}, {"title": "Section Scopes", "shortTitle": null, "number": "2"}]}, "address": "/Namespaces-and-Sections/"}], "scoped-attributes": [{"id": "scoped-attributes", "data": {"title": "Scoped Attributes", "shortTitle": null, "sectionNum": "9.3.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Attributes", "shortTitle": null, "number": "9"}, {"title": "Scoped Attributes", "shortTitle": null, "number": "3"}]}, "address": "/Attributes/"}], "scope-commands": [{"id": "scope-commands", "data": {"title": "Controlling Section Scopes", "shortTitle": null, "sectionNum": "6.2.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Namespaces and Sections", "shortTitle": null, "number": "6"}, {"title": "Section Scopes", "shortTitle": null, "number": "2"}, {"title": "Controlling Section Scopes", "shortTitle": null, "number": "1"}]}, "address": "/Namespaces-and-Sections/"}], "runtime": [{"id": "runtime", "data": {"title": "Run-Time Code", "shortTitle": null, "sectionNum": "23.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Run-Time Code", "shortTitle": null, "number": "23"}]}, "address": "/Run-Time-Code/"}], "run-time-inductives": [{"id": "run-time-inductives", "data": {"title": "Run-Time Representation", "shortTitle": null, "sectionNum": "4.4.4.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "The Type System", "shortTitle": null, "number": "4"}, {"title": "Inductive Types", "shortTitle": null, "number": "4"}, {"title": "Run-Time Representation", "shortTitle": null, "number": "4"}]}, "address": "/The-Type-System/Inductive-Types/"}], "repr-instance-howto": [{"id": "repr-instance-howto", "data": {"title": "How To Write a Repr Instance", "shortTitle": null, "sectionNum": "3.7.2.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Interacting with Lean", "shortTitle": null, "number": "3"}, {"title": "Formatted Output", "shortTitle": null, "number": "7"}, {"title": "Repr", "shortTitle": null, "number": "2"}, {"title": "How To Write a Repr Instance", "shortTitle": null, "number": "1"}]}, "address": "/Interacting-with-Lean/"}], "repr": [{"id": "repr", "data": {"title": "Repr", "shortTitle": null, "sectionNum": "3.7.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Interacting with Lean", "shortTitle": null, "number": "3"}, {"title": "Formatted Output", "shortTitle": null, "number": "7"}, {"title": "Repr", "shortTitle": null, "number": "2"}]}, "address": "/Interacting-with-Lean/"}], "release-v4.9.0": [{"id": "release-v4___9___0", "data": {"title": "Lean 4.9.0 (2024-07-01)", "shortTitle": null, "sectionNum": null, "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Release Notes", "shortTitle": null, "number": null}, {"title": "Lean 4.9.0 (2024-07-01)", "shortTitle": null, "number": "19"}]}, "address": "/releases/v4.9.0/"}], "release-v4.8.0": [{"id": "release-v4___8___0", "data": {"title": "Lean 4.8.0 (2024-06-05)", "shortTitle": null, "sectionNum": null, "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Release Notes", "shortTitle": null, "number": null}, {"title": "Lean 4.8.0 (2024-06-05)", "shortTitle": null, "number": "20"}]}, "address": "/releases/v4.8.0/"}], "release-v4.7.0": [{"id": "release-v4___7___0", "data": {"title": "Lean 4.7.0 (2024-04-03)", "shortTitle": null, "sectionNum": null, "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Release Notes", "shortTitle": null, "number": null}, {"title": "Lean 4.7.0 (2024-04-03)", "shortTitle": null, "number": "21"}]}, "address": "/releases/v4.7.0/"}], "release-v4.6.0": [{"id": "release-v4___6___0", "data": {"title": "Lean 4.6.0 (2024-02-29)", "shortTitle": null, "sectionNum": null, "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Release Notes", "shortTitle": null, "number": null}, {"title": "Lean 4.6.0 (2024-02-29)", "shortTitle": null, "number": "22"}]}, "address": "/releases/v4.6.0/"}], "release-v4.5.0": [{"id": "release-v4___5___0", "data": {"title": "Lean 4.5.0 (2024-02-01)", "shortTitle": null, "sectionNum": null, "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Release Notes", "shortTitle": null, "number": null}, {"title": "Lean 4.5.0 (2024-02-01)", "shortTitle": null, "number": "23"}]}, "address": "/releases/v4.5.0/"}], "release-v4.4.0": [{"id": "release-v4___4___0", "data": {"title": "Lean 4.4.0 (2023-12-31)", "shortTitle": null, "sectionNum": null, "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Release Notes", "shortTitle": null, "number": null}, {"title": "Lean 4.4.0 (2023-12-31)", "shortTitle": null, "number": "24"}]}, "address": "/releases/v4.4.0/"}], "release-v4.3.0": [{"id": "release-v4___3___0", "data": {"title": "Lean 4.3.0 (2023-11-30)", "shortTitle": null, "sectionNum": null, "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Release Notes", "shortTitle": null, "number": null}, {"title": "Lean 4.3.0 (2023-11-30)", "shortTitle": null, "number": "25"}]}, "address": "/releases/v4.3.0/"}], "release-v4.26.0": [{"id": "release-v4___26___0", "data": {"title": "Lean 4.26.0 (2025-12-13)", "shortTitle": null, "sectionNum": null, "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Release Notes", "shortTitle": null, "number": null}, {"title": "Lean 4.26.0 (2025-12-13)", "shortTitle": null, "number": "1"}]}, "address": "/releases/v4.26.0/"}], "release-v4.25.1": [{"id": "release-v4___25___1", "data": {"title": "Lean 4.25.1 (2025-11-18)", "shortTitle": null, "sectionNum": null, "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Release Notes", "shortTitle": null, "number": null}, {"title": "Lean 4.25.1 (2025-11-18)", "shortTitle": null, "number": "2"}]}, "address": "/releases/v4.25.1/"}], "release-v4.25.0": [{"id": "release-v4___25___0", "data": {"title": "Lean 4.25.0 (2025-11-14)", "shortTitle": null, "sectionNum": null, "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Release Notes", "shortTitle": null, "number": null}, {"title": "Lean 4.25.0 (2025-11-14)", "shortTitle": null, "number": "3"}]}, "address": "/releases/v4.25.0/"}], "release-v4.24.0": [{"id": "release-v4___24___0", "data": {"title": "Lean 4.24.0 (2025-10-14)", "shortTitle": null, "sectionNum": null, "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Release Notes", "shortTitle": null, "number": null}, {"title": "Lean 4.24.0 (2025-10-14)", "shortTitle": null, "number": "4"}]}, "address": "/releases/v4.24.0/"}], "release-v4.23.0": [{"id": "release-v4___23___0", "data": {"title": "Lean 4.23.0 (2025-09-15)", "shortTitle": null, "sectionNum": null, "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Release Notes", "shortTitle": null, "number": null}, {"title": "Lean 4.23.0 (2025-09-15)", "shortTitle": null, "number": "5"}]}, "address": "/releases/v4.23.0/"}], "release-v4.22.0": [{"id": "release-v4___22___0", "data": {"title": "Lean 4.22.0 (2025-08-14)", "shortTitle": null, "sectionNum": null, "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Release Notes", "shortTitle": null, "number": null}, {"title": "Lean 4.22.0 (2025-08-14)", "shortTitle": null, "number": "6"}]}, "address": "/releases/v4.22.0/"}], "release-v4.21.0": [{"id": "release-v4___21___0", "data": {"title": "Lean 4.21.0 (2025-06-30)", "shortTitle": null, "sectionNum": null, "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Release Notes", "shortTitle": null, "number": null}, {"title": "Lean 4.21.0 (2025-06-30)", "shortTitle": null, "number": "7"}]}, "address": "/releases/v4.21.0/"}], "release-v4.20.0": [{"id": "release-v4___20___0", "data": {"title": "Lean 4.20.0 (2025-06-02)", "shortTitle": null, "sectionNum": null, "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Release Notes", "shortTitle": null, "number": null}, {"title": "Lean 4.20.0 (2025-06-02)", "shortTitle": null, "number": "8"}]}, "address": "/releases/v4.20.0/"}], "release-v4.2.0": [{"id": "release-v4___2___0", "data": {"title": "Lean 4.2.0 (2023-10-31)", "shortTitle": null, "sectionNum": null, "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Release Notes", "shortTitle": null, "number": null}, {"title": "Lean 4.2.0 (2023-10-31)", "shortTitle": null, "number": "26"}]}, "address": "/releases/v4.2.0/"}], "release-v4.19.0": [{"id": "release-v4___19___0", "data": {"title": "Lean 4.19.0 (2025-05-01)", "shortTitle": null, "sectionNum": null, "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Release Notes", "shortTitle": null, "number": null}, {"title": "Lean 4.19.0 (2025-05-01)", "shortTitle": null, "number": "9"}]}, "address": "/releases/v4.19.0/"}], "release-v4.18.0": [{"id": "release-v4___18___0", "data": {"title": "Lean 4.18.0 (2025-04-02)", "shortTitle": null, "sectionNum": null, "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Release Notes", "shortTitle": null, "number": null}, {"title": "Lean 4.18.0 (2025-04-02)", "shortTitle": null, "number": "10"}]}, "address": "/releases/v4.18.0/"}], "release-v4.17.0": [{"id": "release-v4___17___0", "data": {"title": "Lean 4.17.0 (2025-03-03)", "shortTitle": null, "sectionNum": null, "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Release Notes", "shortTitle": null, "number": null}, {"title": "Lean 4.17.0 (2025-03-03)", "shortTitle": null, "number": "11"}]}, "address": "/releases/v4.17.0/"}], "release-v4.16.0": [{"id": "release-v4___16___0", "data": {"title": "Lean 4.16.0 (2025-02-03)", "shortTitle": null, "sectionNum": null, "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Release Notes", "shortTitle": null, "number": null}, {"title": "Lean 4.16.0 (2025-02-03)", "shortTitle": null, "number": "12"}]}, "address": "/releases/v4.16.0/"}], "release-v4.15.0": [{"id": "release-v4___15___0", "data": {"title": "Lean 4.15.0 (2025-01-04)", "shortTitle": null, "sectionNum": null, "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Release Notes", "shortTitle": null, "number": null}, {"title": "Lean 4.15.0 (2025-01-04)", "shortTitle": null, "number": "13"}]}, "address": "/releases/v4.15.0/"}], "release-v4.14.0": [{"id": "release-v4___14___0", "data": {"title": "Lean 4.14.0 (2024-12-02)", "shortTitle": null, "sectionNum": null, "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Release Notes", "shortTitle": null, "number": null}, {"title": "Lean 4.14.0 (2024-12-02)", "shortTitle": null, "number": "14"}]}, "address": "/releases/v4.14.0/"}], "release-v4.13.0": [{"id": "release-v4___13___0", "data": {"title": "Lean 4.13.0 (2024-11-01)", "shortTitle": null, "sectionNum": null, "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Release Notes", "shortTitle": null, "number": null}, {"title": "Lean 4.13.0 (2024-11-01)", "shortTitle": null, "number": "15"}]}, "address": "/releases/v4.13.0/"}], "release-v4.12.0": [{"id": "release-v4___12___0", "data": {"title": "Lean 4.12.0 (2024-10-01)", "shortTitle": null, "sectionNum": null, "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Release Notes", "shortTitle": null, "number": null}, {"title": "Lean 4.12.0 (2024-10-01)", "shortTitle": null, "number": "16"}]}, "address": "/releases/v4.12.0/"}], "release-v4.11.0": [{"id": "release-v4___11___0", "data": {"title": "Lean 4.11.0 (2024-09-02)", "shortTitle": null, "sectionNum": null, "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Release Notes", "shortTitle": null, "number": null}, {"title": "Lean 4.11.0 (2024-09-02)", "shortTitle": null, "number": "17"}]}, "address": "/releases/v4.11.0/"}], "release-v4.10.0": [{"id": "release-v4___10___0", "data": {"title": "Lean 4.10.0 (2024-07-31)", "shortTitle": null, "sectionNum": null, "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Release Notes", "shortTitle": null, "number": null}, {"title": "Lean 4.10.0 (2024-07-31)", "shortTitle": null, "number": "18"}]}, "address": "/releases/v4.10.0/"}], "release-v4.1.0": [{"id": "release-v4___1___0", "data": {"title": "Lean 4.1.0 (2023-09-26)", "shortTitle": null, "sectionNum": null, "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Release Notes", "shortTitle": null, "number": null}, {"title": "Lean 4.1.0 (2023-09-26)", "shortTitle": null, "number": "27"}]}, "address": "/releases/v4.1.0/"}], "release-v4.0.0-m5": [{"id": "release-v4___0___0-m5", "data": {"title": "Lean 4.0.0-m5 (2022-08-22)", "shortTitle": null, "sectionNum": null, "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Release Notes", "shortTitle": null, "number": null}, {"title": "Lean 4.0.0-m5 (2022-08-22)", "shortTitle": null, "number": "29"}]}, "address": "/releases/v4.0.0-m5/"}], "release-v4.0.0-m4": [{"id": "release-v4___0___0-m4", "data": {"title": "Lean 4.0.0-m4 (2022-03-27)", "shortTitle": null, "sectionNum": null, "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Release Notes", "shortTitle": null, "number": null}, {"title": "Lean 4.0.0-m4 (2022-03-27)", "shortTitle": null, "number": "30"}]}, "address": "/releases/v4.0.0-m4/"}], "release-v4.0.0-m3": [{"id": "release-v4___0___0-m3", "data": {"title": "Lean 4.0.0-m3 (2022-01-31)", "shortTitle": null, "sectionNum": null, "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Release Notes", "shortTitle": null, "number": null}, {"title": "Lean 4.0.0-m3 (2022-01-31)", "shortTitle": null, "number": "31"}]}, "address": "/releases/v4.0.0-m3/"}], "release-v4.0.0-m2": [{"id": "release-v4___0___0-m2", "data": {"title": "Lean 4.0.0-m2 (2021-03-02)", "shortTitle": null, "sectionNum": null, "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Release Notes", "shortTitle": null, "number": null}, {"title": "Lean 4.0.0-m2 (2021-03-02)", "shortTitle": null, "number": "32"}]}, "address": "/releases/v4.0.0-m2/"}], "release-v4.0.0-m1": [{"id": "release-v4___0___0-m1", "data": {"title": "Lean 4.0.0-m1 (2021-01-04)", "shortTitle": null, "sectionNum": null, "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Release Notes", "shortTitle": null, "number": null}, {"title": "Lean 4.0.0-m1 (2021-01-04)", "shortTitle": null, "number": "33"}]}, "address": "/releases/v4.0.0-m1/"}], "release-v4.0.0": [{"id": "release-v4___0___0", "data": {"title": "Lean 4.0.0 (2023-09-08)", "shortTitle": null, "sectionNum": null, "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Release Notes", "shortTitle": null, "number": null}, {"title": "Lean 4.0.0 (2023-09-08)", "shortTitle": null, "number": "28"}]}, "address": "/releases/v4.0.0/"}], "release-notes": [{"id": "release-notes", "data": {"title": "Release Notes", "shortTitle": null, "sectionNum": null, "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Release Notes", "shortTitle": null, "number": null}]}, "address": "/releases/"}], "reference-counting": [{"id": "reference-counting", "data": {"title": "Reference Counting", "shortTitle": null, "sectionNum": "23.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Run-Time Code", "shortTitle": null, "number": "23"}, {"title": "Reference Counting", "shortTitle": null, "number": "2"}]}, "address": "/Run-Time-Code/Reference-Counting/"}], "reference-boxes": [{"id": "reference-boxes", "data": {"title": "Constant, Syntax, and Tactic References", "shortTitle": null, "sectionNum": "1.2.4.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Introduction", "shortTitle": null, "number": "1"}, {"title": "Typographical Conventions", "shortTitle": null, "number": "2"}, {"title": "Constant, Syntax, and Tactic References", "shortTitle": null, "number": "4"}]}, "address": "/Introduction/"}], "ref-locks": [{"id": "ref-locks", "data": {"title": "Concurrency", "shortTitle": null, "sectionNum": "15.4.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "IO", "shortTitle": null, "number": "15"}, {"title": "Mutable References", "shortTitle": null, "number": "4"}, {"title": "Concurrency", "shortTitle": null, "number": "2"}]}, "address": "/IO/Mutable-References/"}], "reducibility": [{"id": "reducibility", "data": {"title": "Controlling Reduction", "shortTitle": null, "sectionNum": "7.6.6.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Definitions", "shortTitle": null, "number": "7"}, {"title": "Recursive Definitions", "shortTitle": null, "number": "6"}, {"title": "Controlling Reduction", "shortTitle": null, "number": "6"}]}, "address": "/Definitions/Recursive-Definitions/"}], "recursors": [{"id": "recursors", "data": {"title": "Recursors", "shortTitle": null, "sectionNum": "4.4.3.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "The Type System", "shortTitle": null, "number": "4"}, {"title": "Inductive Types", "shortTitle": null, "number": "4"}, {"title": "Logical Model", "shortTitle": null, "number": "3"}, {"title": "Recursors", "shortTitle": null, "number": "1"}]}, "address": "/The-Type-System/Inductive-Types/"}], "recursor-types": [{"id": "recursor-types", "data": {"title": "Recursor Types", "shortTitle": null, "sectionNum": "4.4.3.1.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "The Type System", "shortTitle": null, "number": "4"}, {"title": "Inductive Types", "shortTitle": null, "number": "4"}, {"title": "Logical Model", "shortTitle": null, "number": "3"}, {"title": "Recursors", "shortTitle": null, "number": "1"}, {"title": "Recursor Types", "shortTitle": null, "number": "1"}]}, "address": "/The-Type-System/Inductive-Types/"}], "recursor-elaboration-helpers": [{"id": "recursor-elaboration-helpers", "data": {"title": "Constructions for Termination Checking", "shortTitle": null, "sectionNum": "4.4.3.3.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "The Type System", "shortTitle": null, "number": "4"}, {"title": "Inductive Types", "shortTitle": null, "number": "4"}, {"title": "Logical Model", "shortTitle": null, "number": "3"}, {"title": "Constructions for Termination Checking", "shortTitle": null, "number": "3"}]}, "address": "/The-Type-System/Inductive-Types/"}], "recursive-instances": [{"id": "recursive-instances", "data": {"title": "Recursive Instances", "shortTitle": null, "sectionNum": "11.2.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Type Classes", "shortTitle": null, "number": "11"}, {"title": "Instance Declarations", "shortTitle": null, "number": "2"}, {"title": "Recursive Instances", "shortTitle": null, "number": "1"}]}, "address": "/Type-Classes/Instance-Declarations/"}], "recursive-definitions": [{"id": "recursive-definitions", "data": {"title": "Recursive Definitions", "shortTitle": null, "sectionNum": "7.6.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Definitions", "shortTitle": null, "number": "7"}, {"title": "Recursive Definitions", "shortTitle": null, "number": "6"}]}, "address": "/Definitions/Recursive-Definitions/"}], "reader-monad": [{"id": "reader-monad", "data": {"title": "Reader", "shortTitle": null, "sectionNum": "14.5.5.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Functors, Monads and do -Notation", "shortTitle": null, "number": "14"}, {"title": "Varieties of Monads", "shortTitle": null, "number": "5"}, {"title": "Reader", "shortTitle": null, "number": "5"}]}, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "raw-string-literals": [{"id": "raw-string-literals", "data": {"title": "Raw String Literals", "shortTitle": null, "sectionNum": "20.8.3.3.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Strings", "shortTitle": null, "number": "8"}, {"title": "Syntax", "shortTitle": null, "number": "3"}, {"title": "Raw String Literals", "shortTitle": null, "number": "3"}]}, "address": "/Basic-Types/Strings/"}], "raw-data": [{"id": "raw-data", "data": {"title": "Raw Data and Invariants", "shortTitle": null, "sectionNum": "20.19.1.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Maps and Sets", "shortTitle": null, "number": "19"}, {"title": "Library Design", "shortTitle": null, "number": "1"}, {"title": "Raw Data and Invariants", "shortTitle": null, "number": "2"}]}, "address": "/Basic-Types/Maps-and-Sets/"}], "ranges": [{"id": "ranges", "data": {"title": "Ranges", "shortTitle": null, "sectionNum": "20.18.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Ranges", "shortTitle": null, "number": "18"}]}, "address": "/Basic-Types/Ranges/"}], "quotients-nested-inductives": [{"id": "quotients-nested-inductives", "data": {"title": "Quotients and Inductive Types", "shortTitle": null, "sectionNum": "4.5.5.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "The Type System", "shortTitle": null, "number": "4"}, {"title": "Quotients", "shortTitle": null, "number": "5"}, {"title": "Logical Model", "shortTitle": null, "number": "5"}, {"title": "Quotients and Inductive Types", "shortTitle": null, "number": "2"}]}, "address": "/The-Type-System/Quotients/"}], "quotients": [{"id": "quotients", "data": {"title": "Quotients", "shortTitle": null, "sectionNum": "4.5.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "The Type System", "shortTitle": null, "number": "4"}, {"title": "Quotients", "shortTitle": null, "number": "5"}]}, "address": "/The-Type-System/Quotients/"}], "quotient-reduction": [{"id": "quotient-reduction", "data": {"title": "Quotient Reduction", "shortTitle": null, "sectionNum": "4.5.5.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "The Type System", "shortTitle": null, "number": "4"}, {"title": "Quotients", "shortTitle": null, "number": "5"}, {"title": "Logical Model", "shortTitle": null, "number": "5"}, {"title": "Quotient Reduction", "shortTitle": null, "number": "1"}]}, "address": "/The-Type-System/Quotients/"}], "quotient-proofs": [{"id": "quotient-proofs", "data": {"title": "Proofs About Quotients", "shortTitle": null, "sectionNum": "4.5.4.3.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "The Type System", "shortTitle": null, "number": "4"}, {"title": "Quotients", "shortTitle": null, "number": "5"}, {"title": "Quotient API", "shortTitle": null, "number": "4"}, {"title": "Proofs About Quotients", "shortTitle": null, "number": "3"}]}, "address": "/The-Type-System/Quotients/"}], "quotient-model": [{"id": "quotient-model", "data": {"title": "Logical Model", "shortTitle": null, "sectionNum": "4.5.5.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "The Type System", "shortTitle": null, "number": "4"}, {"title": "Quotients", "shortTitle": null, "number": "5"}, {"title": "Logical Model", "shortTitle": null, "number": "5"}]}, "address": "/The-Type-System/Quotients/"}], "quotient-intro": [{"id": "quotient-intro", "data": {"title": "Introducing Quotients", "shortTitle": null, "sectionNum": "4.5.4.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "The Type System", "shortTitle": null, "number": "4"}, {"title": "Quotients", "shortTitle": null, "number": "5"}, {"title": "Quotient API", "shortTitle": null, "number": "4"}, {"title": "Introducing Quotients", "shortTitle": null, "number": "1"}]}, "address": "/The-Type-System/Quotients/"}], "quotient-funext": [{"id": "quotient-funext", "data": {"title": "Quotients and Function Extensionality", "shortTitle": null, "sectionNum": "4.5.6.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "The Type System", "shortTitle": null, "number": "4"}, {"title": "Quotients", "shortTitle": null, "number": "5"}, {"title": "Quotients and Function Extensionality", "shortTitle": null, "number": "6"}]}, "address": "/The-Type-System/Quotients/"}], "quotient-elim": [{"id": "quotient-elim", "data": {"title": "Eliminating Quotients", "shortTitle": null, "sectionNum": "4.5.4.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "The Type System", "shortTitle": null, "number": "4"}, {"title": "Quotients", "shortTitle": null, "number": "5"}, {"title": "Quotient API", "shortTitle": null, "number": "4"}, {"title": "Eliminating Quotients", "shortTitle": null, "number": "2"}]}, "address": "/The-Type-System/Quotients/"}], "quotient-api": [{"id": "quotient-api", "data": {"title": "Quotient API", "shortTitle": null, "sectionNum": "4.5.4.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "The Type System", "shortTitle": null, "number": "4"}, {"title": "Quotients", "shortTitle": null, "number": "5"}, {"title": "Quotient API", "shortTitle": null, "number": "4"}]}, "address": "/The-Type-System/Quotients/"}], "quotient-alternatives": [{"id": "quotient-alternatives", "data": {"title": "Alternatives to Quotient Types", "shortTitle": null, "sectionNum": "4.5.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "The Type System", "shortTitle": null, "number": "4"}, {"title": "Quotients", "shortTitle": null, "number": "5"}, {"title": "Alternatives to Quotient Types", "shortTitle": null, "number": "1"}]}, "address": "/The-Type-System/Quotients/"}], "quote-patterns": [{"id": "quote-patterns", "data": {"title": "Matching Syntax", "shortTitle": null, "sectionNum": "22.5.4.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Notations and Macros", "shortTitle": null, "number": "22"}, {"title": "Macros", "shortTitle": null, "number": "5"}, {"title": "Matching Syntax", "shortTitle": null, "number": "4"}]}, "address": "/Notations-and-Macros/Macros/"}], "quotation": [{"id": "quotation", "data": {"title": "Quotation", "shortTitle": null, "sectionNum": "22.5.3.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Notations and Macros", "shortTitle": null, "number": "22"}, {"title": "Macros", "shortTitle": null, "number": "5"}, {"title": "Quotation", "shortTitle": null, "number": "3"}]}, "address": "/Notations-and-Macros/Macros/"}], "quasiquotation": [{"id": "quasiquotation", "data": {"title": "Quasiquotation", "shortTitle": null, "sectionNum": "22.5.3.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Notations and Macros", "shortTitle": null, "number": "22"}, {"title": "Macros", "shortTitle": null, "number": "5"}, {"title": "Quotation", "shortTitle": null, "number": "3"}, {"title": "Quasiquotation", "shortTitle": null, "number": "1"}]}, "address": "/Notations-and-Macros/Macros/"}], "propositions": [{"id": "propositions", "data": {"title": "Propositions", "shortTitle": null, "sectionNum": "4.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "The Type System", "shortTitle": null, "number": "4"}, {"title": "Propositions", "shortTitle": null, "number": "2"}]}, "address": "/The-Type-System/Propositions/"}], "propositional-equality": [{"id": "propositional-equality", "data": {"title": "Propositional Equality", "shortTitle": null, "sectionNum": "19.4.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Propositions", "shortTitle": null, "number": "19"}, {"title": "Propositional Equality", "shortTitle": null, "number": "4"}]}, "address": "/Basic-Propositions/Propositional-Equality/"}], "prop-vs-type": [{"id": "prop-vs-type", "data": {"title": "Prop vs Type", "shortTitle": null, "sectionNum": "4.4.3.2.3.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "The Type System", "shortTitle": null, "number": "4"}, {"title": "Inductive Types", "shortTitle": null, "number": "4"}, {"title": "Logical Model", "shortTitle": null, "number": "3"}, {"title": "Well-Formedness Requirements", "shortTitle": null, "number": "2"}, {"title": "Prop vs Type", "shortTitle": null, "number": "3"}]}, "address": "/The-Type-System/Inductive-Types/"}], "proof-states": [{"id": "proof-states", "data": {"title": "Reading Proof States", "shortTitle": null, "sectionNum": "13.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Tactic Proofs", "shortTitle": null, "number": "13"}, {"title": "Reading Proof States", "shortTitle": null, "number": "2"}]}, "address": "/Tactic-Proofs/Reading-Proof-States/"}], "prod-api": [{"id": "prod-api", "data": {"title": "API Reference", "shortTitle": null, "sectionNum": "20.13.1.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Tuples", "shortTitle": null, "number": "13"}, {"title": "Ordered Pairs", "shortTitle": null, "number": "1"}, {"title": "API Reference", "shortTitle": null, "number": "1"}]}, "address": "/Basic-Types/Tuples/"}], "print-axioms": [{"id": "print-axioms", "data": {"title": "Displaying Axiom Dependencies", "shortTitle": null, "sectionNum": "8.5.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Axioms", "shortTitle": null, "number": "8"}, {"title": "Displaying Axiom Dependencies", "shortTitle": null, "number": "5"}]}, "address": "/Axioms/"}], "precedence": [{"id": "precedence", "data": {"title": "Precedence", "shortTitle": null, "sectionNum": "22.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Notations and Macros", "shortTitle": null, "number": "22"}, {"title": "Precedence", "shortTitle": null, "number": "2"}]}, "address": "/Notations-and-Macros/Precedence/"}], "platforms": [{"id": "platforms", "data": {"title": "Supported Platforms", "shortTitle": null, "sectionNum": null, "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Supported Platforms", "shortTitle": null, "number": null}]}, "address": "/platforms/"}], "platform-info": [{"id": "platform-info", "data": {"title": "System and Platform Information", "shortTitle": null, "sectionNum": "15.6.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "IO", "shortTitle": null, "number": "15"}, {"title": "System and Platform Information", "shortTitle": null, "number": "6"}]}, "address": "/IO/System-and-Platform-Information/"}], "peano-axioms": [{"id": "peano-axioms", "data": {"title": "Peano Axioms", "shortTitle": null, "sectionNum": "20.1.1.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Natural Numbers", "shortTitle": null, "number": "1"}, {"title": "Logical Model", "shortTitle": null, "number": "1"}, {"title": "Peano Axioms", "shortTitle": null, "number": "1"}]}, "address": "/Basic-Types/Natural-Numbers/"}], "pattern-matching": [{"id": "pattern-matching", "data": {"title": "Pattern Matching", "shortTitle": null, "sectionNum": "10.8.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Terms", "shortTitle": null, "number": "10"}, {"title": "Pattern Matching", "shortTitle": null, "number": "8"}]}, "address": "/Terms/Pattern-Matching/"}], "pattern-fun": [{"id": "pattern-fun", "data": {"title": "Pattern Matching Functions", "shortTitle": null, "sectionNum": "10.8.3.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Terms", "shortTitle": null, "number": "10"}, {"title": "Pattern Matching", "shortTitle": null, "number": "8"}, {"title": "Pattern Matching Functions", "shortTitle": null, "number": "3"}]}, "address": "/Terms/Pattern-Matching/"}], "partial-unsafe": [{"id": "partial-unsafe", "data": {"title": "Partial and Unsafe Definitions", "shortTitle": null, "sectionNum": "7.6.5.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Definitions", "shortTitle": null, "number": "7"}, {"title": "Recursive Definitions", "shortTitle": null, "number": "6"}, {"title": "Partial and Unsafe Definitions", "shortTitle": null, "number": "5"}]}, "address": "/Definitions/Recursive-Definitions/"}], "partial-functions": [{"id": "partial-functions", "data": {"title": "Partial Functions", "shortTitle": null, "sectionNum": "7.6.5.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Definitions", "shortTitle": null, "number": "7"}, {"title": "Recursive Definitions", "shortTitle": null, "number": "6"}, {"title": "Partial and Unsafe Definitions", "shortTitle": null, "number": "5"}, {"title": "Partial Functions", "shortTitle": null, "number": "1"}]}, "address": "/Definitions/Recursive-Definitions/"}], "partial-fixpoint-theory": [{"id": "partial-fixpoint-theory", "data": {"title": "Theory and Construction", "shortTitle": null, "sectionNum": "7.6.4.5.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Definitions", "shortTitle": null, "number": "7"}, {"title": "Recursive Definitions", "shortTitle": null, "number": "6"}, {"title": "Partial Fixpoint Recursion", "shortTitle": null, "number": "4"}, {"title": "Theory and Construction", "shortTitle": null, "number": "5"}]}, "address": "/Definitions/Recursive-Definitions/"}], "partial-fixpoint-tailrec": [{"id": "partial-fixpoint-tailrec", "data": {"title": "Tail-Recursive Functions", "shortTitle": null, "sectionNum": "7.6.4.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Definitions", "shortTitle": null, "number": "7"}, {"title": "Recursive Definitions", "shortTitle": null, "number": "6"}, {"title": "Partial Fixpoint Recursion", "shortTitle": null, "number": "4"}, {"title": "Tail-Recursive Functions", "shortTitle": null, "number": "1"}]}, "address": "/Definitions/Recursive-Definitions/"}], "partial-fixpoint-monadic": [{"id": "partial-fixpoint-monadic", "data": {"title": "Monadic functions", "shortTitle": null, "sectionNum": "7.6.4.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Definitions", "shortTitle": null, "number": "7"}, {"title": "Recursive Definitions", "shortTitle": null, "number": "6"}, {"title": "Partial Fixpoint Recursion", "shortTitle": null, "number": "4"}, {"title": "Monadic functions", "shortTitle": null, "number": "2"}]}, "address": "/Definitions/Recursive-Definitions/"}], "partial-fixpoint": [{"id": "partial-fixpoint", "data": {"title": "Partial Fixpoint Recursion", "shortTitle": null, "sectionNum": "7.6.4.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Definitions", "shortTitle": null, "number": "7"}, {"title": "Recursive Definitions", "shortTitle": null, "number": "6"}, {"title": "Partial Fixpoint Recursion", "shortTitle": null, "number": "4"}]}, "address": "/Definitions/Recursive-Definitions/"}], "partial-correctness-theorem": [{"id": "partial-correctness-theorem", "data": {"title": "Partial Correctness Theorems", "shortTitle": null, "sectionNum": "7.6.4.3.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Definitions", "shortTitle": null, "number": "7"}, {"title": "Recursive Definitions", "shortTitle": null, "number": "6"}, {"title": "Partial Fixpoint Recursion", "shortTitle": null, "number": "4"}, {"title": "Partial Correctness Theorems", "shortTitle": null, "number": "3"}]}, "address": "/Definitions/Recursive-Definitions/"}], "parser": [{"id": "parser", "data": {"title": "Parsing", "shortTitle": null, "sectionNum": "2.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Elaboration and Compilation", "shortTitle": null, "number": "2"}, {"title": "Parsing", "shortTitle": null, "number": "1"}]}, "address": "/Elaboration-and-Compilation/"}], "parameter-syntax": [{"id": "parameter-syntax", "data": {"title": "Parameters and Types", "shortTitle": null, "sectionNum": "7.2.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Definitions", "shortTitle": null, "number": "7"}, {"title": "Headers and Signatures", "shortTitle": null, "number": "2"}, {"title": "Parameters and Types", "shortTitle": null, "number": "2"}]}, "address": "/Definitions/Headers-and-Signatures/"}], "pairs": [{"id": "pairs", "data": {"title": "Ordered Pairs", "shortTitle": null, "sectionNum": "20.13.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Tuples", "shortTitle": null, "number": "13"}, {"title": "Ordered Pairs", "shortTitle": null, "number": "1"}]}, "address": "/Basic-Types/Tuples/"}], "ordinary-coercion": [{"id": "ordinary-coercion", "data": {"title": "Coercing Between Types", "shortTitle": null, "sectionNum": "12.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Coercions", "shortTitle": null, "number": "12"}, {"title": "Coercing Between Types", "shortTitle": null, "number": "2"}]}, "address": "/Coercions/Coercing-Between-Types/"}], "option-monad": [{"id": "option-monad", "data": {"title": "Option", "shortTitle": null, "sectionNum": "14.5.6.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Functors, Monads and do -Notation", "shortTitle": null, "number": "14"}, {"title": "Varieties of Monads", "shortTitle": null, "number": "5"}, {"title": "Option", "shortTitle": null, "number": "6"}]}, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "option": [{"id": "option", "data": {"title": "Optional Values", "shortTitle": null, "sectionNum": "20.12.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Optional Values", "shortTitle": null, "number": "12"}]}, "address": "/Basic-Types/Optional-Values/"}], "operators-and-notations": [{"id": "operators-and-notations", "data": {"title": "Operators and Notations", "shortTitle": null, "sectionNum": "22.3.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Notations and Macros", "shortTitle": null, "number": "22"}, {"title": "Notations", "shortTitle": null, "number": "3"}, {"title": "Operators and Notations", "shortTitle": null, "number": "1"}]}, "address": "/Notations-and-Macros/Notations/"}], "operators": [{"id": "operators", "data": {"title": "Custom Operators", "shortTitle": null, "sectionNum": "22.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Notations and Macros", "shortTitle": null, "number": "22"}, {"title": "Custom Operators", "shortTitle": null, "number": "1"}]}, "address": "/Notations-and-Macros/Custom-Operators/"}], "notations": [{"id": "notations", "data": {"title": "Notations", "shortTitle": null, "sectionNum": "22.3.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Notations and Macros", "shortTitle": null, "number": "22"}, {"title": "Notations", "shortTitle": null, "number": "3"}]}, "address": "/Notations-and-Macros/Notations/"}], "nested-inductive-types": [{"id": "nested-inductive-types", "data": {"title": "Nested Inductive Types", "shortTitle": null, "sectionNum": "4.4.5.4.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "The Type System", "shortTitle": null, "number": "4"}, {"title": "Inductive Types", "shortTitle": null, "number": "4"}, {"title": "Mutual Inductive Types", "shortTitle": null, "number": "5"}, {"title": "Nested Inductive Types", "shortTitle": null, "number": "4"}]}, "address": "/The-Type-System/Inductive-Types/"}], "nat-syntax": [{"id": "nat-syntax", "data": {"title": "Syntax", "shortTitle": null, "sectionNum": "20.1.3.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Natural Numbers", "shortTitle": null, "number": "1"}, {"title": "Syntax", "shortTitle": null, "number": "3"}]}, "address": "/Basic-Types/Natural-Numbers/"}], "nat-runtime": [{"id": "nat-runtime", "data": {"title": "Run-Time Representation", "shortTitle": null, "sectionNum": "20.1.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Natural Numbers", "shortTitle": null, "number": "1"}, {"title": "Run-Time Representation", "shortTitle": null, "number": "2"}]}, "address": "/Basic-Types/Natural-Numbers/"}], "nat-performance": [{"id": "nat-performance", "data": {"title": "Performance Notes", "shortTitle": null, "sectionNum": "20.1.2.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Natural Numbers", "shortTitle": null, "number": "1"}, {"title": "Run-Time Representation", "shortTitle": null, "number": "2"}, {"title": "Performance Notes", "shortTitle": null, "number": "1"}]}, "address": "/Basic-Types/Natural-Numbers/"}], "nat-model": [{"id": "nat-model", "data": {"title": "Logical Model", "shortTitle": null, "sectionNum": "20.1.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Natural Numbers", "shortTitle": null, "number": "1"}, {"title": "Logical Model", "shortTitle": null, "number": "1"}]}, "address": "/Basic-Types/Natural-Numbers/"}], "nat-literals": [{"id": "nat-literals", "data": {"title": "Natural Numbers", "shortTitle": null, "sectionNum": "10.5.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Terms", "shortTitle": null, "number": "10"}, {"title": "Numeric Literals", "shortTitle": null, "number": "5"}, {"title": "Natural Numbers", "shortTitle": null, "number": "1"}]}, "address": "/Terms/Numeric-Literals/"}], "nat-api-predicates": [{"id": "nat-api-predicates", "data": {"title": "Predicates", "shortTitle": null, "sectionNum": "20.1.4.5.3.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Natural Numbers", "shortTitle": null, "number": "1"}, {"title": "API Reference", "shortTitle": null, "number": "4"}, {"title": "Comparisons", "shortTitle": null, "number": "5"}, {"title": "Predicates", "shortTitle": null, "number": "3"}]}, "address": "/Basic-Types/Natural-Numbers/"}], "nat-api-pow2": [{"id": "nat-api-pow2", "data": {"title": "Powers of Two", "shortTitle": null, "sectionNum": "20.1.4.4.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Natural Numbers", "shortTitle": null, "number": "1"}, {"title": "API Reference", "shortTitle": null, "number": "4"}, {"title": "Powers of Two", "shortTitle": null, "number": "4"}]}, "address": "/Basic-Types/Natural-Numbers/"}], "nat-api-minmax": [{"id": "nat-api-minmax", "data": {"title": "Minimum and Maximum", "shortTitle": null, "sectionNum": "20.1.4.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Natural Numbers", "shortTitle": null, "number": "1"}, {"title": "API Reference", "shortTitle": null, "number": "4"}, {"title": "Minimum and Maximum", "shortTitle": null, "number": "2"}]}, "address": "/Basic-Types/Natural-Numbers/"}], "nat-api-iteration": [{"id": "nat-api-iteration", "data": {"title": "Iteration", "shortTitle": null, "sectionNum": "20.1.4.6.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Natural Numbers", "shortTitle": null, "number": "1"}, {"title": "API Reference", "shortTitle": null, "number": "4"}, {"title": "Iteration", "shortTitle": null, "number": "6"}]}, "address": "/Basic-Types/Natural-Numbers/"}], "nat-api-induction": [{"id": "nat-api-induction", "data": {"title": "Alternative Induction Principles", "shortTitle": null, "sectionNum": "20.1.4.8.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Natural Numbers", "shortTitle": null, "number": "1"}, {"title": "API Reference", "shortTitle": null, "number": "4"}, {"title": "Elimination", "shortTitle": null, "number": "8"}, {"title": "Alternative Induction Principles", "shortTitle": null, "number": "1"}]}, "address": "/Basic-Types/Natural-Numbers/"}], "nat-api-gcd-lcm": [{"id": "nat-api-gcd-lcm", "data": {"title": "GCD and LCM", "shortTitle": null, "sectionNum": "20.1.4.3.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Natural Numbers", "shortTitle": null, "number": "1"}, {"title": "API Reference", "shortTitle": null, "number": "4"}, {"title": "GCD and LCM", "shortTitle": null, "number": "3"}]}, "address": "/Basic-Types/Natural-Numbers/"}], "nat-api-elim": [{"id": "nat-api-elim", "data": {"title": "Elimination", "shortTitle": null, "sectionNum": "20.1.4.8.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Natural Numbers", "shortTitle": null, "number": "1"}, {"title": "API Reference", "shortTitle": null, "number": "4"}, {"title": "Elimination", "shortTitle": null, "number": "8"}]}, "address": "/Basic-Types/Natural-Numbers/"}], "nat-api-deceq": [{"id": "nat-api-deceq", "data": {"title": "Decidable Equality", "shortTitle": null, "sectionNum": "20.1.4.5.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Natural Numbers", "shortTitle": null, "number": "1"}, {"title": "API Reference", "shortTitle": null, "number": "4"}, {"title": "Comparisons", "shortTitle": null, "number": "5"}, {"title": "Decidable Equality", "shortTitle": null, "number": "2"}]}, "address": "/Basic-Types/Natural-Numbers/"}], "nat-api-conversion": [{"id": "nat-api-conversion", "data": {"title": "Conversion", "shortTitle": null, "sectionNum": "20.1.4.7.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Natural Numbers", "shortTitle": null, "number": "1"}, {"title": "API Reference", "shortTitle": null, "number": "4"}, {"title": "Conversion", "shortTitle": null, "number": "7"}]}, "address": "/Basic-Types/Natural-Numbers/"}], "nat-api-comparison-bool": [{"id": "nat-api-comparison-bool", "data": {"title": "Boolean Comparisons", "shortTitle": null, "sectionNum": "20.1.4.5.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Natural Numbers", "shortTitle": null, "number": "1"}, {"title": "API Reference", "shortTitle": null, "number": "4"}, {"title": "Comparisons", "shortTitle": null, "number": "5"}, {"title": "Boolean Comparisons", "shortTitle": null, "number": "1"}]}, "address": "/Basic-Types/Natural-Numbers/"}], "nat-api-comparison": [{"id": "nat-api-comparison", "data": {"title": "Comparisons", "shortTitle": null, "sectionNum": "20.1.4.5.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Natural Numbers", "shortTitle": null, "number": "1"}, {"title": "API Reference", "shortTitle": null, "number": "4"}, {"title": "Comparisons", "shortTitle": null, "number": "5"}]}, "address": "/Basic-Types/Natural-Numbers/"}], "nat-api-cast": [{"id": "nat-api-cast", "data": {"title": "Coercions from Natural Numbers and Integers", "shortTitle": null, "sectionNum": "12.2.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Coercions", "shortTitle": null, "number": "12"}, {"title": "Coercing Between Types", "shortTitle": null, "number": "2"}, {"title": "Coercions from Natural Numbers and Integers", "shortTitle": null, "number": "2"}]}, "address": "/Coercions/Coercing-Between-Types/"}], "nat-api-bitwise": [{"id": "nat-api-bitwise", "data": {"title": "Bitwise Operations", "shortTitle": null, "sectionNum": "20.1.4.1.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Natural Numbers", "shortTitle": null, "number": "1"}, {"title": "API Reference", "shortTitle": null, "number": "4"}, {"title": "Arithmetic", "shortTitle": null, "number": "1"}, {"title": "Bitwise Operations", "shortTitle": null, "number": "1"}]}, "address": "/Basic-Types/Natural-Numbers/"}], "nat-api-arithmetic": [{"id": "nat-api-arithmetic", "data": {"title": "Arithmetic", "shortTitle": null, "sectionNum": "20.1.4.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Natural Numbers", "shortTitle": null, "number": "1"}, {"title": "API Reference", "shortTitle": null, "number": "4"}, {"title": "Arithmetic", "shortTitle": null, "number": "1"}]}, "address": "/Basic-Types/Natural-Numbers/"}], "nat-api": [{"id": "nat-api", "data": {"title": "API Reference", "shortTitle": null, "sectionNum": "20.1.4.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Natural Numbers", "shortTitle": null, "number": "1"}, {"title": "API Reference", "shortTitle": null, "number": "4"}]}, "address": "/Basic-Types/Natural-Numbers/"}], "namespaces-sections": [{"id": "namespaces-sections", "data": {"title": "Namespaces and Sections", "shortTitle": null, "sectionNum": "6.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Namespaces and Sections", "shortTitle": null, "number": "6"}]}, "address": "/Namespaces-and-Sections/"}], "namespaces": [{"id": "namespaces", "data": {"title": "Namespaces", "shortTitle": null, "sectionNum": "6.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Namespaces and Sections", "shortTitle": null, "number": "6"}, {"title": "Namespaces", "shortTitle": null, "number": "1"}]}, "address": "/Namespaces-and-Sections/"}], "mvcgen-tactic-tutorial": [{"id": "mvcgen-tactic-tutorial", "data": {"title": "Tutorial: Verifying Imperative Programs Using mvcgen", "shortTitle": null, "sectionNum": "18.6.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "The mvcgen tactic", "shortTitle": null, "number": "18"}, {"title": "Tutorial: Verifying Imperative Programs Using mvcgen", "shortTitle": null, "number": "6"}]}, "address": "/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/"}], "mvcgen-tactic": [{"id": "mvcgen-tactic", "data": {"title": "The mvcgen tactic", "shortTitle": null, "sectionNum": "18.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "The mvcgen tactic", "shortTitle": null, "number": "18"}]}, "address": "/The--mvcgen--tactic/"}], "mvcgen-proof-mode": [{"id": "mvcgen-proof-mode", "data": {"title": "Proof Mode", "shortTitle": null, "sectionNum": "18.5.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "The mvcgen tactic", "shortTitle": null, "number": "18"}, {"title": "Proof Mode", "shortTitle": null, "number": "5"}]}, "address": "/The--mvcgen--tactic/Proof-Mode/"}], "mvcgen-adequacy": [{"id": "mvcgen-adequacy", "data": {"title": "Adequacy Lemmas", "shortTitle": null, "sectionNum": "18.2.3.3.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "The mvcgen tactic", "shortTitle": null, "number": "18"}, {"title": "Predicate Transformers", "shortTitle": null, "number": "2"}, {"title": "Predicate Transformers", "shortTitle": null, "number": "3"}, {"title": "Adequacy Lemmas", "shortTitle": null, "number": "3"}]}, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "mutual-well-founded-recursion": [{"id": "mutual-well-founded-recursion", "data": {"title": "Mutual Well-Founded Recursion", "shortTitle": null, "sectionNum": "7.6.3.5.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Definitions", "shortTitle": null, "number": "7"}, {"title": "Recursive Definitions", "shortTitle": null, "number": "6"}, {"title": "Well-Founded Recursion", "shortTitle": null, "number": "3"}, {"title": "Mutual Well-Founded Recursion", "shortTitle": null, "number": "5"}]}, "address": "/Definitions/Recursive-Definitions/"}], "mutual-syntax": [{"id": "mutual-syntax", "data": {"title": "Mutual Recursion", "shortTitle": null, "sectionNum": "7.6.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Definitions", "shortTitle": null, "number": "7"}, {"title": "Recursive Definitions", "shortTitle": null, "number": "6"}, {"title": "Mutual Recursion", "shortTitle": null, "number": "1"}]}, "address": "/Definitions/Recursive-Definitions/"}], "mutual-structural-recursion": [{"id": "mutual-structural-recursion", "data": {"title": "Mutual Structural Recursion", "shortTitle": null, "sectionNum": "7.6.2.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Definitions", "shortTitle": null, "number": "7"}, {"title": "Recursive Definitions", "shortTitle": null, "number": "6"}, {"title": "Structural Recursion", "shortTitle": null, "number": "2"}, {"title": "Mutual Structural Recursion", "shortTitle": null, "number": "2"}]}, "address": "/Definitions/Recursive-Definitions/"}], "mutual-partial-fixpoint": [{"id": "mutual-partial-fixpoint", "data": {"title": "Mutual Recursion with Partial Fixpoints", "shortTitle": null, "sectionNum": "7.6.4.4.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Definitions", "shortTitle": null, "number": "7"}, {"title": "Recursive Definitions", "shortTitle": null, "number": "6"}, {"title": "Partial Fixpoint Recursion", "shortTitle": null, "number": "4"}, {"title": "Mutual Recursion with Partial Fixpoints", "shortTitle": null, "number": "4"}]}, "address": "/Definitions/Recursive-Definitions/"}], "mutual-inductive-types-same-universe": [{"id": "mutual-inductive-types-same-universe", "data": {"title": "Universe Levels", "shortTitle": null, "sectionNum": "4.4.5.1.3.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "The Type System", "shortTitle": null, "number": "4"}, {"title": "Inductive Types", "shortTitle": null, "number": "4"}, {"title": "Mutual Inductive Types", "shortTitle": null, "number": "5"}, {"title": "Requirements", "shortTitle": null, "number": "1"}, {"title": "Universe Levels", "shortTitle": null, "number": "3"}]}, "address": "/The-Type-System/Inductive-Types/"}], "mutual-inductive-types-same-parameters": [{"id": "mutual-inductive-types-same-parameters", "data": {"title": "Parameters Must Match", "shortTitle": null, "sectionNum": "4.4.5.1.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "The Type System", "shortTitle": null, "number": "4"}, {"title": "Inductive Types", "shortTitle": null, "number": "4"}, {"title": "Mutual Inductive Types", "shortTitle": null, "number": "5"}, {"title": "Requirements", "shortTitle": null, "number": "1"}, {"title": "Parameters Must Match", "shortTitle": null, "number": "2"}]}, "address": "/The-Type-System/Inductive-Types/"}], "mutual-inductive-types-run-time": [{"id": "mutual-inductive-types-run-time", "data": {"title": "Run-Time Representation", "shortTitle": null, "sectionNum": "4.4.5.3.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "The Type System", "shortTitle": null, "number": "4"}, {"title": "Inductive Types", "shortTitle": null, "number": "4"}, {"title": "Mutual Inductive Types", "shortTitle": null, "number": "5"}, {"title": "Run-Time Representation", "shortTitle": null, "number": "3"}]}, "address": "/The-Type-System/Inductive-Types/"}], "mutual-inductive-types-requirements": [{"id": "mutual-inductive-types-requirements", "data": {"title": "Requirements", "shortTitle": null, "sectionNum": "4.4.5.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "The Type System", "shortTitle": null, "number": "4"}, {"title": "Inductive Types", "shortTitle": null, "number": "4"}, {"title": "Mutual Inductive Types", "shortTitle": null, "number": "5"}, {"title": "Requirements", "shortTitle": null, "number": "1"}]}, "address": "/The-Type-System/Inductive-Types/"}], "mutual-inductive-types-recursors": [{"id": "mutual-inductive-types-recursors", "data": {"title": "Recursors", "shortTitle": null, "sectionNum": "4.4.5.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "The Type System", "shortTitle": null, "number": "4"}, {"title": "Inductive Types", "shortTitle": null, "number": "4"}, {"title": "Mutual Inductive Types", "shortTitle": null, "number": "5"}, {"title": "Recursors", "shortTitle": null, "number": "2"}]}, "address": "/The-Type-System/Inductive-Types/"}], "mutual-inductive-types-positivity": [{"id": "mutual-inductive-types-positivity", "data": {"title": "Positivity", "shortTitle": null, "sectionNum": "4.4.5.1.4.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "The Type System", "shortTitle": null, "number": "4"}, {"title": "Inductive Types", "shortTitle": null, "number": "4"}, {"title": "Mutual Inductive Types", "shortTitle": null, "number": "5"}, {"title": "Requirements", "shortTitle": null, "number": "1"}, {"title": "Positivity", "shortTitle": null, "number": "4"}]}, "address": "/The-Type-System/Inductive-Types/"}], "mutual-inductive-types-dependencies": [{"id": "mutual-inductive-types-dependencies", "data": {"title": "Mutual Dependencies", "shortTitle": null, "sectionNum": "4.4.5.1.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "The Type System", "shortTitle": null, "number": "4"}, {"title": "Inductive Types", "shortTitle": null, "number": "4"}, {"title": "Mutual Inductive Types", "shortTitle": null, "number": "5"}, {"title": "Requirements", "shortTitle": null, "number": "1"}, {"title": "Mutual Dependencies", "shortTitle": null, "number": "1"}]}, "address": "/The-Type-System/Inductive-Types/"}], "mutual-inductive-types": [{"id": "mutual-inductive-types", "data": {"title": "Mutual Inductive Types", "shortTitle": null, "sectionNum": "4.4.5.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "The Type System", "shortTitle": null, "number": "4"}, {"title": "Inductive Types", "shortTitle": null, "number": "4"}, {"title": "Mutual Inductive Types", "shortTitle": null, "number": "5"}]}, "address": "/The-Type-System/Inductive-Types/"}], "mutable-st-references": [{"id": "mutable-st-references", "data": {"title": "State Transformers", "shortTitle": null, "sectionNum": "15.4.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "IO", "shortTitle": null, "number": "15"}, {"title": "Mutable References", "shortTitle": null, "number": "4"}, {"title": "State Transformers", "shortTitle": null, "number": "1"}]}, "address": "/IO/Mutable-References/"}], "monads-and-do": [{"id": "monads-and-do", "data": {"title": "Functors, Monads and do -Notation", "shortTitle": null, "sectionNum": "14.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Functors, Monads and do -Notation", "shortTitle": null, "number": "14"}]}, "address": "/Functors___-Monads-and--do--Notation/"}], "monad-varieties": [{"id": "monad-varieties", "data": {"title": "Varieties of Monads", "shortTitle": null, "sectionNum": "14.5.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Functors, Monads and do -Notation", "shortTitle": null, "number": "14"}, {"title": "Varieties of Monads", "shortTitle": null, "number": "5"}]}, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "monad-transformers": [{"id": "monad-transformers", "data": {"title": "Monad Transformers", "shortTitle": null, "sectionNum": "14.5.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Functors, Monads and do -Notation", "shortTitle": null, "number": "14"}, {"title": "Varieties of Monads", "shortTitle": null, "number": "5"}, {"title": "Monad Transformers", "shortTitle": null, "number": "2"}]}, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "monad-laws": [{"id": "monad-laws", "data": {"title": "Laws", "shortTitle": null, "sectionNum": "14.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Functors, Monads and do -Notation", "shortTitle": null, "number": "14"}, {"title": "Laws", "shortTitle": null, "number": "1"}]}, "address": "/Functors___-Monads-and--do--Notation/Laws/"}], "monad-iteration-syntax": [{"id": "monad-iteration-syntax", "data": {"title": "Iteration", "shortTitle": null, "sectionNum": "14.3.2.5.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Functors, Monads and do -Notation", "shortTitle": null, "number": "14"}, {"title": "Syntax", "shortTitle": null, "number": "3"}, {"title": "do -Notation", "shortTitle": null, "number": "2"}, {"title": "Iteration", "shortTitle": null, "number": "5"}]}, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}], "module-syntax": [{"id": "module-syntax", "data": {"title": "Concrete Syntax", "shortTitle": null, "sectionNum": "5.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Source Files and Modules", "shortTitle": null, "number": "5"}, {"title": "Concrete Syntax", "shortTitle": null, "number": "2"}]}, "address": "/Source-Files-and-Modules/"}], "module-structure": [{"id": "module-structure", "data": {"title": "Structure", "shortTitle": null, "sectionNum": "5.3.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Source Files and Modules", "shortTitle": null, "number": "5"}, {"title": "Structure", "shortTitle": null, "number": "3"}]}, "address": "/Source-Files-and-Modules/"}], "module-scopes": [{"id": "module-scopes", "data": {"title": "Modules and Visibility", "shortTitle": null, "sectionNum": "5.4.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Source Files and Modules", "shortTitle": null, "number": "5"}, {"title": "Modules and Visibility", "shortTitle": null, "number": "4"}]}, "address": "/Source-Files-and-Modules/"}], "module-headers": [{"id": "module-headers", "data": {"title": "Headers", "shortTitle": null, "sectionNum": "5.3.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Source Files and Modules", "shortTitle": null, "number": "5"}, {"title": "Structure", "shortTitle": null, "number": "3"}, {"title": "Headers", "shortTitle": null, "number": "1"}]}, "address": "/Source-Files-and-Modules/"}], "module-encoding": [{"id": "module-encoding", "data": {"title": "Encoding and Representation", "shortTitle": null, "sectionNum": "5.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Source Files and Modules", "shortTitle": null, "number": "5"}, {"title": "Encoding and Representation", "shortTitle": null, "number": "1"}]}, "address": "/Source-Files-and-Modules/"}], "module-contents": [{"id": "module-contents", "data": {"title": "Elaborated Modules", "shortTitle": null, "sectionNum": "5.5.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Source Files and Modules", "shortTitle": null, "number": "5"}, {"title": "Elaborated Modules", "shortTitle": null, "number": "5"}]}, "address": "/Source-Files-and-Modules/"}], "metavariables-in-proofs": [{"id": "metavariables-in-proofs", "data": {"title": "Metavariables", "shortTitle": null, "sectionNum": "13.2.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Tactic Proofs", "shortTitle": null, "number": "13"}, {"title": "Reading Proof States", "shortTitle": null, "number": "2"}, {"title": "Metavariables", "shortTitle": null, "number": "2"}]}, "address": "/Tactic-Proofs/Reading-Proof-States/"}], "meta-phase": [{"id": "meta-phase", "data": {"title": "The Meta Phase", "shortTitle": null, "sectionNum": "5.4.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Source Files and Modules", "shortTitle": null, "number": "5"}, {"title": "Modules and Visibility", "shortTitle": null, "number": "4"}, {"title": "The Meta Phase", "shortTitle": null, "number": "1"}]}, "address": "/Source-Files-and-Modules/"}], "match_pattern-functions": [{"id": "match_pattern-functions", "data": {"title": "Custom Pattern Functions", "shortTitle": null, "sectionNum": "10.8.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Terms", "shortTitle": null, "number": "10"}, {"title": "Pattern Matching", "shortTitle": null, "number": "8"}, {"title": "Custom Pattern Functions", "shortTitle": null, "number": "2"}]}, "address": "/Terms/Pattern-Matching/"}], "match-generalization": [{"id": "match-generalization", "data": {"title": "Generalization", "shortTitle": null, "sectionNum": "10.8.1.4.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Terms", "shortTitle": null, "number": "10"}, {"title": "Pattern Matching", "shortTitle": null, "number": "8"}, {"title": "Types", "shortTitle": null, "number": "1"}, {"title": "Generalization", "shortTitle": null, "number": "4"}]}, "address": "/Terms/Pattern-Matching/"}], "maps": [{"id": "maps", "data": {"title": "Maps and Sets", "shortTitle": null, "sectionNum": "20.19.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Maps and Sets", "shortTitle": null, "number": "19"}]}, "address": "/Basic-Types/Maps-and-Sets/"}], "macros": [{"id": "macros", "data": {"title": "Macros", "shortTitle": null, "sectionNum": "22.5.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Notations and Macros", "shortTitle": null, "number": "22"}, {"title": "Macros", "shortTitle": null, "number": "5"}]}, "address": "/Notations-and-Macros/Macros/"}], "macro_rules": [{"id": "macro_rules", "data": {"title": "The macro_rules Command", "shortTitle": null, "sectionNum": "22.5.5.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Notations and Macros", "shortTitle": null, "number": "22"}, {"title": "Macros", "shortTitle": null, "number": "5"}, {"title": "Defining Macros", "shortTitle": null, "number": "5"}, {"title": "The macro_rules Command", "shortTitle": null, "number": "1"}]}, "address": "/Notations-and-Macros/Macros/"}], "macro-monad-hygiene": [{"id": "macro-monad-hygiene", "data": {"title": "Hygiene-Related Operations", "shortTitle": null, "sectionNum": "22.5.2.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Notations and Macros", "shortTitle": null, "number": "22"}, {"title": "Macros", "shortTitle": null, "number": "5"}, {"title": "The Macro Monad", "shortTitle": null, "number": "2"}, {"title": "Hygiene-Related Operations", "shortTitle": null, "number": "2"}]}, "address": "/Notations-and-Macros/Macros/"}], "macro-monad": [{"id": "macro-monad", "data": {"title": "The Macro Monad", "shortTitle": null, "sectionNum": "22.5.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Notations and Macros", "shortTitle": null, "number": "22"}, {"title": "Macros", "shortTitle": null, "number": "5"}, {"title": "The Macro Monad", "shortTitle": null, "number": "2"}]}, "address": "/Notations-and-Macros/Macros/"}], "macro-hygiene": [{"id": "macro-hygiene", "data": {"title": "Hygiene", "shortTitle": null, "sectionNum": "22.5.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Notations and Macros", "shortTitle": null, "number": "22"}, {"title": "Macros", "shortTitle": null, "number": "5"}, {"title": "Hygiene", "shortTitle": null, "number": "1"}]}, "address": "/Notations-and-Macros/Macros/"}], "macro-exceptions": [{"id": "macro-exceptions", "data": {"title": "Exceptions and Errors", "shortTitle": null, "sectionNum": "22.5.2.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Notations and Macros", "shortTitle": null, "number": "22"}, {"title": "Macros", "shortTitle": null, "number": "5"}, {"title": "The Macro Monad", "shortTitle": null, "number": "2"}, {"title": "Exceptions and Errors", "shortTitle": null, "number": "1"}]}, "address": "/Notations-and-Macros/Macros/"}], "macro-environment": [{"id": "macro-environment", "data": {"title": "Querying the Environment", "shortTitle": null, "sectionNum": "22.5.2.3.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Notations and Macros", "shortTitle": null, "number": "22"}, {"title": "Macros", "shortTitle": null, "number": "5"}, {"title": "The Macro Monad", "shortTitle": null, "number": "2"}, {"title": "Querying the Environment", "shortTitle": null, "number": "3"}]}, "address": "/Notations-and-Macros/Macros/"}], "macro-command": [{"id": "macro-command", "data": {"title": "The macro Command", "shortTitle": null, "sectionNum": "22.5.5.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Notations and Macros", "shortTitle": null, "number": "22"}, {"title": "Macros", "shortTitle": null, "number": "5"}, {"title": "Defining Macros", "shortTitle": null, "number": "5"}, {"title": "The macro Command", "shortTitle": null, "number": "2"}]}, "address": "/Notations-and-Macros/Macros/"}], "macro-attribute": [{"id": "macro-attribute", "data": {"title": "The Macro Attribute", "shortTitle": null, "sectionNum": "22.5.5.3.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Notations and Macros", "shortTitle": null, "number": "22"}, {"title": "Macros", "shortTitle": null, "number": "5"}, {"title": "Defining Macros", "shortTitle": null, "number": "5"}, {"title": "The Macro Attribute", "shortTitle": null, "number": "3"}]}, "address": "/Notations-and-Macros/Macros/"}], "macro-and-elab": [{"id": "macro-and-elab", "data": {"title": "Macro Expansion and Elaboration", "shortTitle": null, "sectionNum": "2.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Elaboration and Compilation", "shortTitle": null, "number": "2"}, {"title": "Macro Expansion and Elaboration", "shortTitle": null, "number": "2"}]}, "address": "/Elaboration-and-Compilation/"}], "list-syntax": [{"id": "list-syntax", "data": {"title": "Syntax", "shortTitle": null, "sectionNum": "20.15.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Linked Lists", "shortTitle": null, "number": "15"}, {"title": "Syntax", "shortTitle": null, "number": "1"}]}, "address": "/Basic-Types/Linked-Lists/"}], "list-performance": [{"id": "list-performance", "data": {"title": "Performance Notes", "shortTitle": null, "sectionNum": "20.15.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Linked Lists", "shortTitle": null, "number": "15"}, {"title": "Performance Notes", "shortTitle": null, "number": "2"}]}, "address": "/Basic-Types/Linked-Lists/"}], "list-api-reference": [{"id": "list-api-reference", "data": {"title": "API Reference", "shortTitle": null, "sectionNum": "20.15.3.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Linked Lists", "shortTitle": null, "number": "15"}, {"title": "API Reference", "shortTitle": null, "number": "3"}]}, "address": "/Basic-Types/Linked-Lists/"}], "lifting-monads": [{"id": "lifting-monads", "data": {"title": "Lifting Monads", "shortTitle": null, "sectionNum": "14.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Functors, Monads and do -Notation", "shortTitle": null, "number": "14"}, {"title": "Lifting Monads", "shortTitle": null, "number": "2"}]}, "address": "/Functors___-Monads-and--do--Notation/Lifting-Monads/"}], "level-expressions": [{"id": "level-expressions", "data": {"title": "Level Expressions", "shortTitle": null, "sectionNum": "4.3.2.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "The Type System", "shortTitle": null, "number": "4"}, {"title": "Universes", "shortTitle": null, "number": "3"}, {"title": "Polymorphism", "shortTitle": null, "number": "2"}, {"title": "Level Expressions", "shortTitle": null, "number": "1"}]}, "address": "/The-Type-System/Universes/"}], "let-mut": [{"id": "let-mut", "data": {"title": "Local Mutable State", "shortTitle": null, "sectionNum": "14.3.2.3.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Functors, Monads and do -Notation", "shortTitle": null, "number": "14"}, {"title": "Syntax", "shortTitle": null, "number": "3"}, {"title": "do -Notation", "shortTitle": null, "number": "2"}, {"title": "Local Mutable State", "shortTitle": null, "number": "3"}]}, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}], "lean-language-reference": [{"id": "lean-language-reference", "data": {"title": "The Lean Language Reference", "shortTitle": null, "sectionNum": "", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}]}, "address": "//"}], "language-extension": [{"id": "language-extension", "data": {"title": "Notations and Macros", "shortTitle": null, "sectionNum": "22.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Notations and Macros", "shortTitle": null, "number": "22"}]}, "address": "/Notations-and-Macros/"}], "lake-vocab": [{"id": "lake-vocab", "data": {"title": "Concepts and Terminology", "shortTitle": null, "sectionNum": "24.1.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Build Tools and Distribution", "shortTitle": null, "number": "24"}, {"title": "Lake", "shortTitle": null, "number": "1"}, {"title": "Concepts and Terminology", "shortTitle": null, "number": "1"}]}, "address": "/Build-Tools-and-Distribution/Lake/"}], "lake-scripts": [{"id": "lake-scripts", "data": {"title": "Scripts", "shortTitle": null, "sectionNum": "24.1.1.3.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Build Tools and Distribution", "shortTitle": null, "number": "24"}, {"title": "Lake", "shortTitle": null, "number": "1"}, {"title": "Concepts and Terminology", "shortTitle": null, "number": "1"}, {"title": "Scripts", "shortTitle": null, "number": "3"}]}, "address": "/Build-Tools-and-Distribution/Lake/"}], "lake-github": [{"id": "lake-github", "data": {"title": "GitHub Release Builds", "shortTitle": null, "sectionNum": "24.1.1.5.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Build Tools and Distribution", "shortTitle": null, "number": "24"}, {"title": "Lake", "shortTitle": null, "number": "1"}, {"title": "Concepts and Terminology", "shortTitle": null, "number": "1"}, {"title": "GitHub Release Builds", "shortTitle": null, "number": "5"}]}, "address": "/Build-Tools-and-Distribution/Lake/"}], "lake-facets": [{"id": "lake-facets", "data": {"title": "Facets", "shortTitle": null, "sectionNum": "24.1.1.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Build Tools and Distribution", "shortTitle": null, "number": "24"}, {"title": "Lake", "shortTitle": null, "number": "1"}, {"title": "Concepts and Terminology", "shortTitle": null, "number": "1"}, {"title": "Facets", "shortTitle": null, "number": "2"}]}, "address": "/Build-Tools-and-Distribution/Lake/"}], "lake-environment": [{"id": "lake-environment", "data": {"title": "Environment Variables", "shortTitle": null, "sectionNum": "24.1.2.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Build Tools and Distribution", "shortTitle": null, "number": "24"}, {"title": "Lake", "shortTitle": null, "number": "1"}, {"title": "Command-Line Interface", "shortTitle": null, "number": "2"}, {"title": "Environment Variables", "shortTitle": null, "number": "1"}]}, "address": "/Build-Tools-and-Distribution/Lake/"}], "lake-config-toml": [{"id": "lake-config-toml", "data": {"title": "Declarative TOML Format", "shortTitle": null, "sectionNum": "24.1.3.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Build Tools and Distribution", "shortTitle": null, "number": "24"}, {"title": "Lake", "shortTitle": null, "number": "1"}, {"title": "Configuration File Format", "shortTitle": null, "number": "3"}, {"title": "Declarative TOML Format", "shortTitle": null, "number": "1"}]}, "address": "/Build-Tools-and-Distribution/Lake/"}], "lake-config-lean": [{"id": "lake-config-lean", "data": {"title": "Lean Format", "shortTitle": null, "sectionNum": "24.1.3.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Build Tools and Distribution", "shortTitle": null, "number": "24"}, {"title": "Lake", "shortTitle": null, "number": "1"}, {"title": "Configuration File Format", "shortTitle": null, "number": "3"}, {"title": "Lean Format", "shortTitle": null, "number": "2"}]}, "address": "/Build-Tools-and-Distribution/Lake/"}], "lake-config": [{"id": "lake-config", "data": {"title": "Configuration File Format", "shortTitle": null, "sectionNum": "24.1.3.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Build Tools and Distribution", "shortTitle": null, "number": "24"}, {"title": "Lake", "shortTitle": null, "number": "1"}, {"title": "Configuration File Format", "shortTitle": null, "number": "3"}]}, "address": "/Build-Tools-and-Distribution/Lake/"}], "lake-cli": [{"id": "lake-cli", "data": {"title": "Command-Line Interface", "shortTitle": null, "sectionNum": "24.1.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Build Tools and Distribution", "shortTitle": null, "number": "24"}, {"title": "Lake", "shortTitle": null, "number": "1"}, {"title": "Command-Line Interface", "shortTitle": null, "number": "2"}]}, "address": "/Build-Tools-and-Distribution/Lake/"}], "lake-cache-remote": [{"id": "lake-cache-remote", "data": {"title": "Remote Artifact Caches", "shortTitle": null, "sectionNum": "24.1.1.6.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Build Tools and Distribution", "shortTitle": null, "number": "24"}, {"title": "Lake", "shortTitle": null, "number": "1"}, {"title": "Concepts and Terminology", "shortTitle": null, "number": "1"}, {"title": "Artifact Caches", "shortTitle": null, "number": "6"}, {"title": "Remote Artifact Caches", "shortTitle": null, "number": "1"}]}, "address": "/Build-Tools-and-Distribution/Lake/"}], "lake-cache": [{"id": "lake-cache", "data": {"title": "Artifact Caches", "shortTitle": null, "sectionNum": "24.1.1.6.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Build Tools and Distribution", "shortTitle": null, "number": "24"}, {"title": "Lake", "shortTitle": null, "number": "1"}, {"title": "Concepts and Terminology", "shortTitle": null, "number": "1"}, {"title": "Artifact Caches", "shortTitle": null, "number": "6"}]}, "address": "/Build-Tools-and-Distribution/Lake/"}], "lake-api": [{"id": "lake-api", "data": {"title": "Script API Reference", "shortTitle": null, "sectionNum": "24.1.4.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Build Tools and Distribution", "shortTitle": null, "number": "24"}, {"title": "Lake", "shortTitle": null, "number": "1"}, {"title": "Script API Reference", "shortTitle": null, "number": "4"}]}, "address": "/Build-Tools-and-Distribution/Lake/"}], "lake": [{"id": "lake", "data": {"title": "Lake", "shortTitle": null, "sectionNum": "24.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Build Tools and Distribution", "shortTitle": null, "number": "24"}, {"title": "Lake", "shortTitle": null, "number": "1"}]}, "address": "/Build-Tools-and-Distribution/Lake/"}], "keywords-and-identifiers": [{"id": "keywords-and-identifiers", "data": {"title": "Keywords and Identifiers", "shortTitle": null, "sectionNum": "5.2.3.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Source Files and Modules", "shortTitle": null, "number": "5"}, {"title": "Concrete Syntax", "shortTitle": null, "number": "2"}, {"title": "Keywords and Identifiers", "shortTitle": null, "number": "3"}]}, "address": "/Source-Files-and-Modules/"}], "iterators": [{"id": "iterators", "data": {"title": "Iterators", "shortTitle": null, "sectionNum": "21.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Iterators", "shortTitle": null, "number": "21"}]}, "address": "/Iterators/"}], "iterator-plausibility": [{"id": "iterator-plausibility", "data": {"title": "Plausibility", "shortTitle": null, "sectionNum": "21.2.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Iterators", "shortTitle": null, "number": "21"}, {"title": "Iterator Definitions", "shortTitle": null, "number": "2"}, {"title": "Plausibility", "shortTitle": null, "number": "1"}]}, "address": "/Iterators/Iterator-Definitions/"}], "iota-reduction": [{"id": "iota-reduction", "data": {"title": "Reduction", "shortTitle": null, "sectionNum": "4.4.3.1.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "The Type System", "shortTitle": null, "number": "4"}, {"title": "Inductive Types", "shortTitle": null, "number": "4"}, {"title": "Logical Model", "shortTitle": null, "number": "3"}, {"title": "Recursors", "shortTitle": null, "number": "1"}, {"title": "Reduction", "shortTitle": null, "number": "2"}]}, "address": "/The-Type-System/Inductive-Types/"}], "io-timing": [{"id": "io-timing", "data": {"title": "Timing", "shortTitle": null, "sectionNum": "15.8.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "IO", "shortTitle": null, "number": "15"}, {"title": "Timing", "shortTitle": null, "number": "8"}]}, "address": "/IO/Timing/"}], "io-processes": [{"id": "io-processes", "data": {"title": "Processes", "shortTitle": null, "sectionNum": "15.9.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "IO", "shortTitle": null, "number": "15"}, {"title": "Processes", "shortTitle": null, "number": "9"}]}, "address": "/IO/Processes/"}], "io-monad-getenv": [{"id": "io-monad-getenv", "data": {"title": "Environment Variables", "shortTitle": null, "sectionNum": "15.7.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "IO", "shortTitle": null, "number": "15"}, {"title": "Environment Variables", "shortTitle": null, "number": "7"}]}, "address": "/IO/Environment-Variables/"}], "io-monad-errors": [{"id": "io-monad-errors", "data": {"title": "Errors and Error Handling in IO", "shortTitle": null, "sectionNum": "15.1.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "IO", "shortTitle": null, "number": "15"}, {"title": "Logical Model", "shortTitle": null, "number": "1"}, {"title": "Errors and Error Handling in IO", "shortTitle": null, "number": "2"}]}, "address": "/IO/Logical-Model/"}], "io-monad-control": [{"id": "io-monad-control", "data": {"title": "Control Structures", "shortTitle": null, "sectionNum": "15.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "IO", "shortTitle": null, "number": "15"}, {"title": "Control Structures", "shortTitle": null, "number": "2"}]}, "address": "/IO/Control-Structures/"}], "io-monad": [{"id": "io-monad", "data": {"title": "The IO , EIO and BaseIO Monads", "shortTitle": null, "sectionNum": "15.1.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "IO", "shortTitle": null, "number": "15"}, {"title": "Logical Model", "shortTitle": null, "number": "1"}, {"title": "The IO , EIO and BaseIO Monads", "shortTitle": null, "number": "1"}]}, "address": "/IO/Logical-Model/"}], "io": [{"id": "io", "data": {"title": "IO", "shortTitle": null, "sectionNum": "15.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "IO", "shortTitle": null, "number": "15"}]}, "address": "/IO/"}], "introduction": [{"id": "introduction", "data": {"title": "Introduction", "shortTitle": null, "sectionNum": "1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Introduction", "shortTitle": null, "number": "1"}]}, "address": "/Introduction/"}], "interaction": [{"id": "interaction", "data": {"title": "Interacting with Lean", "shortTitle": null, "sectionNum": "3.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Interacting with Lean", "shortTitle": null, "number": "3"}]}, "address": "/Interacting-with-Lean/"}], "int-syntax": [{"id": "int-syntax", "data": {"title": "Syntax", "shortTitle": null, "sectionNum": "20.2.3.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Integers", "shortTitle": null, "number": "2"}, {"title": "Syntax", "shortTitle": null, "number": "3"}]}, "address": "/Basic-Types/Integers/"}], "int-runtime": [{"id": "int-runtime", "data": {"title": "Run-Time Representation", "shortTitle": null, "sectionNum": "20.2.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Integers", "shortTitle": null, "number": "2"}, {"title": "Run-Time Representation", "shortTitle": null, "number": "2"}]}, "address": "/Basic-Types/Integers/"}], "int-model": [{"id": "int-model", "data": {"title": "Logical Model", "shortTitle": null, "sectionNum": "20.2.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Integers", "shortTitle": null, "number": "2"}, {"title": "Logical Model", "shortTitle": null, "number": "1"}]}, "address": "/Basic-Types/Integers/"}], "int-div": [{"id": "int-div", "data": {"title": "Division", "shortTitle": null, "sectionNum": "20.2.4.3.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Integers", "shortTitle": null, "number": "2"}, {"title": "API Reference", "shortTitle": null, "number": "4"}, {"title": "Arithmetic", "shortTitle": null, "number": "3"}, {"title": "Division", "shortTitle": null, "number": "1"}]}, "address": "/Basic-Types/Integers/"}], "instance-synth-parameters": [{"id": "instance-synth-parameters", "data": {"title": "Instance Parameters and Synthesis", "shortTitle": null, "sectionNum": "11.3.4.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Type Classes", "shortTitle": null, "number": "11"}, {"title": "Instance Synthesis", "shortTitle": null, "number": "3"}, {"title": "Instance Parameters and Synthesis", "shortTitle": null, "number": "4"}]}, "address": "/Type-Classes/Instance-Synthesis/"}], "instance-synth": [{"id": "instance-synth", "data": {"title": "Instance Synthesis", "shortTitle": null, "sectionNum": "11.3.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Type Classes", "shortTitle": null, "number": "11"}, {"title": "Instance Synthesis", "shortTitle": null, "number": "3"}]}, "address": "/Type-Classes/Instance-Synthesis/"}], "instance-search": [{"id": "instance-search", "data": {"title": "Instance Search Problems", "shortTitle": null, "sectionNum": "11.3.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Type Classes", "shortTitle": null, "number": "11"}, {"title": "Instance Synthesis", "shortTitle": null, "number": "3"}, {"title": "Instance Search Problems", "shortTitle": null, "number": "2"}]}, "address": "/Type-Classes/Instance-Synthesis/"}], "instance-priorities": [{"id": "instance-priorities", "data": {"title": "Instance Priorities", "shortTitle": null, "sectionNum": "11.2.3.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Type Classes", "shortTitle": null, "number": "11"}, {"title": "Instance Declarations", "shortTitle": null, "number": "2"}, {"title": "Instance Priorities", "shortTitle": null, "number": "3"}]}, "address": "/Type-Classes/Instance-Declarations/"}], "instance-declarations": [{"id": "instance-declarations", "data": {"title": "Instance Declarations", "shortTitle": null, "sectionNum": "11.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Type Classes", "shortTitle": null, "number": "11"}, {"title": "Instance Declarations", "shortTitle": null, "number": "2"}]}, "address": "/Type-Classes/Instance-Declarations/"}], "instance-attribute": [{"id": "instance-attribute", "data": {"title": "The Instance Attribute", "shortTitle": null, "sectionNum": "11.2.5.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Type Classes", "shortTitle": null, "number": "11"}, {"title": "Instance Declarations", "shortTitle": null, "number": "2"}, {"title": "The Instance Attribute", "shortTitle": null, "number": "5"}]}, "address": "/Type-Classes/Instance-Declarations/"}], "initialization": [{"id": "initialization", "data": {"title": "Initialization", "shortTitle": null, "sectionNum": "2.5.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Elaboration and Compilation", "shortTitle": null, "number": "2"}, {"title": "Initialization", "shortTitle": null, "number": "5"}]}, "address": "/Elaboration-and-Compilation/"}], "inferring-well-founded-recursion": [{"id": "inferring-well-founded-recursion", "data": {"title": "Inferring Well-Founded Recursion", "shortTitle": null, "sectionNum": "7.6.3.4.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Definitions", "shortTitle": null, "number": "7"}, {"title": "Recursive Definitions", "shortTitle": null, "number": "6"}, {"title": "Well-Founded Recursion", "shortTitle": null, "number": "3"}, {"title": "Inferring Well-Founded Recursion", "shortTitle": null, "number": "4"}]}, "address": "/Definitions/Recursive-Definitions/"}], "inferring-structural-recursion": [{"id": "inferring-structural-recursion", "data": {"title": "Inferring Structural Recursion", "shortTitle": null, "sectionNum": "7.6.2.3.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Definitions", "shortTitle": null, "number": "7"}, {"title": "Recursive Definitions", "shortTitle": null, "number": "6"}, {"title": "Structural Recursion", "shortTitle": null, "number": "2"}, {"title": "Inferring Structural Recursion", "shortTitle": null, "number": "3"}]}, "address": "/Definitions/Recursive-Definitions/"}], "inductive-types-trivial-wrappers": [{"id": "inductive-types-trivial-wrappers", "data": {"title": "Trivial Wrappers", "shortTitle": null, "sectionNum": "4.4.4.3.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "The Type System", "shortTitle": null, "number": "4"}, {"title": "Inductive Types", "shortTitle": null, "number": "4"}, {"title": "Run-Time Representation", "shortTitle": null, "number": "4"}, {"title": "Trivial Wrappers", "shortTitle": null, "number": "3"}]}, "address": "/The-Type-System/Inductive-Types/"}], "inductive-types-standard-representation": [{"id": "inductive-types-standard-representation", "data": {"title": "Other Inductive Types", "shortTitle": null, "sectionNum": "4.4.4.4.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "The Type System", "shortTitle": null, "number": "4"}, {"title": "Inductive Types", "shortTitle": null, "number": "4"}, {"title": "Run-Time Representation", "shortTitle": null, "number": "4"}, {"title": "Other Inductive Types", "shortTitle": null, "number": "4"}]}, "address": "/The-Type-System/Inductive-Types/"}], "inductive-types-runtime-special-support": [{"id": "inductive-types-runtime-special-support", "data": {"title": "Exceptions", "shortTitle": null, "sectionNum": "4.4.4.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "The Type System", "shortTitle": null, "number": "4"}, {"title": "Inductive Types", "shortTitle": null, "number": "4"}, {"title": "Run-Time Representation", "shortTitle": null, "number": "4"}, {"title": "Exceptions", "shortTitle": null, "number": "1"}]}, "address": "/The-Type-System/Inductive-Types/"}], "inductive-types-runtime-relevance": [{"id": "inductive-types-runtime-relevance", "data": {"title": "Relevance", "shortTitle": null, "sectionNum": "4.4.4.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "The Type System", "shortTitle": null, "number": "4"}, {"title": "Inductive Types", "shortTitle": null, "number": "4"}, {"title": "Run-Time Representation", "shortTitle": null, "number": "4"}, {"title": "Relevance", "shortTitle": null, "number": "2"}]}, "address": "/The-Type-System/Inductive-Types/"}], "inductive-types-logical-model": [{"id": "inductive-types-logical-model", "data": {"title": "Logical Model", "shortTitle": null, "sectionNum": "4.4.3.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "The Type System", "shortTitle": null, "number": "4"}, {"title": "Inductive Types", "shortTitle": null, "number": "4"}, {"title": "Logical Model", "shortTitle": null, "number": "3"}]}, "address": "/The-Type-System/Inductive-Types/"}], "inductive-types-ffi": [{"id": "inductive-types-ffi", "data": {"title": "FFI", "shortTitle": null, "sectionNum": "4.4.4.4.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "The Type System", "shortTitle": null, "number": "4"}, {"title": "Inductive Types", "shortTitle": null, "number": "4"}, {"title": "Run-Time Representation", "shortTitle": null, "number": "4"}, {"title": "Other Inductive Types", "shortTitle": null, "number": "4"}, {"title": "FFI", "shortTitle": null, "number": "1"}]}, "address": "/The-Type-System/Inductive-Types/"}], "inductive-types": [{"id": "inductive-types", "data": {"title": "Inductive Types", "shortTitle": null, "sectionNum": "4.4.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "The Type System", "shortTitle": null, "number": "4"}, {"title": "Inductive Types", "shortTitle": null, "number": "4"}]}, "address": "/The-Type-System/Inductive-Types/"}], "inductive-type-universe-levels": [{"id": "inductive-type-universe-levels", "data": {"title": "Universe Levels", "shortTitle": null, "sectionNum": "4.4.3.2.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "The Type System", "shortTitle": null, "number": "4"}, {"title": "Inductive Types", "shortTitle": null, "number": "4"}, {"title": "Logical Model", "shortTitle": null, "number": "3"}, {"title": "Well-Formedness Requirements", "shortTitle": null, "number": "2"}, {"title": "Universe Levels", "shortTitle": null, "number": "1"}]}, "address": "/The-Type-System/Inductive-Types/"}], "inductive-declarations-deriving-instances": [{"id": "inductive-declarations-deriving-instances", "data": {"title": "Deriving Instances", "shortTitle": null, "sectionNum": "4.4.1.4.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "The Type System", "shortTitle": null, "number": "4"}, {"title": "Inductive Types", "shortTitle": null, "number": "4"}, {"title": "Inductive Type Declarations", "shortTitle": null, "number": "1"}, {"title": "Deriving Instances", "shortTitle": null, "number": "4"}]}, "address": "/The-Type-System/Inductive-Types/"}], "inductive-declarations": [{"id": "inductive-declarations", "data": {"title": "Inductive Type Declarations", "shortTitle": null, "sectionNum": "4.4.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "The Type System", "shortTitle": null, "number": "4"}, {"title": "Inductive Types", "shortTitle": null, "number": "4"}, {"title": "Inductive Type Declarations", "shortTitle": null, "number": "1"}]}, "address": "/The-Type-System/Inductive-Types/"}], "inductive-datatypes-parameters-and-indices": [{"id": "inductive-datatypes-parameters-and-indices", "data": {"title": "Parameters and Indices", "shortTitle": null, "sectionNum": "4.4.1.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "The Type System", "shortTitle": null, "number": "4"}, {"title": "Inductive Types", "shortTitle": null, "number": "4"}, {"title": "Inductive Type Declarations", "shortTitle": null, "number": "1"}, {"title": "Parameters and Indices", "shortTitle": null, "number": "1"}]}, "address": "/The-Type-System/Inductive-Types/"}], "implicit-functions": [{"id": "implicit-functions", "data": {"title": "Implicit Parameters", "shortTitle": null, "sectionNum": "10.3.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Terms", "shortTitle": null, "number": "10"}, {"title": "Functions", "shortTitle": null, "number": "3"}, {"title": "Implicit Parameters", "shortTitle": null, "number": "1"}]}, "address": "/Terms/Functions/"}], "if-then-else": [{"id": "if-then-else", "data": {"title": "Conditionals", "shortTitle": null, "sectionNum": "10.7.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Terms", "shortTitle": null, "number": "10"}, {"title": "Conditionals", "shortTitle": null, "number": "7"}]}, "address": "/Terms/Conditionals/"}], "identifiers-and-resolution": [{"id": "identifiers-and-resolution", "data": {"title": "Identifiers", "shortTitle": null, "sectionNum": "10.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Terms", "shortTitle": null, "number": "10"}, {"title": "Identifiers", "shortTitle": null, "number": "1"}]}, "address": "/Terms/Identifiers/"}], "history-of-lean": [{"id": "history-of-lean", "data": {"title": "History", "shortTitle": null, "sectionNum": "1.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Introduction", "shortTitle": null, "number": "1"}, {"title": "History", "shortTitle": null, "number": "1"}]}, "address": "/Introduction/"}], "hiding-terms-in-proof-states": [{"id": "hiding-terms-in-proof-states", "data": {"title": "Hiding Proofs and Large Terms", "shortTitle": null, "sectionNum": "13.2.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Tactic Proofs", "shortTitle": null, "number": "13"}, {"title": "Reading Proof States", "shortTitle": null, "number": "2"}, {"title": "Hiding Proofs and Large Terms", "shortTitle": null, "number": "1"}]}, "address": "/Tactic-Proofs/Reading-Proof-States/"}], "hash-synth": [{"id": "hash-synth", "data": {"title": "Synthesizing Instances", "shortTitle": null, "sectionNum": "3.4.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Interacting with Lean", "shortTitle": null, "number": "3"}, {"title": "Synthesizing Instances", "shortTitle": null, "number": "4"}]}, "address": "/Interacting-with-Lean/"}], "hash-reduce": [{"id": "hash-reduce", "data": {"title": "Reducing Terms", "shortTitle": null, "sectionNum": "3.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Interacting with Lean", "shortTitle": null, "number": "3"}, {"title": "Reducing Terms", "shortTitle": null, "number": "2"}]}, "address": "/Interacting-with-Lean/"}], "hash-print": [{"id": "hash-print", "data": {"title": "Querying the Context", "shortTitle": null, "sectionNum": "3.5.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Interacting with Lean", "shortTitle": null, "number": "3"}, {"title": "Querying the Context", "shortTitle": null, "number": "5"}]}, "address": "/Interacting-with-Lean/"}], "hash-guard_msgs": [{"id": "hash-guard_msgs", "data": {"title": "Testing Output with #guard_msgs", "shortTitle": null, "sectionNum": "3.6.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Interacting with Lean", "shortTitle": null, "number": "3"}, {"title": "Testing Output with #guard_msgs", "shortTitle": null, "number": "6"}]}, "address": "/Interacting-with-Lean/"}], "hash-eval": [{"id": "hash-eval", "data": {"title": "Evaluating Terms", "shortTitle": null, "sectionNum": "3.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Interacting with Lean", "shortTitle": null, "number": "3"}, {"title": "Evaluating Terms", "shortTitle": null, "number": "1"}]}, "address": "/Interacting-with-Lean/"}], "hash-check": [{"id": "hash-check", "data": {"title": "Checking Types", "shortTitle": null, "sectionNum": "3.3.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Interacting with Lean", "shortTitle": null, "number": "3"}, {"title": "Checking Types", "shortTitle": null, "number": "3"}]}, "address": "/Interacting-with-Lean/"}], "grind-tactic": [{"id": "grind-tactic", "data": {"title": "The grind tactic", "shortTitle": null, "sectionNum": "17.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "The grind tactic", "shortTitle": null, "number": "17"}]}, "address": "/The--grind--tactic/"}], "grind-split": [{"id": "grind-split", "data": {"title": "Case Analysis", "shortTitle": null, "sectionNum": "17.5.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "The grind tactic", "shortTitle": null, "number": "17"}, {"title": "Case Analysis", "shortTitle": null, "number": "5"}]}, "address": "/The--grind--tactic/Case-Analysis/"}], "grind-ring-field": [{"id": "grind-ring-field", "data": {"title": "Fields", "shortTitle": null, "sectionNum": "17.8.1.1.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "The grind tactic", "shortTitle": null, "number": "17"}, {"title": "Algebraic Solver (Commutative Rings, Fields)", "shortTitle": null, "number": "8"}, {"title": "Solver Type Classes", "shortTitle": null, "number": "1"}, {"title": "Algebraic Structures", "shortTitle": null, "number": "1"}, {"title": "Fields", "shortTitle": null, "number": "1"}]}, "address": "/The--grind--tactic/Algebraic-Solver-_LPAR_Commutative-Rings___-Fields_RPAR_/"}], "grind-ring-classes": [{"id": "grind-ring-classes", "data": {"title": "Solver Type Classes", "shortTitle": null, "sectionNum": "17.8.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "The grind tactic", "shortTitle": null, "number": "17"}, {"title": "Algebraic Solver (Commutative Rings, Fields)", "shortTitle": null, "number": "8"}, {"title": "Solver Type Classes", "shortTitle": null, "number": "1"}]}, "address": "/The--grind--tactic/Algebraic-Solver-_LPAR_Commutative-Rings___-Fields_RPAR_/"}], "grind-ring": [{"id": "grind-ring", "data": {"title": "Algebraic Solver (Commutative Rings, Fields)", "shortTitle": null, "sectionNum": "17.8.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "The grind tactic", "shortTitle": null, "number": "17"}, {"title": "Algebraic Solver (Commutative Rings, Fields)", "shortTitle": null, "number": "8"}]}, "address": "/The--grind--tactic/Algebraic-Solver-_LPAR_Commutative-Rings___-Fields_RPAR_/"}], "grind-propagation": [{"id": "grind-propagation", "data": {"title": "Constraint Propagation", "shortTitle": null, "sectionNum": "17.4.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "The grind tactic", "shortTitle": null, "number": "17"}, {"title": "Constraint Propagation", "shortTitle": null, "number": "4"}]}, "address": "/The--grind--tactic/Constraint-Propagation/"}], "grind-linarith-classes": [{"id": "grind-linarith-classes", "data": {"title": "Supporting linarith", "shortTitle": null, "sectionNum": "17.9.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "The grind tactic", "shortTitle": null, "number": "17"}, {"title": "Linear Arithmetic Solver", "shortTitle": null, "number": "9"}, {"title": "Supporting linarith", "shortTitle": null, "number": "1"}]}, "address": "/The--grind--tactic/Linear-Arithmetic-Solver/"}], "grind-linarith": [{"id": "grind-linarith", "data": {"title": "Linear Arithmetic Solver", "shortTitle": null, "sectionNum": "17.9.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "The grind tactic", "shortTitle": null, "number": "17"}, {"title": "Linear Arithmetic Solver", "shortTitle": null, "number": "9"}]}, "address": "/The--grind--tactic/Linear-Arithmetic-Solver/"}], "grind-limits": [{"id": "grind-limits", "data": {"title": "Resource Limits", "shortTitle": null, "sectionNum": "17.6.3.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "The grind tactic", "shortTitle": null, "number": "17"}, {"title": "E‑matching", "shortTitle": null, "number": "6"}, {"title": "Resource Limits", "shortTitle": null, "number": "3"}]}, "address": "/The--grind--tactic/E___matching/"}], "grind-if-then-else-norm": [{"id": "grind-if-then-else-norm", "data": {"title": "if - then - else Normalization", "shortTitle": null, "sectionNum": "17.10.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "The grind tactic", "shortTitle": null, "number": "17"}, {"title": "Bigger Examples", "shortTitle": null, "number": "10"}, {"title": "if - then - else Normalization", "shortTitle": null, "number": "2"}]}, "address": "/The--grind--tactic/Bigger-Examples/"}], "grind-errors": [{"id": "grind-errors", "data": {"title": "Error Messages", "shortTitle": null, "sectionNum": "17.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "The grind tactic", "shortTitle": null, "number": "17"}, {"title": "Error Messages", "shortTitle": null, "number": "1"}]}, "address": "/The--grind--tactic/Error-Messages/"}], "grind-bigger-examples": [{"id": "grind-bigger-examples", "data": {"title": "Bigger Examples", "shortTitle": null, "sectionNum": "17.10.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "The grind tactic", "shortTitle": null, "number": "17"}, {"title": "Bigger Examples", "shortTitle": null, "number": "10"}]}, "address": "/The--grind--tactic/Bigger-Examples/"}], "generalized-field-notation": [{"id": "generalized-field-notation", "data": {"title": "Generalized Field Notation", "shortTitle": null, "sectionNum": "10.4.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Terms", "shortTitle": null, "number": "10"}, {"title": "Function Application", "shortTitle": null, "number": "4"}, {"title": "Generalized Field Notation", "shortTitle": null, "number": "1"}]}, "address": "/Terms/Function-Application/"}], "functions": [{"id": "functions", "data": {"title": "Functions", "shortTitle": null, "sectionNum": "4.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "The Type System", "shortTitle": null, "number": "4"}, {"title": "Functions", "shortTitle": null, "number": "1"}]}, "address": "/The-Type-System/Functions/"}], "function-types": [{"id": "function-types", "data": {"title": "Function Types", "shortTitle": null, "sectionNum": "10.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Terms", "shortTitle": null, "number": "10"}, {"title": "Function Types", "shortTitle": null, "number": "2"}]}, "address": "/Terms/Function-Types/"}], "function-terms": [{"id": "function-terms", "data": {"title": "Functions", "shortTitle": null, "sectionNum": "10.3.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Terms", "shortTitle": null, "number": "10"}, {"title": "Functions", "shortTitle": null, "number": "3"}]}, "address": "/Terms/Functions/"}], "function-extensionality": [{"id": "function-extensionality", "data": {"title": "Extensionality", "shortTitle": null, "sectionNum": "4.1.3.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "The Type System", "shortTitle": null, "number": "4"}, {"title": "Functions", "shortTitle": null, "number": "1"}, {"title": "Extensionality", "shortTitle": null, "number": "3"}]}, "address": "/The-Type-System/Functions/"}], "function-application": [{"id": "function-application", "data": {"title": "Function Application", "shortTitle": null, "sectionNum": "10.4.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Terms", "shortTitle": null, "number": "10"}, {"title": "Function Application", "shortTitle": null, "number": "4"}]}, "address": "/Terms/Function-Application/"}], "function-api-properties": [{"id": "function-api-properties", "data": {"title": "Properties", "shortTitle": null, "sectionNum": "4.1.5.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "The Type System", "shortTitle": null, "number": "4"}, {"title": "Functions", "shortTitle": null, "number": "1"}, {"title": "API Reference", "shortTitle": null, "number": "5"}, {"title": "Properties", "shortTitle": null, "number": "1"}]}, "address": "/The-Type-System/Functions/"}], "function-api": [{"id": "function-api", "data": {"title": "API Reference", "shortTitle": null, "sectionNum": "4.1.5.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "The Type System", "shortTitle": null, "number": "4"}, {"title": "Functions", "shortTitle": null, "number": "1"}, {"title": "API Reference", "shortTitle": null, "number": "5"}]}, "address": "/The-Type-System/Functions/"}], "fun-coercion": [{"id": "fun-coercion", "data": {"title": "Coercing to Function Types", "shortTitle": null, "sectionNum": "12.4.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Coercions", "shortTitle": null, "number": "12"}, {"title": "Coercing to Function Types", "shortTitle": null, "number": "4"}]}, "address": "/Coercions/Coercing-to-Function-Types/"}], "format-repr": [{"id": "format-repr", "data": {"title": "Formatted Output", "shortTitle": null, "sectionNum": "3.7.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Interacting with Lean", "shortTitle": null, "number": "3"}, {"title": "Formatted Output", "shortTitle": null, "number": "7"}]}, "address": "/Interacting-with-Lean/"}], "format-render": [{"id": "format-render", "data": {"title": "Rendering", "shortTitle": null, "sectionNum": "3.7.1.6.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Interacting with Lean", "shortTitle": null, "number": "3"}, {"title": "Formatted Output", "shortTitle": null, "number": "7"}, {"title": "Format", "shortTitle": null, "number": "1"}, {"title": "Rendering", "shortTitle": null, "number": "6"}]}, "address": "/Interacting-with-Lean/"}], "format-join": [{"id": "format-join", "data": {"title": "Sequences", "shortTitle": null, "sectionNum": "3.7.1.3.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Interacting with Lean", "shortTitle": null, "number": "3"}, {"title": "Formatted Output", "shortTitle": null, "number": "7"}, {"title": "Format", "shortTitle": null, "number": "1"}, {"title": "Sequences", "shortTitle": null, "number": "3"}]}, "address": "/Interacting-with-Lean/"}], "format-indent": [{"id": "format-indent", "data": {"title": "Indentation", "shortTitle": null, "sectionNum": "3.7.1.4.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Interacting with Lean", "shortTitle": null, "number": "3"}, {"title": "Formatted Output", "shortTitle": null, "number": "7"}, {"title": "Format", "shortTitle": null, "number": "1"}, {"title": "Indentation", "shortTitle": null, "number": "4"}]}, "address": "/Interacting-with-Lean/"}], "format-empty": [{"id": "format-empty", "data": {"title": "Empty Documents", "shortTitle": null, "sectionNum": "3.7.1.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Interacting with Lean", "shortTitle": null, "number": "3"}, {"title": "Formatted Output", "shortTitle": null, "number": "7"}, {"title": "Format", "shortTitle": null, "number": "1"}, {"title": "Empty Documents", "shortTitle": null, "number": "2"}]}, "address": "/Interacting-with-Lean/"}], "format-brackets": [{"id": "format-brackets", "data": {"title": "Brackets and Parentheses", "shortTitle": null, "sectionNum": "3.7.1.5.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Interacting with Lean", "shortTitle": null, "number": "3"}, {"title": "Formatted Output", "shortTitle": null, "number": "7"}, {"title": "Format", "shortTitle": null, "number": "1"}, {"title": "Brackets and Parentheses", "shortTitle": null, "number": "5"}]}, "address": "/Interacting-with-Lean/"}], "format-api": [{"id": "format-api", "data": {"title": "Documents", "shortTitle": null, "sectionNum": "3.7.1.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Interacting with Lean", "shortTitle": null, "number": "3"}, {"title": "Formatted Output", "shortTitle": null, "number": "7"}, {"title": "Format", "shortTitle": null, "number": "1"}, {"title": "Documents", "shortTitle": null, "number": "1"}]}, "address": "/Interacting-with-Lean/"}], "fixed-ints": [{"id": "fixed-ints", "data": {"title": "Fixed-Precision Integers", "shortTitle": null, "sectionNum": "20.4.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Fixed-Precision Integers", "shortTitle": null, "number": "4"}]}, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "fixed-int-runtime": [{"id": "fixed-int-runtime", "data": {"title": "Run-Time Representation", "shortTitle": null, "sectionNum": "20.4.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Fixed-Precision Integers", "shortTitle": null, "number": "4"}, {"title": "Run-Time Representation", "shortTitle": null, "number": "2"}]}, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "fixed-int-comparisons": [{"id": "fixed-int-comparisons", "data": {"title": "Comparisons", "shortTitle": null, "sectionNum": "20.4.4.4.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Fixed-Precision Integers", "shortTitle": null, "number": "4"}, {"title": "API Reference", "shortTitle": null, "number": "4"}, {"title": "Comparisons", "shortTitle": null, "number": "4"}]}, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "fixed-int-arithmetic": [{"id": "fixed-int-arithmetic", "data": {"title": "Arithmetic", "shortTitle": null, "sectionNum": "20.4.4.5.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Fixed-Precision Integers", "shortTitle": null, "number": "4"}, {"title": "API Reference", "shortTitle": null, "number": "4"}, {"title": "Arithmetic", "shortTitle": null, "number": "5"}]}, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "files": [{"id": "files", "data": {"title": "Source Files and Modules", "shortTitle": null, "sectionNum": "5.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Source Files and Modules", "shortTitle": null, "number": "5"}]}, "address": "/Source-Files-and-Modules/"}], "ffi-types": [{"id": "ffi-types", "data": {"title": "Translating Types from Lean to C", "shortTitle": null, "sectionNum": "23.4.1.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Run-Time Code", "shortTitle": null, "number": "23"}, {"title": "Foreign Function Interface", "shortTitle": null, "number": "4"}, {"title": "The Lean ABI", "shortTitle": null, "number": "1"}, {"title": "Translating Types from Lean to C", "shortTitle": null, "number": "1"}]}, "address": "/Run-Time-Code/Foreign-Function-Interface/"}], "ffi-initialization": [{"id": "ffi-initialization", "data": {"title": "Initialization", "shortTitle": null, "sectionNum": "23.4.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Run-Time Code", "shortTitle": null, "number": "23"}, {"title": "Foreign Function Interface", "shortTitle": null, "number": "4"}, {"title": "Initialization", "shortTitle": null, "number": "2"}]}, "address": "/Run-Time-Code/Foreign-Function-Interface/"}], "ffi-borrowing": [{"id": "ffi-borrowing", "data": {"title": "Borrowing", "shortTitle": null, "sectionNum": "23.4.1.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Run-Time Code", "shortTitle": null, "number": "23"}, {"title": "Foreign Function Interface", "shortTitle": null, "number": "4"}, {"title": "The Lean ABI", "shortTitle": null, "number": "1"}, {"title": "Borrowing", "shortTitle": null, "number": "2"}]}, "address": "/Run-Time-Code/Foreign-Function-Interface/"}], "ffi": [{"id": "ffi", "data": {"title": "Foreign Function Interface", "shortTitle": null, "sectionNum": "23.4.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Run-Time Code", "shortTitle": null, "number": "23"}, {"title": "Foreign Function Interface", "shortTitle": null, "number": "4"}]}, "address": "/Run-Time-Code/Foreign-Function-Interface/"}], "exception-monads": [{"id": "exception-monads", "data": {"title": "Exceptions", "shortTitle": null, "sectionNum": "14.5.7.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Functors, Monads and do -Notation", "shortTitle": null, "number": "14"}, {"title": "Varieties of Monads", "shortTitle": null, "number": "5"}, {"title": "Exceptions", "shortTitle": null, "number": "7"}]}, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "example-inductive-types": [{"id": "example-inductive-types", "data": {"title": "Example Inductive Types", "shortTitle": null, "sectionNum": "4.4.1.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "The Type System", "shortTitle": null, "number": "4"}, {"title": "Inductive Types", "shortTitle": null, "number": "4"}, {"title": "Inductive Type Declarations", "shortTitle": null, "number": "1"}, {"title": "Example Inductive Types", "shortTitle": null, "number": "2"}]}, "address": "/The-Type-System/Inductive-Types/"}], "example-boxes": [{"id": "example-boxes", "data": {"title": "Examples", "shortTitle": null, "sectionNum": "1.2.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Introduction", "shortTitle": null, "number": "1"}, {"title": "Typographical Conventions", "shortTitle": null, "number": "2"}, {"title": "Examples", "shortTitle": null, "number": "2"}]}, "address": "/Introduction/"}], "equivalence-relations": [{"id": "equivalence-relations", "data": {"title": "Equivalence Relations", "shortTitle": null, "sectionNum": "4.5.3.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "The Type System", "shortTitle": null, "number": "4"}, {"title": "Quotients", "shortTitle": null, "number": "5"}, {"title": "Equivalence Relations", "shortTitle": null, "number": "3"}]}, "address": "/The-Type-System/Quotients/"}], "empty": [{"id": "empty", "data": {"title": "The Empty Type", "shortTitle": null, "sectionNum": "20.10.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "The Empty Type", "shortTitle": null, "number": "10"}]}, "address": "/Basic-Types/The-Empty-Type/"}], "elan-toolchain-versions": [{"id": "elan-toolchain-versions", "data": {"title": "Selecting Toolchains", "shortTitle": null, "sectionNum": "24.2.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Build Tools and Distribution", "shortTitle": null, "number": "24"}, {"title": "Managing Toolchains with Elan", "shortTitle": null, "number": "2"}, {"title": "Selecting Toolchains", "shortTitle": null, "number": "1"}]}, "address": "/Build-Tools-and-Distribution/Managing-Toolchains-with-Elan/"}], "elan-toolchain-config": [{"id": "elan-toolchain-config", "data": {"title": "Determining the Current Toolchain", "shortTitle": null, "sectionNum": "24.2.1.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Build Tools and Distribution", "shortTitle": null, "number": "24"}, {"title": "Managing Toolchains with Elan", "shortTitle": null, "number": "2"}, {"title": "Selecting Toolchains", "shortTitle": null, "number": "1"}, {"title": "Determining the Current Toolchain", "shortTitle": null, "number": "2"}]}, "address": "/Build-Tools-and-Distribution/Managing-Toolchains-with-Elan/"}], "elan-toolchain": [{"id": "elan-toolchain", "data": {"title": "Managing Installed Toolchains", "shortTitle": null, "sectionNum": "24.2.3.3.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Build Tools and Distribution", "shortTitle": null, "number": "24"}, {"title": "Managing Toolchains with Elan", "shortTitle": null, "number": "2"}, {"title": "Command-Line Interface", "shortTitle": null, "number": "3"}, {"title": "Managing Installed Toolchains", "shortTitle": null, "number": "3"}]}, "address": "/Build-Tools-and-Distribution/Managing-Toolchains-with-Elan/"}], "elan-show": [{"id": "elan-show", "data": {"title": "Querying Toolchains", "shortTitle": null, "sectionNum": "24.2.3.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Build Tools and Distribution", "shortTitle": null, "number": "24"}, {"title": "Managing Toolchains with Elan", "shortTitle": null, "number": "2"}, {"title": "Command-Line Interface", "shortTitle": null, "number": "3"}, {"title": "Querying Toolchains", "shortTitle": null, "number": "1"}]}, "address": "/Build-Tools-and-Distribution/Managing-Toolchains-with-Elan/"}], "elan-self": [{"id": "elan-self", "data": {"title": "Managing Elan", "shortTitle": null, "sectionNum": "24.2.3.6.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Build Tools and Distribution", "shortTitle": null, "number": "24"}, {"title": "Managing Toolchains with Elan", "shortTitle": null, "number": "2"}, {"title": "Command-Line Interface", "shortTitle": null, "number": "3"}, {"title": "Managing Elan", "shortTitle": null, "number": "6"}]}, "address": "/Build-Tools-and-Distribution/Managing-Toolchains-with-Elan/"}], "elan-run": [{"id": "elan-run", "data": {"title": "Running Tools and Commands", "shortTitle": null, "sectionNum": "24.2.3.5.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Build Tools and Distribution", "shortTitle": null, "number": "24"}, {"title": "Managing Toolchains with Elan", "shortTitle": null, "number": "2"}, {"title": "Command-Line Interface", "shortTitle": null, "number": "3"}, {"title": "Running Tools and Commands", "shortTitle": null, "number": "5"}]}, "address": "/Build-Tools-and-Distribution/Managing-Toolchains-with-Elan/"}], "elan-override": [{"id": "elan-override", "data": {"title": "Managing Directory Overrides", "shortTitle": null, "sectionNum": "24.2.3.4.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Build Tools and Distribution", "shortTitle": null, "number": "24"}, {"title": "Managing Toolchains with Elan", "shortTitle": null, "number": "2"}, {"title": "Command-Line Interface", "shortTitle": null, "number": "3"}, {"title": "Managing Directory Overrides", "shortTitle": null, "number": "4"}]}, "address": "/Build-Tools-and-Distribution/Managing-Toolchains-with-Elan/"}], "elan-dir": [{"id": "elan-dir", "data": {"title": "Toolchain Locations", "shortTitle": null, "sectionNum": "24.2.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Build Tools and Distribution", "shortTitle": null, "number": "24"}, {"title": "Managing Toolchains with Elan", "shortTitle": null, "number": "2"}, {"title": "Toolchain Locations", "shortTitle": null, "number": "2"}]}, "address": "/Build-Tools-and-Distribution/Managing-Toolchains-with-Elan/"}], "elan-default": [{"id": "elan-default", "data": {"title": "Setting the Default Toolchain", "shortTitle": null, "sectionNum": "24.2.3.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Build Tools and Distribution", "shortTitle": null, "number": "24"}, {"title": "Managing Toolchains with Elan", "shortTitle": null, "number": "2"}, {"title": "Command-Line Interface", "shortTitle": null, "number": "3"}, {"title": "Setting the Default Toolchain", "shortTitle": null, "number": "2"}]}, "address": "/Build-Tools-and-Distribution/Managing-Toolchains-with-Elan/"}], "elan-cli": [{"id": "elan-cli", "data": {"title": "Command-Line Interface", "shortTitle": null, "sectionNum": "24.2.3.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Build Tools and Distribution", "shortTitle": null, "number": "24"}, {"title": "Managing Toolchains with Elan", "shortTitle": null, "number": "2"}, {"title": "Command-Line Interface", "shortTitle": null, "number": "3"}]}, "address": "/Build-Tools-and-Distribution/Managing-Toolchains-with-Elan/"}], "elan-channels": [{"id": "elan-channels", "data": {"title": "Toolchain Identifiers", "shortTitle": null, "sectionNum": "24.2.1.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Build Tools and Distribution", "shortTitle": null, "number": "24"}, {"title": "Managing Toolchains with Elan", "shortTitle": null, "number": "2"}, {"title": "Selecting Toolchains", "shortTitle": null, "number": "1"}, {"title": "Toolchain Identifiers", "shortTitle": null, "number": "1"}]}, "address": "/Build-Tools-and-Distribution/Managing-Toolchains-with-Elan/"}], "elan": [{"id": "elan", "data": {"title": "Managing Toolchains with Elan", "shortTitle": null, "sectionNum": "24.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Build Tools and Distribution", "shortTitle": null, "number": "24"}, {"title": "Managing Toolchains with Elan", "shortTitle": null, "number": "2"}]}, "address": "/Build-Tools-and-Distribution/Managing-Toolchains-with-Elan/"}], "elaborators": [{"id": "elaborators", "data": {"title": "Elaborators", "shortTitle": null, "sectionNum": "22.6.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Notations and Macros", "shortTitle": null, "number": "22"}, {"title": "Elaborators", "shortTitle": null, "number": "6"}]}, "address": "/Notations-and-Macros/Elaborators/"}], "elaboration-results": [{"id": "elaboration-results", "data": {"title": "Elaboration Results", "shortTitle": null, "sectionNum": "2.4.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Elaboration and Compilation", "shortTitle": null, "number": "2"}, {"title": "Elaboration Results", "shortTitle": null, "number": "4"}]}, "address": "/Elaboration-and-Compilation/"}], "elab-as-course-of-values": [{"id": "elab-as-course-of-values", "data": {"title": "Elaboration Using Course-of-Values Recursion", "shortTitle": null, "sectionNum": "7.6.2.4.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Definitions", "shortTitle": null, "number": "7"}, {"title": "Recursive Definitions", "shortTitle": null, "number": "6"}, {"title": "Structural Recursion", "shortTitle": null, "number": "2"}, {"title": "Elaboration Using Course-of-Values Recursion", "shortTitle": null, "number": "4"}]}, "address": "/Definitions/Recursive-Definitions/"}], "early-return": [{"id": "early-return", "data": {"title": "Early Return", "shortTitle": null, "sectionNum": "14.3.2.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Functors, Monads and do -Notation", "shortTitle": null, "number": "14"}, {"title": "Syntax", "shortTitle": null, "number": "3"}, {"title": "do -Notation", "shortTitle": null, "number": "2"}, {"title": "Early Return", "shortTitle": null, "number": "2"}]}, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}], "e-matching-patterns": [{"id": "e-matching-patterns", "data": {"title": "Patterns", "shortTitle": null, "sectionNum": "17.6.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "The grind tactic", "shortTitle": null, "number": "17"}, {"title": "E‑matching", "shortTitle": null, "number": "6"}, {"title": "Patterns", "shortTitle": null, "number": "1"}]}, "address": "/The--grind--tactic/E___matching/"}], "e-matching": [{"id": "e-matching", "data": {"title": "E‑matching", "shortTitle": null, "sectionNum": "17.6.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "The grind tactic", "shortTitle": null, "number": "17"}, {"title": "E‑matching", "shortTitle": null, "number": "6"}]}, "address": "/The--grind--tactic/E___matching/"}], "do-notation": [{"id": "do-notation", "data": {"title": "do -Notation", "shortTitle": null, "sectionNum": "14.3.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Functors, Monads and do -Notation", "shortTitle": null, "number": "14"}, {"title": "Syntax", "shortTitle": null, "number": "3"}, {"title": "do -Notation", "shortTitle": null, "number": "2"}]}, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}], "do-control-structures": [{"id": "do-control-structures", "data": {"title": "Control Structures", "shortTitle": null, "sectionNum": "14.3.2.4.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Functors, Monads and do -Notation", "shortTitle": null, "number": "14"}, {"title": "Syntax", "shortTitle": null, "number": "3"}, {"title": "do -Notation", "shortTitle": null, "number": "2"}, {"title": "Control Structures", "shortTitle": null, "number": "4"}]}, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}], "deriving-instances": [{"id": "deriving-instances", "data": {"title": "Deriving Instances", "shortTitle": null, "sectionNum": "11.4.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Type Classes", "shortTitle": null, "number": "11"}, {"title": "Deriving Instances", "shortTitle": null, "number": "4"}]}, "address": "/Type-Classes/Deriving-Instances/"}], "deriving-handlers": [{"id": "deriving-handlers", "data": {"title": "Deriving Handlers", "shortTitle": null, "sectionNum": "11.4.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Type Classes", "shortTitle": null, "number": "11"}, {"title": "Deriving Instances", "shortTitle": null, "number": "4"}, {"title": "Deriving Handlers", "shortTitle": null, "number": "1"}]}, "address": "/Type-Classes/Deriving-Instances/"}], "dependency-licenses": [{"id": "dependency-licenses", "data": {"title": "Open-Source Licenses", "shortTitle": null, "sectionNum": null, "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Introduction", "shortTitle": null, "number": "1"}, {"title": "Open-Source Licenses", "shortTitle": null, "number": null}]}, "address": "/Introduction/"}], "delaborators": [{"id": "delaborators", "data": {"title": "Delaborators", "shortTitle": null, "sectionNum": "22.7.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Notations and Macros", "shortTitle": null, "number": "22"}, {"title": "Extending Lean's Output", "shortTitle": null, "number": "7"}, {"title": "Delaborators", "shortTitle": null, "number": "2"}]}, "address": "/Notations-and-Macros/Extending-Lean___s-Output/"}], "definitions": [{"id": "definitions", "data": {"title": "Definitions", "shortTitle": null, "sectionNum": "7.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Definitions", "shortTitle": null, "number": "7"}]}, "address": "/Definitions/"}], "defining-macros": [{"id": "defining-macros", "data": {"title": "Defining Macros", "shortTitle": null, "sectionNum": "22.5.5.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Notations and Macros", "shortTitle": null, "number": "22"}, {"title": "Macros", "shortTitle": null, "number": "5"}, {"title": "Defining Macros", "shortTitle": null, "number": "5"}]}, "address": "/Notations-and-Macros/Macros/"}], "default-instances": [{"id": "default-instances", "data": {"title": "Default Instances", "shortTitle": null, "sectionNum": "11.2.4.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Type Classes", "shortTitle": null, "number": "11"}, {"title": "Instance Declarations", "shortTitle": null, "number": "2"}, {"title": "Default Instances", "shortTitle": null, "number": "4"}]}, "address": "/Type-Classes/Instance-Declarations/"}], "default-instance-synth": [{"id": "default-instance-synth", "data": {"title": "Default Instances", "shortTitle": null, "sectionNum": "11.3.6.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Type Classes", "shortTitle": null, "number": "11"}, {"title": "Instance Synthesis", "shortTitle": null, "number": "3"}, {"title": "Default Instances", "shortTitle": null, "number": "6"}]}, "address": "/Type-Classes/Instance-Synthesis/"}], "declaration-modifiers": [{"id": "declaration-modifiers", "data": {"title": "Modifiers", "shortTitle": null, "sectionNum": "7.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Definitions", "shortTitle": null, "number": "7"}, {"title": "Modifiers", "shortTitle": null, "number": "1"}]}, "address": "/Definitions/Modifiers/"}], "decidable-propositions": [{"id": "decidable-propositions", "data": {"title": "Decidability", "shortTitle": null, "sectionNum": "11.5.4.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Type Classes", "shortTitle": null, "number": "11"}, {"title": "Basic Classes", "shortTitle": null, "number": "5"}, {"title": "Decidability", "shortTitle": null, "number": "4"}]}, "address": "/Type-Classes/Basic-Classes/"}], "cutsat-qlia": [{"id": "cutsat-qlia", "data": {"title": "Rational Solutions", "shortTitle": null, "sectionNum": "17.7.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "The grind tactic", "shortTitle": null, "number": "17"}, {"title": "Linear Integer Arithmetic", "shortTitle": null, "number": "7"}, {"title": "Rational Solutions", "shortTitle": null, "number": "1"}]}, "address": "/The--grind--tactic/Linear-Integer-Arithmetic/"}], "cutsat-mbtc": [{"id": "cutsat-mbtc", "data": {"title": "Propagating Information", "shortTitle": null, "sectionNum": "17.7.5.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "The grind tactic", "shortTitle": null, "number": "17"}, {"title": "Linear Integer Arithmetic", "shortTitle": null, "number": "7"}, {"title": "Propagating Information", "shortTitle": null, "number": "5"}]}, "address": "/The--grind--tactic/Linear-Integer-Arithmetic/"}], "cutsat-ToInt": [{"id": "cutsat-ToInt", "data": {"title": "Other Types", "shortTitle": null, "sectionNum": "17.7.6.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "The grind tactic", "shortTitle": null, "number": "17"}, {"title": "Linear Integer Arithmetic", "shortTitle": null, "number": "7"}, {"title": "Other Types", "shortTitle": null, "number": "6"}]}, "address": "/The--grind--tactic/Linear-Integer-Arithmetic/"}], "cutsat": [{"id": "cutsat", "data": {"title": "Linear Integer Arithmetic", "shortTitle": null, "sectionNum": "17.7.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "The grind tactic", "shortTitle": null, "number": "17"}, {"title": "Linear Integer Arithmetic", "shortTitle": null, "number": "7"}]}, "address": "/The--grind--tactic/Linear-Integer-Arithmetic/"}], "custom-tactics": [{"id": "custom-tactics", "data": {"title": "Custom Tactics", "shortTitle": null, "sectionNum": "13.8.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Tactic Proofs", "shortTitle": null, "number": "13"}, {"title": "Custom Tactics", "shortTitle": null, "number": "8"}]}, "address": "/Tactic-Proofs/Custom-Tactics/"}], "currying": [{"id": "currying", "data": {"title": "Currying", "shortTitle": null, "sectionNum": "4.1.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "The Type System", "shortTitle": null, "number": "4"}, {"title": "Functions", "shortTitle": null, "number": "1"}, {"title": "Currying", "shortTitle": null, "number": "2"}]}, "address": "/The-Type-System/Functions/"}], "conv-simp": [{"id": "conv-simp", "data": {"title": "Simplification", "shortTitle": null, "sectionNum": "13.6.4.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Tactic Proofs", "shortTitle": null, "number": "13"}, {"title": "Targeted Rewriting with conv", "shortTitle": null, "number": "6"}, {"title": "Changing the Goal", "shortTitle": null, "number": "4"}, {"title": "Simplification", "shortTitle": null, "number": "2"}]}, "address": "/Tactic-Proofs/Targeted-Rewriting-with--conv/"}], "conv-rw": [{"id": "conv-rw", "data": {"title": "Rewriting", "shortTitle": null, "sectionNum": "13.6.4.3.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Tactic Proofs", "shortTitle": null, "number": "13"}, {"title": "Targeted Rewriting with conv", "shortTitle": null, "number": "6"}, {"title": "Changing the Goal", "shortTitle": null, "number": "4"}, {"title": "Rewriting", "shortTitle": null, "number": "3"}]}, "address": "/Tactic-Proofs/Targeted-Rewriting-with--conv/"}], "conv-reduction": [{"id": "conv-reduction", "data": {"title": "Reduction", "shortTitle": null, "sectionNum": "13.6.4.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Tactic Proofs", "shortTitle": null, "number": "13"}, {"title": "Targeted Rewriting with conv", "shortTitle": null, "number": "6"}, {"title": "Changing the Goal", "shortTitle": null, "number": "4"}, {"title": "Reduction", "shortTitle": null, "number": "1"}]}, "address": "/Tactic-Proofs/Targeted-Rewriting-with--conv/"}], "conv-other": [{"id": "conv-other", "data": {"title": "Other", "shortTitle": null, "sectionNum": "13.6.7.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Tactic Proofs", "shortTitle": null, "number": "13"}, {"title": "Targeted Rewriting with conv", "shortTitle": null, "number": "6"}, {"title": "Other", "shortTitle": null, "number": "7"}]}, "address": "/Tactic-Proofs/Targeted-Rewriting-with--conv/"}], "conv-nested": [{"id": "conv-nested", "data": {"title": "Nested Tactics", "shortTitle": null, "sectionNum": "13.6.5.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Tactic Proofs", "shortTitle": null, "number": "13"}, {"title": "Targeted Rewriting with conv", "shortTitle": null, "number": "6"}, {"title": "Nested Tactics", "shortTitle": null, "number": "5"}]}, "address": "/Tactic-Proofs/Targeted-Rewriting-with--conv/"}], "conv-nav": [{"id": "conv-nav", "data": {"title": "Navigation", "shortTitle": null, "sectionNum": "13.6.3.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Tactic Proofs", "shortTitle": null, "number": "13"}, {"title": "Targeted Rewriting with conv", "shortTitle": null, "number": "6"}, {"title": "Navigation", "shortTitle": null, "number": "3"}]}, "address": "/Tactic-Proofs/Targeted-Rewriting-with--conv/"}], "conv-goals": [{"id": "conv-goals", "data": {"title": "Goal Selection", "shortTitle": null, "sectionNum": "13.6.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Tactic Proofs", "shortTitle": null, "number": "13"}, {"title": "Targeted Rewriting with conv", "shortTitle": null, "number": "6"}, {"title": "Goal Selection", "shortTitle": null, "number": "2"}]}, "address": "/Tactic-Proofs/Targeted-Rewriting-with--conv/"}], "conv-debug": [{"id": "conv-debug", "data": {"title": "Debugging Utilities", "shortTitle": null, "sectionNum": "13.6.6.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Tactic Proofs", "shortTitle": null, "number": "13"}, {"title": "Targeted Rewriting with conv", "shortTitle": null, "number": "6"}, {"title": "Debugging Utilities", "shortTitle": null, "number": "6"}]}, "address": "/Tactic-Proofs/Targeted-Rewriting-with--conv/"}], "conv-control": [{"id": "conv-control", "data": {"title": "Control Structures", "shortTitle": null, "sectionNum": "13.6.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Tactic Proofs", "shortTitle": null, "number": "13"}, {"title": "Targeted Rewriting with conv", "shortTitle": null, "number": "6"}, {"title": "Control Structures", "shortTitle": null, "number": "1"}]}, "address": "/Tactic-Proofs/Targeted-Rewriting-with--conv/"}], "conv-change": [{"id": "conv-change", "data": {"title": "Changing the Goal", "shortTitle": null, "sectionNum": "13.6.4.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Tactic Proofs", "shortTitle": null, "number": "13"}, {"title": "Targeted Rewriting with conv", "shortTitle": null, "number": "6"}, {"title": "Changing the Goal", "shortTitle": null, "number": "4"}]}, "address": "/Tactic-Proofs/Targeted-Rewriting-with--conv/"}], "conv": [{"id": "conv", "data": {"title": "Targeted Rewriting with conv", "shortTitle": null, "sectionNum": "13.6.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Tactic Proofs", "shortTitle": null, "number": "13"}, {"title": "Targeted Rewriting with conv", "shortTitle": null, "number": "6"}]}, "address": "/Tactic-Proofs/Targeted-Rewriting-with--conv/"}], "congruence-closure": [{"id": "congruence-closure", "data": {"title": "Congruence Closure", "shortTitle": null, "sectionNum": "17.3.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "The grind tactic", "shortTitle": null, "number": "17"}, {"title": "Congruence Closure", "shortTitle": null, "number": "3"}]}, "address": "/The--grind--tactic/Congruence-Closure/"}], "concurrency": [{"id": "concurrency", "data": {"title": "Tasks and Threads", "shortTitle": null, "sectionNum": "15.11.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "IO", "shortTitle": null, "number": "15"}, {"title": "Tasks and Threads", "shortTitle": null, "number": "11"}]}, "address": "/IO/Tasks-and-Threads/"}], "comments": [{"id": "comments", "data": {"title": "Comments", "shortTitle": null, "sectionNum": "5.2.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Source Files and Modules", "shortTitle": null, "number": "5"}, {"title": "Concrete Syntax", "shortTitle": null, "number": "2"}, {"title": "Comments", "shortTitle": null, "number": "2"}]}, "address": "/Source-Files-and-Modules/"}], "commands": [{"id": "commands", "data": {"title": "Commands", "shortTitle": null, "sectionNum": "5.3.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Source Files and Modules", "shortTitle": null, "number": "5"}, {"title": "Structure", "shortTitle": null, "number": "3"}, {"title": "Commands", "shortTitle": null, "number": "2"}]}, "address": "/Source-Files-and-Modules/"}], "coercions": [{"id": "coercions", "data": {"title": "Coercions", "shortTitle": null, "sectionNum": "12.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Coercions", "shortTitle": null, "number": "12"}]}, "address": "/Coercions/"}], "coercion-unfold-impl": [{"id": "coercion-unfold-impl", "data": {"title": "Unfolding Coercions", "shortTitle": null, "sectionNum": "12.5.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Coercions", "shortTitle": null, "number": "12"}, {"title": "Implementation Details", "shortTitle": null, "number": "5"}, {"title": "Unfolding Coercions", "shortTitle": null, "number": "1"}]}, "address": "/Coercions/Implementation-Details/"}], "coercion-insertion": [{"id": "coercion-insertion", "data": {"title": "Coercion Insertion", "shortTitle": null, "sectionNum": "12.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Coercions", "shortTitle": null, "number": "12"}, {"title": "Coercion Insertion", "shortTitle": null, "number": "1"}]}, "address": "/Coercions/Coercion-Insertion/"}], "coercion-impl-details": [{"id": "coercion-impl-details", "data": {"title": "Implementation Details", "shortTitle": null, "sectionNum": "12.5.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Coercions", "shortTitle": null, "number": "12"}, {"title": "Implementation Details", "shortTitle": null, "number": "5"}]}, "address": "/Coercions/Implementation-Details/"}], "coercion-impl": [{"id": "coercion-impl", "data": {"title": "Implementing Coercions", "shortTitle": null, "sectionNum": "12.2.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Coercions", "shortTitle": null, "number": "12"}, {"title": "Coercing Between Types", "shortTitle": null, "number": "2"}, {"title": "Implementing Coercions", "shortTitle": null, "number": "1"}]}, "address": "/Coercions/Coercing-Between-Types/"}], "coercion-chain-impl": [{"id": "coercion-chain-impl", "data": {"title": "Coercion Chaining", "shortTitle": null, "sectionNum": "12.5.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Coercions", "shortTitle": null, "number": "12"}, {"title": "Implementation Details", "shortTitle": null, "number": "5"}, {"title": "Coercion Chaining", "shortTitle": null, "number": "2"}]}, "address": "/Coercions/Implementation-Details/"}], "code-samples": [{"id": "code-samples", "data": {"title": "Lean Code", "shortTitle": null, "sectionNum": "1.2.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Introduction", "shortTitle": null, "number": "1"}, {"title": "Typographical Conventions", "shortTitle": null, "number": "2"}, {"title": "Lean Code", "shortTitle": null, "number": "1"}]}, "address": "/Introduction/"}], "code-distribution": [{"id": "code-distribution", "data": {"title": "Packages, Libraries, and Targets", "shortTitle": null, "sectionNum": "5.7.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Source Files and Modules", "shortTitle": null, "number": "5"}, {"title": "Packages, Libraries, and Targets", "shortTitle": null, "number": "7"}]}, "address": "/Source-Files-and-Modules/"}], "closest-do-block": [{"id": "closest-do-block", "data": {"title": "Identifying do Blocks", "shortTitle": null, "sectionNum": "14.3.2.6.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Functors, Monads and do -Notation", "shortTitle": null, "number": "14"}, {"title": "Syntax", "shortTitle": null, "number": "3"}, {"title": "do -Notation", "shortTitle": null, "number": "2"}, {"title": "Identifying do Blocks", "shortTitle": null, "number": "6"}]}, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}], "class-output-parameters": [{"id": "class-output-parameters", "data": {"title": "Output Parameters", "shortTitle": null, "sectionNum": "11.3.5.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Type Classes", "shortTitle": null, "number": "11"}, {"title": "Instance Synthesis", "shortTitle": null, "number": "3"}, {"title": "Output Parameters", "shortTitle": null, "number": "5"}]}, "address": "/Type-Classes/Instance-Synthesis/"}], "class-inductive-instances": [{"id": "class-inductive-instances", "data": {"title": "Instances of class inductive s", "shortTitle": null, "sectionNum": "11.2.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Type Classes", "shortTitle": null, "number": "11"}, {"title": "Instance Declarations", "shortTitle": null, "number": "2"}, {"title": "Instances of class inductive s", "shortTitle": null, "number": "2"}]}, "address": "/Type-Classes/Instance-Declarations/"}], "class-abbrev": [{"id": "class-abbrev", "data": {"title": "Class Abbreviations", "shortTitle": null, "sectionNum": "11.1.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Type Classes", "shortTitle": null, "number": "11"}, {"title": "Class Declarations", "shortTitle": null, "number": "1"}, {"title": "Class Abbreviations", "shortTitle": null, "number": "2"}]}, "address": "/Type-Classes/Class-Declarations/"}], "class inductive": [{"id": "class-inductive", "data": {"title": "Sum Types as Classes", "shortTitle": null, "sectionNum": "11.1.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Type Classes", "shortTitle": null, "number": "11"}, {"title": "Class Declarations", "shortTitle": null, "number": "1"}, {"title": "Sum Types as Classes", "shortTitle": null, "number": "1"}]}, "address": "/Type-Classes/Class-Declarations/"}], "class": [{"id": "class", "data": {"title": "Class Declarations", "shortTitle": null, "sectionNum": "11.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Type Classes", "shortTitle": null, "number": "11"}, {"title": "Class Declarations", "shortTitle": null, "number": "1"}]}, "address": "/Type-Classes/Class-Declarations/"}], "char-syntax": [{"id": "char-syntax", "data": {"title": "Syntax", "shortTitle": null, "sectionNum": "20.7.3.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Characters", "shortTitle": null, "number": "7"}, {"title": "Syntax", "shortTitle": null, "number": "3"}]}, "address": "/Basic-Types/Characters/"}], "char-runtime": [{"id": "char-runtime", "data": {"title": "Run-Time Representation", "shortTitle": null, "sectionNum": "20.7.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Characters", "shortTitle": null, "number": "7"}, {"title": "Run-Time Representation", "shortTitle": null, "number": "2"}]}, "address": "/Basic-Types/Characters/"}], "char-model": [{"id": "char-model", "data": {"title": "Logical Model", "shortTitle": null, "sectionNum": "20.7.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Characters", "shortTitle": null, "number": "7"}, {"title": "Logical Model", "shortTitle": null, "number": "1"}]}, "address": "/Basic-Types/Characters/"}], "char-api-classes": [{"id": "char-api-classes", "data": {"title": "Character Classes", "shortTitle": null, "sectionNum": "20.7.4.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Characters", "shortTitle": null, "number": "7"}, {"title": "API Reference", "shortTitle": null, "number": "4"}, {"title": "Character Classes", "shortTitle": null, "number": "2"}]}, "address": "/Basic-Types/Characters/"}], "char-api": [{"id": "char-api", "data": {"title": "API Reference", "shortTitle": null, "sectionNum": "20.7.4.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Characters", "shortTitle": null, "number": "7"}, {"title": "API Reference", "shortTitle": null, "number": "4"}]}, "address": "/Basic-Types/Characters/"}], "by": [{"id": "by", "data": {"title": "Running Tactics", "shortTitle": null, "sectionNum": "13.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Tactic Proofs", "shortTitle": null, "number": "13"}, {"title": "Running Tactics", "shortTitle": null, "number": "1"}]}, "address": "/Tactic-Proofs/Running-Tactics/"}], "build-tools-and-distribution": [{"id": "build-tools-and-distribution", "data": {"title": "Build Tools and Distribution", "shortTitle": null, "sectionNum": "24.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Build Tools and Distribution", "shortTitle": null, "number": "24"}]}, "address": "/Build-Tools-and-Distribution/"}], "bracketed-parameter-syntax": [{"id": "bracketed-parameter-syntax", "data": {"title": "Bracketed Parameter Bindings", "shortTitle": null, "sectionNum": "7.2.3.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Definitions", "shortTitle": null, "number": "7"}, {"title": "Headers and Signatures", "shortTitle": null, "number": "2"}, {"title": "Bracketed Parameter Bindings", "shortTitle": null, "number": "3"}]}, "address": "/Definitions/Headers-and-Signatures/"}], "boxing": [{"id": "boxing", "data": {"title": "Boxing", "shortTitle": null, "sectionNum": "23.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Run-Time Code", "shortTitle": null, "number": "23"}, {"title": "Boxing", "shortTitle": null, "number": "1"}]}, "address": "/Run-Time-Code/Boxing/"}], "bound-variable-name-hints": [{"id": "bound-variable-name-hints", "data": {"title": "Naming Bound Variables", "shortTitle": null, "sectionNum": "13.7.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Tactic Proofs", "shortTitle": null, "number": "13"}, {"title": "Naming Bound Variables", "shortTitle": null, "number": "7"}]}, "address": "/Tactic-Proofs/Naming-Bound-Variables/"}], "basic-types": [{"id": "basic-types", "data": {"title": "Basic Types", "shortTitle": null, "sectionNum": "20.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}]}, "address": "/Basic-Types/"}], "basic-props": [{"id": "basic-props", "data": {"title": "Basic Propositions", "shortTitle": null, "sectionNum": "19.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Propositions", "shortTitle": null, "number": "19"}]}, "address": "/Basic-Propositions/"}], "basic-classes": [{"id": "basic-classes", "data": {"title": "Basic Classes", "shortTitle": null, "sectionNum": "11.5.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Type Classes", "shortTitle": null, "number": "11"}, {"title": "Basic Classes", "shortTitle": null, "number": "5"}]}, "address": "/Type-Classes/Basic-Classes/"}], "axioms": [{"id": "axioms", "data": {"title": "Axioms", "shortTitle": null, "sectionNum": "8.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Axioms", "shortTitle": null, "number": "8"}]}, "address": "/Axioms/"}], "axiom-reduction": [{"id": "axiom-reduction", "data": {"title": "Reduction", "shortTitle": null, "sectionNum": "8.3.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Axioms", "shortTitle": null, "number": "8"}, {"title": "Reduction", "shortTitle": null, "number": "3"}]}, "address": "/Axioms/"}], "axiom-declarations": [{"id": "axiom-declarations", "data": {"title": "Axiom Declarations", "shortTitle": null, "sectionNum": "8.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Axioms", "shortTitle": null, "number": "8"}, {"title": "Axiom Declarations", "shortTitle": null, "number": "1"}]}, "address": "/Axioms/"}], "axiom-consistency": [{"id": "axiom-consistency", "data": {"title": "Consistency", "shortTitle": null, "sectionNum": "8.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Axioms", "shortTitle": null, "number": "8"}, {"title": "Consistency", "shortTitle": null, "number": "2"}]}, "address": "/Axioms/"}], "automatic-toolchain-updates": [{"id": "automatic-toolchain-updates", "data": {"title": "Automatic Toolchain Updates", "shortTitle": null, "sectionNum": "24.1.2.4.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Build Tools and Distribution", "shortTitle": null, "number": "24"}, {"title": "Lake", "shortTitle": null, "number": "1"}, {"title": "Command-Line Interface", "shortTitle": null, "number": "2"}, {"title": "Automatic Toolchain Updates", "shortTitle": null, "number": "4"}]}, "address": "/Build-Tools-and-Distribution/Lake/"}], "automatic-implicit-parameters": [{"id": "automatic-implicit-parameters", "data": {"title": "Automatic Implicit Parameters", "shortTitle": null, "sectionNum": "7.2.4.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Definitions", "shortTitle": null, "number": "7"}, {"title": "Headers and Signatures", "shortTitle": null, "number": "2"}, {"title": "Automatic Implicit Parameters", "shortTitle": null, "number": "4"}]}, "address": "/Definitions/Headers-and-Signatures/"}], "attributes": [{"id": "attributes", "data": {"title": "Attributes", "shortTitle": null, "sectionNum": "9.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Attributes", "shortTitle": null, "number": "9"}]}, "address": "/Attributes/"}], "array-syntax": [{"id": "array-syntax", "data": {"title": "Syntax", "shortTitle": null, "sectionNum": "20.16.3.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Arrays", "shortTitle": null, "number": "16"}, {"title": "Syntax", "shortTitle": null, "number": "3"}]}, "address": "/Basic-Types/Arrays/"}], "array-runtime": [{"id": "array-runtime", "data": {"title": "Run-Time Representation", "shortTitle": null, "sectionNum": "20.16.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Arrays", "shortTitle": null, "number": "16"}, {"title": "Run-Time Representation", "shortTitle": null, "number": "2"}]}, "address": "/Basic-Types/Arrays/"}], "array-performance": [{"id": "array-performance", "data": {"title": "Performance Notes", "shortTitle": null, "sectionNum": "20.16.2.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Arrays", "shortTitle": null, "number": "16"}, {"title": "Run-Time Representation", "shortTitle": null, "number": "2"}, {"title": "Performance Notes", "shortTitle": null, "number": "1"}]}, "address": "/Basic-Types/Arrays/"}], "array-ffi": [{"id": "array-ffi", "data": {"title": "FFI", "shortTitle": null, "sectionNum": "20.16.6.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Arrays", "shortTitle": null, "number": "16"}, {"title": "FFI", "shortTitle": null, "number": "6"}]}, "address": "/Basic-Types/Arrays/"}], "array-api": [{"id": "array-api", "data": {"title": "API Reference", "shortTitle": null, "sectionNum": "20.16.4.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Arrays", "shortTitle": null, "number": "16"}, {"title": "API Reference", "shortTitle": null, "number": "4"}]}, "address": "/Basic-Types/Arrays/"}], "anonymous-constructor-syntax": [{"id": "anonymous-constructor-syntax", "data": {"title": "Anonymous Constructor Syntax", "shortTitle": null, "sectionNum": "4.4.1.3.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "The Type System", "shortTitle": null, "number": "4"}, {"title": "Inductive Types", "shortTitle": null, "number": "4"}, {"title": "Inductive Type Declarations", "shortTitle": null, "number": "1"}, {"title": "Anonymous Constructor Syntax", "shortTitle": null, "number": "3"}]}, "address": "/The-Type-System/Inductive-Types/"}], "Unexpanders": [{"id": "Unexpanders", "data": {"title": "Unexpanders", "shortTitle": null, "sectionNum": "22.7.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Notations and Macros", "shortTitle": null, "number": "22"}, {"title": "Extending Lean's Output", "shortTitle": null, "number": "7"}, {"title": "Unexpanders", "shortTitle": null, "number": "1"}]}, "address": "/Notations-and-Macros/Extending-Lean___s-Output/"}], "UIP": [{"id": "UIP", "data": {"title": "Uniqueness of Equality Proofs", "shortTitle": null, "sectionNum": "19.4.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Propositions", "shortTitle": null, "number": "19"}, {"title": "Propositional Equality", "shortTitle": null, "number": "4"}, {"title": "Uniqueness of Equality Proofs", "shortTitle": null, "number": "1"}]}, "address": "/Basic-Propositions/Propositional-Equality/"}], "TreeSet": [{"id": "TreeSet", "data": {"title": "Tree-Based Sets", "shortTitle": null, "sectionNum": "20.19.10.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Maps and Sets", "shortTitle": null, "number": "19"}, {"title": "Tree-Based Sets", "shortTitle": null, "number": "10"}]}, "address": "/Basic-Types/Maps-and-Sets/"}], "TreeMap": [{"id": "TreeMap", "data": {"title": "Tree-Based Maps", "shortTitle": null, "sectionNum": "20.19.8.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Maps and Sets", "shortTitle": null, "number": "19"}, {"title": "Tree-Based Maps", "shortTitle": null, "number": "8"}]}, "address": "/Basic-Types/Maps-and-Sets/"}], "Thunk-runtime": [{"id": "Thunk-runtime", "data": {"title": "Runtime Representation", "shortTitle": null, "sectionNum": "20.21.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Lazy Computations", "shortTitle": null, "number": "21"}, {"title": "Runtime Representation", "shortTitle": null, "number": "2"}]}, "address": "/Basic-Types/Lazy-Computations/"}], "Thunk-model": [{"id": "Thunk-model", "data": {"title": "Logical Model", "shortTitle": null, "sectionNum": "20.21.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Lazy Computations", "shortTitle": null, "number": "21"}, {"title": "Logical Model", "shortTitle": null, "number": "1"}]}, "address": "/Basic-Types/Lazy-Computations/"}], "Thunk-coercions": [{"id": "Thunk-coercions", "data": {"title": "Coercions", "shortTitle": null, "sectionNum": "20.21.3.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Lazy Computations", "shortTitle": null, "number": "21"}, {"title": "Coercions", "shortTitle": null, "number": "3"}]}, "address": "/Basic-Types/Lazy-Computations/"}], "Thunk-api": [{"id": "Thunk-api", "data": {"title": "API Reference", "shortTitle": null, "sectionNum": "20.21.4.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Lazy Computations", "shortTitle": null, "number": "21"}, {"title": "API Reference", "shortTitle": null, "number": "4"}]}, "address": "/Basic-Types/Lazy-Computations/"}], "Thunk": [{"id": "Thunk", "data": {"title": "Lazy Computations", "shortTitle": null, "sectionNum": "20.21.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Lazy Computations", "shortTitle": null, "number": "21"}]}, "address": "/Basic-Types/Lazy-Computations/"}], "Subtype": [{"id": "Subtype", "data": {"title": "Subtypes", "shortTitle": null, "sectionNum": "20.20.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Subtypes", "shortTitle": null, "number": "20"}]}, "address": "/Basic-Types/Subtypes/"}], "String": [{"id": "String", "data": {"title": "Strings", "shortTitle": null, "sectionNum": "20.8.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Strings", "shortTitle": null, "number": "8"}]}, "address": "/Basic-Types/Strings/"}], "ReprAtom": [{"id": "ReprAtom", "data": {"title": "Atomic Types", "shortTitle": null, "sectionNum": "3.7.2.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Interacting with Lean", "shortTitle": null, "number": "3"}, {"title": "Formatted Output", "shortTitle": null, "number": "7"}, {"title": "Repr", "shortTitle": null, "number": "2"}, {"title": "Atomic Types", "shortTitle": null, "number": "2"}]}, "address": "/Interacting-with-Lean/"}], "NoNatZeroDivisors": [{"id": "NoNatZeroDivisors", "data": {"title": "Natural Number Zero Divisors", "shortTitle": null, "sectionNum": "17.8.1.3.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "The grind tactic", "shortTitle": null, "number": "17"}, {"title": "Algebraic Solver (Commutative Rings, Fields)", "shortTitle": null, "number": "8"}, {"title": "Solver Type Classes", "shortTitle": null, "number": "1"}, {"title": "Natural Number Zero Divisors", "shortTitle": null, "number": "3"}]}, "address": "/The--grind--tactic/Algebraic-Solver-_LPAR_Commutative-Rings___-Fields_RPAR_/"}], "Nat": [{"id": "Nat", "data": {"title": "Natural Numbers", "shortTitle": null, "sectionNum": "20.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Natural Numbers", "shortTitle": null, "number": "1"}]}, "address": "/Basic-Types/Natural-Numbers/"}], "List": [{"id": "List", "data": {"title": "Linked Lists", "shortTitle": null, "sectionNum": "20.15.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Linked Lists", "shortTitle": null, "number": "15"}]}, "address": "/Basic-Types/Linked-Lists/"}], "Int": [{"id": "Int", "data": {"title": "Integers", "shortTitle": null, "sectionNum": "20.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Integers", "shortTitle": null, "number": "2"}]}, "address": "/Basic-Types/Integers/"}], "HashSet": [{"id": "HashSet", "data": {"title": "Hash Sets", "shortTitle": null, "sectionNum": "20.19.6.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Maps and Sets", "shortTitle": null, "number": "19"}, {"title": "Hash Sets", "shortTitle": null, "number": "6"}]}, "address": "/Basic-Types/Maps-and-Sets/"}], "HashMap": [{"id": "HashMap", "data": {"title": "Hash Maps", "shortTitle": null, "sectionNum": "20.19.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Maps and Sets", "shortTitle": null, "number": "19"}, {"title": "Hash Maps", "shortTitle": null, "number": "2"}]}, "address": "/Basic-Types/Maps-and-Sets/"}], "HEq": [{"id": "HEq", "data": {"title": "Heterogeneous Equality", "shortTitle": null, "sectionNum": "19.4.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Propositions", "shortTitle": null, "number": "19"}, {"title": "Propositional Equality", "shortTitle": null, "number": "4"}, {"title": "Heterogeneous Equality", "shortTitle": null, "number": "2"}]}, "address": "/Basic-Propositions/Propositional-Equality/"}], "Format": [{"id": "Format", "data": {"title": "Format", "shortTitle": null, "sectionNum": "3.7.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Interacting with Lean", "shortTitle": null, "number": "3"}, {"title": "Formatted Output", "shortTitle": null, "number": "7"}, {"title": "Format", "shortTitle": null, "number": "1"}]}, "address": "/Interacting-with-Lean/"}], "Float-api": [{"id": "Float-api", "data": {"title": "API Reference", "shortTitle": null, "sectionNum": "20.6.2.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Floating-Point Numbers", "shortTitle": null, "number": "6"}, {"title": "API Reference", "shortTitle": null, "number": "2"}]}, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float": [{"id": "Float", "data": {"title": "Floating-Point Numbers", "shortTitle": null, "sectionNum": "20.6.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Floating-Point Numbers", "shortTitle": null, "number": "6"}]}, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Fin": [{"id": "Fin", "data": {"title": "Finite Natural Numbers", "shortTitle": null, "sectionNum": "20.3.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Finite Natural Numbers", "shortTitle": null, "number": "3"}]}, "address": "/Basic-Types/Finite-Natural-Numbers/"}], "ExtHashSet": [{"id": "ExtHashSet", "data": {"title": "Extensional Hash Sets", "shortTitle": null, "sectionNum": "20.19.7.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Maps and Sets", "shortTitle": null, "number": "19"}, {"title": "Extensional Hash Sets", "shortTitle": null, "number": "7"}]}, "address": "/Basic-Types/Maps-and-Sets/"}], "ExtHashMap": [{"id": "ExtHashMap", "data": {"title": "Extensional Hash Maps", "shortTitle": null, "sectionNum": "20.19.4.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Maps and Sets", "shortTitle": null, "number": "19"}, {"title": "Extensional Hash Maps", "shortTitle": null, "number": "4"}]}, "address": "/Basic-Types/Maps-and-Sets/"}], "ExtDHashMap": [{"id": "ExtDHashMap", "data": {"title": "Extensional Dependent Hash Maps", "shortTitle": null, "sectionNum": "20.19.5.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Maps and Sets", "shortTitle": null, "number": "19"}, {"title": "Extensional Dependent Hash Maps", "shortTitle": null, "number": "5"}]}, "address": "/Basic-Types/Maps-and-Sets/"}], "DTreeMap": [{"id": "DTreeMap", "data": {"title": "Dependent Tree-Based Maps", "shortTitle": null, "sectionNum": "20.19.9.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Maps and Sets", "shortTitle": null, "number": "19"}, {"title": "Dependent Tree-Based Maps", "shortTitle": null, "number": "9"}]}, "address": "/Basic-Types/Maps-and-Sets/"}], "DHashMap": [{"id": "DHashMap", "data": {"title": "Dependent Hash Maps", "shortTitle": null, "sectionNum": "20.19.3.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Maps and Sets", "shortTitle": null, "number": "19"}, {"title": "Dependent Hash Maps", "shortTitle": null, "number": "3"}]}, "address": "/Basic-Types/Maps-and-Sets/"}], "Char": [{"id": "Char", "data": {"title": "Characters", "shortTitle": null, "sectionNum": "20.7.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Characters", "shortTitle": null, "number": "7"}]}, "address": "/Basic-Types/Characters/"}], "ByteArray": [{"id": "ByteArray", "data": {"title": "Byte Arrays", "shortTitle": null, "sectionNum": "20.17.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Byte Arrays", "shortTitle": null, "number": "17"}]}, "address": "/Basic-Types/Byte-Arrays/"}], "BitVec-automation": [{"id": "BitVec-automation", "data": {"title": "Automation", "shortTitle": null, "sectionNum": "20.5.4.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Bitvectors", "shortTitle": null, "number": "5"}, {"title": "Automation", "shortTitle": null, "number": "4"}]}, "address": "/Basic-Types/Bitvectors/"}], "BitVec-api": [{"id": "BitVec-api", "data": {"title": "API Reference", "shortTitle": null, "sectionNum": "20.5.5.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Bitvectors", "shortTitle": null, "number": "5"}, {"title": "API Reference", "shortTitle": null, "number": "5"}]}, "address": "/Basic-Types/Bitvectors/"}], "BitVec": [{"id": "BitVec", "data": {"title": "Bitvectors", "shortTitle": null, "sectionNum": "20.5.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Bitvectors", "shortTitle": null, "number": "5"}]}, "address": "/Basic-Types/Bitvectors/"}], "Array": [{"id": "Array", "data": {"title": "Arrays", "shortTitle": null, "sectionNum": "20.16.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "Basic Types", "shortTitle": null, "number": "20"}, {"title": "Arrays", "shortTitle": null, "number": "16"}]}, "address": "/Basic-Types/Arrays/"}], "AddRightCancel": [{"id": "AddRightCancel", "data": {"title": "Right-Cancellative Addition", "shortTitle": null, "sectionNum": "17.8.1.3.1.", "context": [{"title": "The Lean Language Reference", "shortTitle": null, "number": null}, {"title": "The grind tactic", "shortTitle": null, "number": "17"}, {"title": "Algebraic Solver (Commutative Rings, Fields)", "shortTitle": null, "number": "8"}, {"title": "Solver Type Classes", "shortTitle": null, "number": "1"}, {"title": "Natural Number Zero Divisors", "shortTitle": null, "number": "3"}, {"title": "Right-Cancellative Addition", "shortTitle": null, "number": "1"}]}, "address": "/The--grind--tactic/Algebraic-Solver-_LPAR_Commutative-Rings___-Fields_RPAR_/"}]}}, "Verso.Genre.Manual.example": {"title": "Verso.Genre.Manual.example", "description": "Verso.Genre.Manual.example", "contents": {"α (in Mutual Block Scope and Automatic Implicit Parameters)": [{"id": "___-_LPAR_in-Mutual-Block-Scope-and-Automatic-Implicit-Parameters_RPAR_-next", "data": {"/Definitions/Recursive-Definitions/#___-_LPAR_in-Mutual-Block-Scope-and-Automatic-Implicit-Parameters_RPAR_-next": {"display": "α", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Mutual Recursion", "Mutual Block Scope and Automatic Implicit Parameters"]}, "/Definitions/Recursive-Definitions/#___-_LPAR_in-Mutual-Block-Scope-and-Automatic-Implicit-Parameters_RPAR_": {"display": "α", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Mutual Recursion", "Mutual Block Scope and Automatic Implicit Parameters"]}}, "address": "/Definitions/Recursive-Definitions/"}, {"id": "___-_LPAR_in-Mutual-Block-Scope-and-Automatic-Implicit-Parameters_RPAR_", "data": {"/Definitions/Recursive-Definitions/#___-_LPAR_in-Mutual-Block-Scope-and-Automatic-Implicit-Parameters_RPAR_-next": {"display": "α", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Mutual Recursion", "Mutual Block Scope and Automatic Implicit Parameters"]}, "/Definitions/Recursive-Definitions/#___-_LPAR_in-Mutual-Block-Scope-and-Automatic-Implicit-Parameters_RPAR_": {"display": "α", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Mutual Recursion", "Mutual Block Scope and Automatic Implicit Parameters"]}}, "address": "/Definitions/Recursive-Definitions/"}], "ys (in Lazy Lists)": [{"id": "ys-_LPAR_in-Lazy-Lists_RPAR_", "data": {"/Basic-Types/Lazy-Computations/#ys-_LPAR_in-Lazy-Lists_RPAR_": {"display": "ys", "context": ["The Lean Language Reference", "Basic Types", "Lazy Computations", "Coercions", "Lazy Lists"]}}, "address": "/Basic-Types/Lazy-Computations/"}], "y.y (in Longer Identifier Prefixes Take Precedence)": [{"id": "y___y-_LPAR_in-Longer-Identifier-Prefixes-Take-Precedence_RPAR_", "data": {"/Terms/Identifiers/#y___y-_LPAR_in-Longer-Identifier-Prefixes-Take-Precedence_RPAR_": {"display": "y.y", "context": ["The Lean Language Reference", "Terms", "Identifiers", "Longer Identifier Prefixes Take Precedence"]}}, "address": "/Terms/Identifiers/"}], "y (in Sort Coercions as Ordinary Coercions)": [{"id": "y-_LPAR_in-Sort-Coercions-as-Ordinary-Coercions_RPAR_", "data": {"/Coercions/Coercing-to-Sorts/#y-_LPAR_in-Sort-Coercions-as-Ordinary-Coercions_RPAR_": {"display": "y", "context": ["The Lean Language Reference", "Coercions", "Coercing to Sorts", "Sort Coercions as Ordinary Coercions"]}}, "address": "/Coercions/Coercing-to-Sorts/"}], "y (in Longer Identifier Prefixes Take Precedence)": [{"id": "y-_LPAR_in-Longer-Identifier-Prefixes-Take-Precedence_RPAR_", "data": {"/Terms/Identifiers/#y-_LPAR_in-Longer-Identifier-Prefixes-Take-Precedence_RPAR_": {"display": "y", "context": ["The Lean Language Reference", "Terms", "Identifiers", "Longer Identifier Prefixes Take Precedence"]}}, "address": "/Terms/Identifiers/"}], "xs (in Lazy Lists)": [{"id": "xs-_LPAR_in-Lazy-Lists_RPAR_", "data": {"/Basic-Types/Lazy-Computations/#xs-_LPAR_in-Lazy-Lists_RPAR_": {"display": "xs", "context": ["The Lean Language Reference", "Basic Types", "Lazy Computations", "Coercions", "Lazy Lists"]}}, "address": "/Basic-Types/Lazy-Computations/"}], "x (in Sort Coercions as Ordinary Coercions)": [{"id": "x-_LPAR_in-Sort-Coercions-as-Ordinary-Coercions_RPAR_", "data": {"/Coercions/Coercing-to-Sorts/#x-_LPAR_in-Sort-Coercions-as-Ordinary-Coercions_RPAR_": {"display": "x", "context": ["The Lean Language Reference", "Coercions", "Coercing to Sorts", "Sort Coercions as Ordinary Coercions"]}}, "address": "/Coercions/Coercing-to-Sorts/"}], "x (in Private Field Values)": [{"id": "x-_LPAR_in-Private-Field-Values_RPAR_", "data": {"/The-Type-System/Inductive-Types/#x-_LPAR_in-Private-Field-Values_RPAR_": {"display": "x", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Structure Declarations", "Structure Constructors", "Private Field Values"]}}, "address": "/The-Type-System/Inductive-Types/"}], "x (in Opening Scoped Declarations)": [{"id": "x-_LPAR_in-Opening-Scoped-Declarations_RPAR_", "data": {"/Namespaces-and-Sections/#x-_LPAR_in-Opening-Scoped-Declarations_RPAR_": {"display": "x", "context": ["The Lean Language Reference", "Namespaces and Sections", "Namespaces", "Namespaces and Section Scopes", "Opening Scoped Declarations"]}}, "address": "/Namespaces-and-Sections/"}], "x (in Local Names Take Precedence)": [{"id": "x-_LPAR_in-Local-Names-Take-Precedence_RPAR_", "data": {"/Terms/Identifiers/#x-_LPAR_in-Local-Names-Take-Precedence_RPAR_": {"display": "x", "context": ["The Lean Language Reference", "Terms", "Identifiers", "Local Names Take Precedence"]}}, "address": "/Terms/Identifiers/"}], "wednesday (in Implementing Coercions)": [{"id": "wednesday-_LPAR_in-Implementing-Coercions_RPAR_", "data": {"/Coercions/Coercing-Between-Types/#wednesday-_LPAR_in-Implementing-Coercions_RPAR_": {"display": "wednesday", "context": ["The Lean Language Reference", "Coercions", "Coercing Between Types", "Implementing Coercions", "Implementing Coercions"]}}, "address": "/Coercions/Coercing-Between-Types/"}], "values (in Monadic Collection Operations)": [{"id": "values-_LPAR_in-Monadic-Collection-Operations_RPAR_", "data": {"/Functors___-Monads-and--do--Notation/API-Reference/#values-_LPAR_in-Monadic-Collection-Operations_RPAR_": {"display": "values", "context": ["The Lean Language Reference", "Functors, Monads and do -Notation", "API Reference", "Monadic Collection Operations"]}}, "address": "/Functors___-Monads-and--do--Notation/API-Reference/"}], "unit_not_nat (in Inconsistencies From Axioms)": [{"id": "unit_not_nat-_LPAR_in-Inconsistencies-From-Axioms_RPAR_", "data": {"/Axioms/#unit_not_nat-_LPAR_in-Inconsistencies-From-Axioms_RPAR_": {"display": "unit_not_nat", "context": ["The Lean Language Reference", "Axioms", "Consistency", "Inconsistencies From Axioms"]}}, "address": "/Axioms/"}], "unexpandSolo (in Custom Unit Type)": [{"id": "unexpandSolo-_LPAR_in-Custom-Unit-Type_RPAR_", "data": {"/Notations-and-Macros/Extending-Lean___s-Output/#unexpandSolo-_LPAR_in-Custom-Unit-Type_RPAR_": {"display": "unexpandSolo", "context": ["The Lean Language Reference", "Notations and Macros", "Extending Lean's Output", "Unexpanders", "Custom Unit Type"]}}, "address": "/Notations-and-Macros/Extending-Lean___s-Output/"}], "unexpandListCursor (in Unexpansion and Arguments)": [{"id": "unexpandListCursor-_LPAR_in-Unexpansion-and-Arguments_RPAR_", "data": {"/Notations-and-Macros/Extending-Lean___s-Output/#unexpandListCursor-_LPAR_in-Unexpansion-and-Arguments_RPAR_": {"display": "unexpandListCursor", "context": ["The Lean Language Reference", "Notations and Macros", "Extending Lean's Output", "Unexpanders", "Unexpansion and Arguments"]}}, "address": "/Notations-and-Macros/Extending-Lean___s-Output/"}], "unFin_length_eq_length (in Taking Advantage of Run-Time Representations)": [{"id": "unFin_length_eq_length-_LPAR_in-Taking-Advantage-of-Run-Time-Representations_RPAR_", "data": {"/Definitions/Recursive-Definitions/#unFin_length_eq_length-_LPAR_in-Taking-Advantage-of-Run-Time-Representations_RPAR_": {"display": "unFin_length_eq_length", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Partial and Unsafe Definitions", "Unsafe Definitions", "Taking Advantage of Run-Time Representations"]}}, "address": "/Definitions/Recursive-Definitions/"}], "unFinImpl (in Taking Advantage of Run-Time Representations)": [{"id": "unFinImpl-_LPAR_in-Taking-Advantage-of-Run-Time-Representations_RPAR_", "data": {"/Definitions/Recursive-Definitions/#unFinImpl-_LPAR_in-Taking-Advantage-of-Run-Time-Representations_RPAR_": {"display": "unFinImpl", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Partial and Unsafe Definitions", "Unsafe Definitions", "Taking Advantage of Run-Time Representations"]}}, "address": "/Definitions/Recursive-Definitions/"}], "unFin (in Taking Advantage of Run-Time Representations)": [{"id": "unFin-_LPAR_in-Taking-Advantage-of-Run-Time-Representations_RPAR_", "data": {"/Definitions/Recursive-Definitions/#unFin-_LPAR_in-Taking-Advantage-of-Run-Time-Representations_RPAR_": {"display": "unFin", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Partial and Unsafe Definitions", "Unsafe Definitions", "Taking Advantage of Run-Time Representations"]}}, "address": "/Definitions/Recursive-Definitions/"}], "two_eq_five (in Inconsistencies From Axioms)": [{"id": "two_eq_five-_LPAR_in-Inconsistencies-From-Axioms_RPAR_", "data": {"/Axioms/#two_eq_five-_LPAR_in-Inconsistencies-From-Axioms_RPAR_": {"display": "two_eq_five", "context": ["The Lean Language Reference", "Axioms", "Consistency", "Inconsistencies From Axioms"]}}, "address": "/Axioms/"}], "twoHundredThirteen (in Defining Coercions: Decimal Numbers)": [{"id": "twoHundredThirteen-_LPAR_in-Defining-Coercions___-Decimal-Numbers_RPAR_", "data": {"/Coercions/#twoHundredThirteen-_LPAR_in-Defining-Coercions___-Decimal-Numbers_RPAR_": {"display": "twoHundredThirteen", "context": ["The Lean Language Reference", "Coercions", "Defining Coercions: Decimal Numbers"]}}, "address": "/Coercions/"}], "two'' (in Updating arrays)": [{"id": "two______-_LPAR_in-Updating-arrays_RPAR_", "data": {"/The-Type-System/Inductive-Types/#two______-_LPAR_in-Updating-arrays_RPAR_": {"display": "two''", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Structure Declarations", "Structure Constructors", "Updating arrays"]}}, "address": "/The-Type-System/Inductive-Types/"}], "two' (in Updating arrays)": [{"id": "two___-_LPAR_in-Updating-arrays_RPAR_", "data": {"/The-Type-System/Inductive-Types/#two___-_LPAR_in-Updating-arrays_RPAR_": {"display": "two'", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Structure Declarations", "Structure Constructors", "Updating arrays"]}}, "address": "/The-Type-System/Inductive-Types/"}], "two (in Updating arrays)": [{"id": "two-_LPAR_in-Updating-arrays_RPAR_", "data": {"/The-Type-System/Inductive-Types/#two-_LPAR_in-Updating-arrays_RPAR_": {"display": "two", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Structure Declarations", "Structure Constructors", "Updating arrays"]}}, "address": "/The-Type-System/Inductive-Types/"}], "two (in Proofs in Public)": [{"id": "two-_LPAR_in-Proofs-in-Public_RPAR_-next", "data": {"/Source-Files-and-Modules/#two-_LPAR_in-Proofs-in-Public_RPAR_-next-next": {"display": "two", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Proofs in Public"]}, "/Source-Files-and-Modules/#two-_LPAR_in-Proofs-in-Public_RPAR_-next": {"display": "two", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Proofs in Public"]}, "/Source-Files-and-Modules/#two-_LPAR_in-Proofs-in-Public_RPAR_": {"display": "two", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Proofs in Public"]}}, "address": "/Source-Files-and-Modules/"}, {"id": "two-_LPAR_in-Proofs-in-Public_RPAR_-next-next", "data": {"/Source-Files-and-Modules/#two-_LPAR_in-Proofs-in-Public_RPAR_-next-next": {"display": "two", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Proofs in Public"]}, "/Source-Files-and-Modules/#two-_LPAR_in-Proofs-in-Public_RPAR_-next": {"display": "two", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Proofs in Public"]}, "/Source-Files-and-Modules/#two-_LPAR_in-Proofs-in-Public_RPAR_": {"display": "two", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Proofs in Public"]}}, "address": "/Source-Files-and-Modules/"}, {"id": "two-_LPAR_in-Proofs-in-Public_RPAR_", "data": {"/Source-Files-and-Modules/#two-_LPAR_in-Proofs-in-Public_RPAR_-next-next": {"display": "two", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Proofs in Public"]}, "/Source-Files-and-Modules/#two-_LPAR_in-Proofs-in-Public_RPAR_-next": {"display": "two", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Proofs in Public"]}, "/Source-Files-and-Modules/#two-_LPAR_in-Proofs-in-Public_RPAR_": {"display": "two", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Proofs in Public"]}}, "address": "/Source-Files-and-Modules/"}], "two (in No structure subtyping)": [{"id": "two-_LPAR_in-No-structure-subtyping_RPAR_", "data": {"/The-Type-System/Inductive-Types/#two-_LPAR_in-No-structure-subtyping_RPAR_": {"display": "two", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Structure Declarations", "Structure Inheritance", "No structure subtyping"]}}, "address": "/The-Type-System/Inductive-Types/"}], "two (in Dependent Function Types)": [{"id": "two-_LPAR_in-Dependent-Function-Types_RPAR_", "data": {"/The-Type-System/Functions/#two-_LPAR_in-Dependent-Function-Types_RPAR_": {"display": "two", "context": ["The Lean Language Reference", "The Type System", "Functions", "Dependent Function Types"]}}, "address": "/The-Type-System/Functions/"}], "twice (in Duplicate Evaluation in Coercions)": [{"id": "twice-_LPAR_in-Duplicate-Evaluation-in-Coercions_RPAR_", "data": {"/Coercions/Coercion-Insertion/#twice-_LPAR_in-Duplicate-Evaluation-in-Coercions_RPAR_": {"display": "twice", "context": ["The Lean Language Reference", "Coercions", "Coercion Insertion", "Duplicate Evaluation in Coercions"]}}, "address": "/Coercions/Coercion-Insertion/"}], "truth_functional_imp (in Truth-Functional Implication)": [{"id": "truth_functional_imp-_LPAR_in-Truth-Functional-Implication_RPAR_", "data": {"/Basic-Propositions/Logical-Connectives/#truth_functional_imp-_LPAR_in-Truth-Functional-Implication_RPAR_": {"display": "truth_functional_imp", "context": ["The Lean Language Reference", "Basic Propositions", "Logical Connectives", "Truth-Functional Implication"]}}, "address": "/Basic-Propositions/Logical-Connectives/"}], "trig_identity": [{"id": "trig_identity", "data": {"/The--grind--tactic/Bigger-Examples/#trig_identity": {"display": "trig_identity", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "Integrating grind 's Features"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}], "tomorrow (in Controlling Evaluation with Coercions)": [{"id": "tomorrow-_LPAR_in-Controlling-Evaluation-with-Coercions_RPAR_", "data": {"/Coercions/Coercion-Insertion/#tomorrow-_LPAR_in-Controlling-Evaluation-with-Coercions_RPAR_": {"display": "tomorrow", "context": ["The Lean Language Reference", "Coercions", "Coercion Insertion", "Controlling Evaluation with Coercions"]}}, "address": "/Coercions/Coercion-Insertion/"}], "toPalindrome (in Cross-Phase Code Re-Use)": [{"id": "toPalindrome-_LPAR_in-Cross-Phase-Code-Re-Use_RPAR_", "data": {"/Source-Files-and-Modules/#toPalindrome-_LPAR_in-Cross-Phase-Code-Re-Use_RPAR_": {"display": "toPalindrome", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "The Meta Phase", "Cross-Phase Code Re-Use"]}}, "address": "/Source-Files-and-Modules/"}], "toInt_sound (in Built-In Integers as Quotients)": [{"id": "toInt_sound-_LPAR_in-Built-In-Integers-as-Quotients_RPAR_", "data": {"/The-Type-System/Quotients/#toInt_sound-_LPAR_in-Built-In-Integers-as-Quotients_RPAR_": {"display": "toInt_sound", "context": ["The Lean Language Reference", "The Type System", "Quotients", "Alternatives to Quotient Types", "Built-In Integers as Quotients"]}}, "address": "/The-Type-System/Quotients/"}], "toInt (in Built-In Integers as Quotients)": [{"id": "toInt-_LPAR_in-Built-In-Integers-as-Quotients_RPAR_", "data": {"/The-Type-System/Quotients/#toInt-_LPAR_in-Built-In-Integers-as-Quotients_RPAR_": {"display": "toInt", "context": ["The Lean Language Reference", "The Type System", "Quotients", "Alternatives to Quotient Types", "Built-In Integers as Quotients"]}}, "address": "/The-Type-System/Quotients/"}], "toAcademicWork (in Structure type inheritance with overlapping fields)": [{"id": "toAcademicWork-_LPAR_in-Structure-type-inheritance-with-overlapping-fields_RPAR_", "data": {"/The-Type-System/Inductive-Types/#toAcademicWork-_LPAR_in-Structure-type-inheritance-with-overlapping-fields_RPAR_": {"display": "toAcademicWork", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Structure Declarations", "Structure Inheritance", "Structure type inheritance with overlapping fields"]}}, "address": "/The-Type-System/Inductive-Types/"}], "thirdOfFive (in Equational Lemmas)": [{"id": "thirdOfFive-_LPAR_in-Equational-Lemmas_RPAR_", "data": {"/Elaboration-and-Compilation/#thirdOfFive-_LPAR_in-Equational-Lemmas_RPAR_": {"display": "thirdOfFive", "context": ["The Lean Language Reference", "Elaboration and Compilation", "Elaboration Results", "Equational Lemmas"]}}, "address": "/Elaboration-and-Compilation/"}], "thirdChar (in Panic)": [{"id": "thirdChar-_LPAR_in-Panic_RPAR_", "data": {"/The-Type-System/Functions/#thirdChar-_LPAR_in-Panic_RPAR_": {"display": "thirdChar", "context": ["The Lean Language Reference", "The Type System", "Functions", "Totality and Termination", "Panic"]}}, "address": "/The-Type-System/Functions/"}], "the (in Filling Holes with Unification)": [{"id": "the-_LPAR_in-Filling-Holes-with-Unification_RPAR_", "data": {"/Terms/Holes/#the-_LPAR_in-Filling-Holes-with-Unification_RPAR_": {"display": "the", "context": ["The Lean Language Reference", "Terms", "Holes", "Filling Holes with Unification"]}}, "address": "/Terms/Holes/"}], "th (in Coercions)": [{"id": "th-_LPAR_in-Coercions_RPAR_", "data": {"/Coercions/#th-_LPAR_in-Coercions_RPAR_": {"display": "th", "context": ["The Lean Language Reference", "Coercions", "Coercions"]}}, "address": "/Coercions/"}], "test (in Universe polymorphism and definitional equality)": [{"id": "test-_LPAR_in-Universe-polymorphism-and-definitional-equality_RPAR_", "data": {"/The-Type-System/Universes/#test-_LPAR_in-Universe-polymorphism-and-definitional-equality_RPAR_": {"display": "test", "context": ["The Lean Language Reference", "The Type System", "Universes", "Polymorphism", "Universe polymorphism and definitional equality"]}}, "address": "/The-Type-System/Universes/"}], "test (in Nested do and Branches)": [{"id": "test-_LPAR_in-Nested--do--and-Branches_RPAR_", "data": {"/Functors___-Monads-and--do--Notation/Syntax/#test-_LPAR_in-Nested--do--and-Branches_RPAR_": {"display": "test", "context": ["The Lean Language Reference", "Functors, Monads and do -Notation", "Syntax", "do -Notation", "Identifying do Blocks", "Nested do and Branches"]}}, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}], "termBalanced (in Parsing Matched Parentheses and Brackets)": [{"id": "termBalanced-_LPAR_in-Parsing-Matched-Parentheses-and-Brackets_RPAR_", "data": {"/Notations-and-Macros/Defining-New-Syntax/#termBalanced-_LPAR_in-Parsing-Matched-Parentheses-and-Brackets_RPAR_": {"display": "termBalanced", "context": ["The Lean Language Reference", "Notations and Macros", "Defining New Syntax", "Syntax Rules", "Parsing Matched Parentheses and Brackets"]}}, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "ten (in Sub-Array Syntax)": [{"id": "ten-_LPAR_in-Sub-Array-Syntax_RPAR_", "data": {"/Basic-Types/Arrays/#ten-_LPAR_in-Sub-Array-Syntax_RPAR_": {"display": "ten", "context": ["The Lean Language Reference", "Basic Types", "Arrays", "Syntax", "Sub-Array Syntax"]}}, "address": "/Basic-Types/Arrays/"}], "tally_eq_add (in Reducibility and Tactics)": [{"id": "tally_eq_add-_LPAR_in-Reducibility-and-Tactics_RPAR_", "data": {"/Definitions/Recursive-Definitions/#tally_eq_add-_LPAR_in-Reducibility-and-Tactics_RPAR_-next-next": {"display": "tally_eq_add", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Controlling Reduction", "Reducibility and Tactics", "Reducibility and Tactics"]}, "/Definitions/Recursive-Definitions/#tally_eq_add-_LPAR_in-Reducibility-and-Tactics_RPAR_-next": {"display": "tally_eq_add", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Controlling Reduction", "Reducibility and Tactics", "Reducibility and Tactics"]}, "/Definitions/Recursive-Definitions/#tally_eq_add-_LPAR_in-Reducibility-and-Tactics_RPAR_": {"display": "tally_eq_add", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Controlling Reduction", "Reducibility and Tactics", "Reducibility and Tactics"]}}, "address": "/Definitions/Recursive-Definitions/"}, {"id": "tally_eq_add-_LPAR_in-Reducibility-and-Tactics_RPAR_-next", "data": {"/Definitions/Recursive-Definitions/#tally_eq_add-_LPAR_in-Reducibility-and-Tactics_RPAR_-next-next": {"display": "tally_eq_add", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Controlling Reduction", "Reducibility and Tactics", "Reducibility and Tactics"]}, "/Definitions/Recursive-Definitions/#tally_eq_add-_LPAR_in-Reducibility-and-Tactics_RPAR_-next": {"display": "tally_eq_add", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Controlling Reduction", "Reducibility and Tactics", "Reducibility and Tactics"]}, "/Definitions/Recursive-Definitions/#tally_eq_add-_LPAR_in-Reducibility-and-Tactics_RPAR_": {"display": "tally_eq_add", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Controlling Reduction", "Reducibility and Tactics", "Reducibility and Tactics"]}}, "address": "/Definitions/Recursive-Definitions/"}, {"id": "tally_eq_add-_LPAR_in-Reducibility-and-Tactics_RPAR_-next-next", "data": {"/Definitions/Recursive-Definitions/#tally_eq_add-_LPAR_in-Reducibility-and-Tactics_RPAR_-next-next": {"display": "tally_eq_add", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Controlling Reduction", "Reducibility and Tactics", "Reducibility and Tactics"]}, "/Definitions/Recursive-Definitions/#tally_eq_add-_LPAR_in-Reducibility-and-Tactics_RPAR_-next": {"display": "tally_eq_add", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Controlling Reduction", "Reducibility and Tactics", "Reducibility and Tactics"]}, "/Definitions/Recursive-Definitions/#tally_eq_add-_LPAR_in-Reducibility-and-Tactics_RPAR_": {"display": "tally_eq_add", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Controlling Reduction", "Reducibility and Tactics", "Reducibility and Tactics"]}}, "address": "/Definitions/Recursive-Definitions/"}], "tally (in Reducibility and Tactics)": [{"id": "tally-_LPAR_in-Reducibility-and-Tactics_RPAR_", "data": {"/Definitions/Recursive-Definitions/#tally-_LPAR_in-Reducibility-and-Tactics_RPAR_": {"display": "tally", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Controlling Reduction", "Reducibility and Tactics", "Reducibility and Tactics"]}}, "address": "/Definitions/Recursive-Definitions/"}], "synack (in No Backtracking of Lexicographic Order)": [{"id": "synack-_LPAR_in-No-Backtracking-of-Lexicographic-Order_RPAR_", "data": {"/Definitions/Recursive-Definitions/#synack-_LPAR_in-No-Backtracking-of-Lexicographic-Order_RPAR_-next": {"display": "synack", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Well-Founded Recursion", "Default Termination Proof Tactic", "No Backtracking of Lexicographic Order"]}, "/Definitions/Recursive-Definitions/#synack-_LPAR_in-No-Backtracking-of-Lexicographic-Order_RPAR_": {"display": "synack", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Well-Founded Recursion", "Default Termination Proof Tactic", "No Backtracking of Lexicographic Order"]}}, "address": "/Definitions/Recursive-Definitions/"}, {"id": "synack-_LPAR_in-No-Backtracking-of-Lexicographic-Order_RPAR_-next", "data": {"/Definitions/Recursive-Definitions/#synack-_LPAR_in-No-Backtracking-of-Lexicographic-Order_RPAR_-next": {"display": "synack", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Well-Founded Recursion", "Default Termination Proof Tactic", "No Backtracking of Lexicographic Order"]}, "/Definitions/Recursive-Definitions/#synack-_LPAR_in-No-Backtracking-of-Lexicographic-Order_RPAR_": {"display": "synack", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Well-Founded Recursion", "Default Termination Proof Tactic", "No Backtracking of Lexicographic Order"]}}, "address": "/Definitions/Recursive-Definitions/"}], "sweetPotato (in Using Ord Instances for LT and LE Instances)": [{"id": "sweetPotato-_LPAR_in-Using--Ord--Instances-for--LT--and--LE--Instances_RPAR_", "data": {"/Type-Classes/Basic-Classes/#sweetPotato-_LPAR_in-Using--Ord--Instances-for--LT--and--LE--Instances_RPAR_": {"display": "sweetPotato", "context": ["The Lean Language Reference", "Type Classes", "Basic Classes", "Ordering", "Using Ord Instances for LT and LE Instances"]}}, "address": "/Type-Classes/Basic-Classes/"}], "swap_swap_eq_id' (in The @[grind ext] Attribute)": [{"id": "swap_swap_eq_id___-_LPAR_in-The--____LSQ_grind-ext_RSQ_--Attribute_RPAR_", "data": {"/The--grind--tactic/E___matching/#swap_swap_eq_id___-_LPAR_in-The--____LSQ_grind-ext_RSQ_--Attribute_RPAR_": {"display": "swap_swap_eq_id'", "context": ["The Lean Language Reference", "The grind tactic", "E‑matching", "Patterns", "The @[grind ext] Attribute"]}}, "address": "/The--grind--tactic/E___matching/"}], "swap_swap_eq_id (in The @[grind ext] Attribute)": [{"id": "swap_swap_eq_id-_LPAR_in-The--____LSQ_grind-ext_RSQ_--Attribute_RPAR_", "data": {"/The--grind--tactic/E___matching/#swap_swap_eq_id-_LPAR_in-The--____LSQ_grind-ext_RSQ_--Attribute_RPAR_": {"display": "swap_swap_eq_id", "context": ["The Lean Language Reference", "The grind tactic", "E‑matching", "Patterns", "The @[grind ext] Attribute"]}}, "address": "/The--grind--tactic/E___matching/"}], "swap_eq_swap' (in Printing Axioms)": [{"id": "swap_eq_swap___-_LPAR_in-Printing-Axioms_RPAR_", "data": {"/Interacting-with-Lean/#swap_eq_swap___-_LPAR_in-Printing-Axioms_RPAR_": {"display": "swap_eq_swap'", "context": ["The Lean Language Reference", "Interacting with Lean", "Querying the Context", "Printing Axioms"]}}, "address": "/Interacting-with-Lean/"}], "swap' (in Printing Axioms)": [{"id": "swap___-_LPAR_in-Printing-Axioms_RPAR_", "data": {"/Interacting-with-Lean/#swap___-_LPAR_in-Printing-Axioms_RPAR_": {"display": "swap'", "context": ["The Lean Language Reference", "Interacting with Lean", "Querying the Context", "Printing Axioms"]}}, "address": "/Interacting-with-Lean/"}], "swap (in Printing Axioms)": [{"id": "swap-_LPAR_in-Printing-Axioms_RPAR_", "data": {"/Interacting-with-Lean/#swap-_LPAR_in-Printing-Axioms_RPAR_": {"display": "swap", "context": ["The Lean Language Reference", "Interacting with Lean", "Querying the Context", "Printing Axioms"]}}, "address": "/Interacting-with-Lean/"}], "sum_eq_add (in Reducibility and Tactics)": [{"id": "sum_eq_add-_LPAR_in-Reducibility-and-Tactics_RPAR_", "data": {"/Definitions/Recursive-Definitions/#sum_eq_add-_LPAR_in-Reducibility-and-Tactics_RPAR_-next": {"display": "sum_eq_add", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Controlling Reduction", "Reducibility and Tactics", "Reducibility and Tactics"]}, "/Definitions/Recursive-Definitions/#sum_eq_add-_LPAR_in-Reducibility-and-Tactics_RPAR_": {"display": "sum_eq_add", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Controlling Reduction", "Reducibility and Tactics", "Reducibility and Tactics"]}}, "address": "/Definitions/Recursive-Definitions/"}, {"id": "sum_eq_add-_LPAR_in-Reducibility-and-Tactics_RPAR_-next", "data": {"/Definitions/Recursive-Definitions/#sum_eq_add-_LPAR_in-Reducibility-and-Tactics_RPAR_-next": {"display": "sum_eq_add", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Controlling Reduction", "Reducibility and Tactics", "Reducibility and Tactics"]}, "/Definitions/Recursive-Definitions/#sum_eq_add-_LPAR_in-Reducibility-and-Tactics_RPAR_": {"display": "sum_eq_add", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Controlling Reduction", "Reducibility and Tactics", "Reducibility and Tactics"]}}, "address": "/Definitions/Recursive-Definitions/"}], "sumUntilFive (in Effect Ordering)": [{"id": "sumUntilFive-_LPAR_in-Effect-Ordering_RPAR_", "data": {"/Functors___-Monads-and--do--Notation/Varieties-of-Monads/#sumUntilFive-_LPAR_in-Effect-Ordering_RPAR_": {"display": "sumUntilFive", "context": ["The Lean Language Reference", "Functors, Monads and do -Notation", "Varieties of Monads", "Monad Type Classes", "Effect Ordering"]}}, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "sumNonFives (in Effect Ordering)": [{"id": "sumNonFives-_LPAR_in-Effect-Ordering_RPAR_", "data": {"/Functors___-Monads-and--do--Notation/Varieties-of-Monads/#sumNonFives-_LPAR_in-Effect-Ordering_RPAR_": {"display": "sumNonFives", "context": ["The Lean Language Reference", "Functors, Monads and do -Notation", "Varieties of Monads", "Monad Type Classes", "Effect Ordering"]}}, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "sum3 (in Named Arguments)": [{"id": "sum3-_LPAR_in-Named-Arguments_RPAR_", "data": {"/Terms/Function-Application/#sum3-_LPAR_in-Named-Arguments_RPAR_": {"display": "sum3", "context": ["The Lean Language Reference", "Terms", "Function Application", "Named Arguments"]}}, "address": "/Terms/Function-Application/"}], "sum (in Reducibility and Tactics)": [{"id": "sum-_LPAR_in-Reducibility-and-Tactics_RPAR_", "data": {"/Definitions/Recursive-Definitions/#sum-_LPAR_in-Reducibility-and-Tactics_RPAR_": {"display": "sum", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Controlling Reduction", "Reducibility and Tactics", "Reducibility and Tactics"]}}, "address": "/Definitions/Recursive-Definitions/"}], "succ_not_zero": [{"id": "succ_not_zero", "data": {"/Basic-Types/Natural-Numbers/#succ_not_zero": {"display": "succ_not_zero", "context": ["The Lean Language Reference", "Basic Types", "Natural Numbers", "Logical Model", "Peano Axioms"]}}, "address": "/Basic-Types/Natural-Numbers/"}], "succ_injective": [{"id": "succ_injective", "data": {"/Basic-Types/Natural-Numbers/#succ_injective": {"display": "succ_injective", "context": ["The Lean Language Reference", "Basic Types", "Natural Numbers", "Logical Model", "Peano Axioms"]}}, "address": "/Basic-Types/Natural-Numbers/"}], "succ (in Coercing Decorated Functions to Function Types)": [{"id": "succ-_LPAR_in-Coercing-Decorated-Functions-to-Function-Types_RPAR_", "data": {"/Coercions/Coercing-to-Function-Types/#succ-_LPAR_in-Coercing-Decorated-Functions-to-Function-Types_RPAR_": {"display": "succ", "context": ["The Lean Language Reference", "Coercions", "Coercing to Function Types", "Coercing Decorated Functions to Function Types"]}}, "address": "/Coercions/Coercing-to-Function-Types/"}], "sub' (in Controlling Coercion Insertion)": [{"id": "sub___-_LPAR_in-Controlling-Coercion-Insertion_RPAR_", "data": {"/Coercions/Coercing-Between-Types/#sub___-_LPAR_in-Controlling-Coercion-Insertion_RPAR_": {"display": "sub'", "context": ["The Lean Language Reference", "Coercions", "Coercing Between Types", "Controlling Coercion Insertion"]}}, "address": "/Coercions/Coercing-Between-Types/"}], "sub (in Controlling Coercion Insertion)": [{"id": "sub-_LPAR_in-Controlling-Coercion-Insertion_RPAR_", "data": {"/Coercions/Coercing-Between-Types/#sub-_LPAR_in-Controlling-Coercion-Insertion_RPAR_": {"display": "sub", "context": ["The Lean Language Reference", "Coercions", "Coercing Between Types", "Controlling Coercion Insertion"]}}, "address": "/Coercions/Coercing-Between-Types/"}], "stringWriter (in Dependent Coercion to Functions)": [{"id": "stringWriter-_LPAR_in-Dependent-Coercion-to-Functions_RPAR_", "data": {"/Coercions/Coercing-to-Function-Types/#stringWriter-_LPAR_in-Dependent-Coercion-to-Functions_RPAR_": {"display": "stringWriter", "context": ["The Lean Language Reference", "Coercions", "Coercing to Function Types", "Dependent Coercion to Functions"]}}, "address": "/Coercions/Coercing-to-Function-Types/"}], "str2": [{"id": "str2", "data": {"/Basic-Types/Strings/#str2": {"display": "str2", "context": ["The Lean Language Reference", "Basic Types", "Strings", "Syntax", "String Literals"]}}, "address": "/Basic-Types/Strings/"}], "str1": [{"id": "str1", "data": {"/Basic-Types/Strings/#str1": {"display": "str1", "context": ["The Lean Language Reference", "Basic Types", "Strings", "Syntax", "String Literals"]}}, "address": "/Basic-Types/Strings/"}], "str (in Newline Characters in Strings)": [{"id": "str-_LPAR_in-Newline-Characters-in-Strings_RPAR_", "data": {"/Interacting-with-Lean/#str-_LPAR_in-Newline-Characters-in-Strings_RPAR_": {"display": "str", "context": ["The Lean Language Reference", "Interacting with Lean", "Formatted Output", "Format", "Newline Characters in Strings"]}}, "address": "/Interacting-with-Lean/"}], "split'' (in Pattern Matching and Lists)": [{"id": "split______-_LPAR_in-Pattern-Matching-and-Lists_RPAR_", "data": {"/Basic-Types/Linked-Lists/#split______-_LPAR_in-Pattern-Matching-and-Lists_RPAR_": {"display": "split''", "context": ["The Lean Language Reference", "Basic Types", "Linked Lists", "Syntax", "Pattern Matching and Lists"]}}, "address": "/Basic-Types/Linked-Lists/"}], "split' (in Pattern Matching and Lists)": [{"id": "split___-_LPAR_in-Pattern-Matching-and-Lists_RPAR_", "data": {"/Basic-Types/Linked-Lists/#split___-_LPAR_in-Pattern-Matching-and-Lists_RPAR_": {"display": "split'", "context": ["The Lean Language Reference", "Basic Types", "Linked Lists", "Syntax", "Pattern Matching and Lists"]}}, "address": "/Basic-Types/Linked-Lists/"}], "split (in Pattern Matching and Lists)": [{"id": "split-_LPAR_in-Pattern-Matching-and-Lists_RPAR_", "data": {"/Basic-Types/Linked-Lists/#split-_LPAR_in-Pattern-Matching-and-Lists_RPAR_": {"display": "split", "context": ["The Lean Language Reference", "Basic Types", "Linked Lists", "Syntax", "Pattern Matching and Lists"]}}, "address": "/Basic-Types/Linked-Lists/"}], "sin": [{"id": "sin", "data": {"/The--grind--tactic/Bigger-Examples/#sin": {"display": "sin", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "Integrating grind 's Features"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}], "simple_equality (in Printing Axioms of Simple Definitions)": [{"id": "simple_equality-_LPAR_in-Printing-Axioms-of-Simple-Definitions_RPAR_", "data": {"/Axioms/#simple_equality-_LPAR_in-Printing-Axioms-of-Simple-Definitions_RPAR_": {"display": "simple_equality", "context": ["The Lean Language Reference", "Axioms", "Displaying Axiom Dependencies", "Printing Axioms of Simple Definitions"]}}, "address": "/Axioms/"}], "select (in Relaxed vs Non-Relaxed Automatic Implicit Parameters)": [{"id": "select-_LPAR_in-Relaxed-vs-Non-Relaxed-Automatic-Implicit-Parameters_RPAR_-next", "data": {"/Definitions/Headers-and-Signatures/#select-_LPAR_in-Relaxed-vs-Non-Relaxed-Automatic-Implicit-Parameters_RPAR_-next-next-next": {"display": "select", "context": ["The Lean Language Reference", "Definitions", "Headers and Signatures", "Automatic Implicit Parameters", "Relaxed vs Non-Relaxed Automatic Implicit Parameters"]}, "/Definitions/Headers-and-Signatures/#select-_LPAR_in-Relaxed-vs-Non-Relaxed-Automatic-Implicit-Parameters_RPAR_-next-next": {"display": "select", "context": ["The Lean Language Reference", "Definitions", "Headers and Signatures", "Automatic Implicit Parameters", "Relaxed vs Non-Relaxed Automatic Implicit Parameters"]}, "/Definitions/Headers-and-Signatures/#select-_LPAR_in-Relaxed-vs-Non-Relaxed-Automatic-Implicit-Parameters_RPAR_-next": {"display": "select", "context": ["The Lean Language Reference", "Definitions", "Headers and Signatures", "Automatic Implicit Parameters", "Relaxed vs Non-Relaxed Automatic Implicit Parameters"]}, "/Definitions/Headers-and-Signatures/#select-_LPAR_in-Relaxed-vs-Non-Relaxed-Automatic-Implicit-Parameters_RPAR_": {"display": "select", "context": ["The Lean Language Reference", "Definitions", "Headers and Signatures", "Automatic Implicit Parameters", "Relaxed vs Non-Relaxed Automatic Implicit Parameters"]}}, "address": "/Definitions/Headers-and-Signatures/"}, {"id": "select-_LPAR_in-Relaxed-vs-Non-Relaxed-Automatic-Implicit-Parameters_RPAR_", "data": {"/Definitions/Headers-and-Signatures/#select-_LPAR_in-Relaxed-vs-Non-Relaxed-Automatic-Implicit-Parameters_RPAR_-next-next-next": {"display": "select", "context": ["The Lean Language Reference", "Definitions", "Headers and Signatures", "Automatic Implicit Parameters", "Relaxed vs Non-Relaxed Automatic Implicit Parameters"]}, "/Definitions/Headers-and-Signatures/#select-_LPAR_in-Relaxed-vs-Non-Relaxed-Automatic-Implicit-Parameters_RPAR_-next-next": {"display": "select", "context": ["The Lean Language Reference", "Definitions", "Headers and Signatures", "Automatic Implicit Parameters", "Relaxed vs Non-Relaxed Automatic Implicit Parameters"]}, "/Definitions/Headers-and-Signatures/#select-_LPAR_in-Relaxed-vs-Non-Relaxed-Automatic-Implicit-Parameters_RPAR_-next": {"display": "select", "context": ["The Lean Language Reference", "Definitions", "Headers and Signatures", "Automatic Implicit Parameters", "Relaxed vs Non-Relaxed Automatic Implicit Parameters"]}, "/Definitions/Headers-and-Signatures/#select-_LPAR_in-Relaxed-vs-Non-Relaxed-Automatic-Implicit-Parameters_RPAR_": {"display": "select", "context": ["The Lean Language Reference", "Definitions", "Headers and Signatures", "Automatic Implicit Parameters", "Relaxed vs Non-Relaxed Automatic Implicit Parameters"]}}, "address": "/Definitions/Headers-and-Signatures/"}, {"id": "select-_LPAR_in-Relaxed-vs-Non-Relaxed-Automatic-Implicit-Parameters_RPAR_-next-next", "data": {"/Definitions/Headers-and-Signatures/#select-_LPAR_in-Relaxed-vs-Non-Relaxed-Automatic-Implicit-Parameters_RPAR_-next-next-next": {"display": "select", "context": ["The Lean Language Reference", "Definitions", "Headers and Signatures", "Automatic Implicit Parameters", "Relaxed vs Non-Relaxed Automatic Implicit Parameters"]}, "/Definitions/Headers-and-Signatures/#select-_LPAR_in-Relaxed-vs-Non-Relaxed-Automatic-Implicit-Parameters_RPAR_-next-next": {"display": "select", "context": ["The Lean Language Reference", "Definitions", "Headers and Signatures", "Automatic Implicit Parameters", "Relaxed vs Non-Relaxed Automatic Implicit Parameters"]}, "/Definitions/Headers-and-Signatures/#select-_LPAR_in-Relaxed-vs-Non-Relaxed-Automatic-Implicit-Parameters_RPAR_-next": {"display": "select", "context": ["The Lean Language Reference", "Definitions", "Headers and Signatures", "Automatic Implicit Parameters", "Relaxed vs Non-Relaxed Automatic Implicit Parameters"]}, "/Definitions/Headers-and-Signatures/#select-_LPAR_in-Relaxed-vs-Non-Relaxed-Automatic-Implicit-Parameters_RPAR_": {"display": "select", "context": ["The Lean Language Reference", "Definitions", "Headers and Signatures", "Automatic Implicit Parameters", "Relaxed vs Non-Relaxed Automatic Implicit Parameters"]}}, "address": "/Definitions/Headers-and-Signatures/"}, {"id": "select-_LPAR_in-Relaxed-vs-Non-Relaxed-Automatic-Implicit-Parameters_RPAR_-next-next-next", "data": {"/Definitions/Headers-and-Signatures/#select-_LPAR_in-Relaxed-vs-Non-Relaxed-Automatic-Implicit-Parameters_RPAR_-next-next-next": {"display": "select", "context": ["The Lean Language Reference", "Definitions", "Headers and Signatures", "Automatic Implicit Parameters", "Relaxed vs Non-Relaxed Automatic Implicit Parameters"]}, "/Definitions/Headers-and-Signatures/#select-_LPAR_in-Relaxed-vs-Non-Relaxed-Automatic-Implicit-Parameters_RPAR_-next-next": {"display": "select", "context": ["The Lean Language Reference", "Definitions", "Headers and Signatures", "Automatic Implicit Parameters", "Relaxed vs Non-Relaxed Automatic Implicit Parameters"]}, "/Definitions/Headers-and-Signatures/#select-_LPAR_in-Relaxed-vs-Non-Relaxed-Automatic-Implicit-Parameters_RPAR_-next": {"display": "select", "context": ["The Lean Language Reference", "Definitions", "Headers and Signatures", "Automatic Implicit Parameters", "Relaxed vs Non-Relaxed Automatic Implicit Parameters"]}, "/Definitions/Headers-and-Signatures/#select-_LPAR_in-Relaxed-vs-Non-Relaxed-Automatic-Implicit-Parameters_RPAR_": {"display": "select", "context": ["The Lean Language Reference", "Definitions", "Headers and Signatures", "Automatic Implicit Parameters", "Relaxed vs Non-Relaxed Automatic Implicit Parameters"]}}, "address": "/Definitions/Headers-and-Signatures/"}], "satisfyingIndices (in Iteration over Array Indices with for)": [{"id": "satisfyingIndices-_LPAR_in-Iteration-over-Array-Indices-with--for_RPAR_", "data": {"/Functors___-Monads-and--do--Notation/Syntax/#satisfyingIndices-_LPAR_in-Iteration-over-Array-Indices-with--for_RPAR_": {"display": "satisfyingIndices", "context": ["The Lean Language Reference", "Functors, Monads and do -Notation", "Syntax", "do -Notation", "Iteration", "Iteration over Array Indices with for"]}}, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}], "s_eq (in Too Many Instances)": [{"id": "s_eq-_LPAR_in-Too-Many-Instances_RPAR_", "data": {"/The--grind--tactic/E___matching/#s_eq-_LPAR_in-Too-Many-Instances_RPAR_": {"display": "s_eq", "context": ["The Lean Language Reference", "The grind tactic", "E‑matching", "Resource Limits", "Too Many Instances"]}}, "address": "/The--grind--tactic/E___matching/"}], "s2 (in Extensional Equality of Subtypes)": [{"id": "s2-_LPAR_in-Extensional-Equality-of-Subtypes_RPAR_", "data": {"/Basic-Types/Subtypes/#s2-_LPAR_in-Extensional-Equality-of-Subtypes_RPAR_": {"display": "s2", "context": ["The Lean Language Reference", "Basic Types", "Subtypes", "Extensional Equality of Subtypes"]}}, "address": "/Basic-Types/Subtypes/"}], "s2 (in Definitional Equality of Subtypes)": [{"id": "s2-_LPAR_in-Definitional-Equality-of-Subtypes_RPAR_", "data": {"/Basic-Types/Subtypes/#s2-_LPAR_in-Definitional-Equality-of-Subtypes_RPAR_": {"display": "s2", "context": ["The Lean Language Reference", "Basic Types", "Subtypes", "Definitional Equality of Subtypes"]}}, "address": "/Basic-Types/Subtypes/"}], "s1_eq_s2 (in Extensional Equality of Subtypes)": [{"id": "s1_eq_s2-_LPAR_in-Extensional-Equality-of-Subtypes_RPAR_", "data": {"/Basic-Types/Subtypes/#s1_eq_s2-_LPAR_in-Extensional-Equality-of-Subtypes_RPAR_": {"display": "s1_eq_s2", "context": ["The Lean Language Reference", "Basic Types", "Subtypes", "Extensional Equality of Subtypes"]}}, "address": "/Basic-Types/Subtypes/"}], "s1_eq_s2 (in Definitional Equality of Subtypes)": [{"id": "s1_eq_s2-_LPAR_in-Definitional-Equality-of-Subtypes_RPAR_", "data": {"/Basic-Types/Subtypes/#s1_eq_s2-_LPAR_in-Definitional-Equality-of-Subtypes_RPAR_": {"display": "s1_eq_s2", "context": ["The Lean Language Reference", "Basic Types", "Subtypes", "Definitional Equality of Subtypes"]}}, "address": "/Basic-Types/Subtypes/"}], "s1 (in Extensional Equality of Subtypes)": [{"id": "s1-_LPAR_in-Extensional-Equality-of-Subtypes_RPAR_", "data": {"/Basic-Types/Subtypes/#s1-_LPAR_in-Extensional-Equality-of-Subtypes_RPAR_": {"display": "s1", "context": ["The Lean Language Reference", "Basic Types", "Subtypes", "Extensional Equality of Subtypes"]}}, "address": "/Basic-Types/Subtypes/"}], "s1 (in Definitional Equality of Subtypes)": [{"id": "s1-_LPAR_in-Definitional-Equality-of-Subtypes_RPAR_", "data": {"/Basic-Types/Subtypes/#s1-_LPAR_in-Definitional-Equality-of-Subtypes_RPAR_": {"display": "s1", "context": ["The Lean Language Reference", "Basic Types", "Subtypes", "Definitional Equality of Subtypes"]}}, "address": "/Basic-Types/Subtypes/"}], "s (in Too Many Instances)": [{"id": "s-_LPAR_in-Too-Many-Instances_RPAR_", "data": {"/The--grind--tactic/E___matching/#s-_LPAR_in-Too-Many-Instances_RPAR_": {"display": "s", "context": ["The Lean Language Reference", "The grind tactic", "E‑matching", "Resource Limits", "Too Many Instances"]}}, "address": "/The--grind--tactic/E___matching/"}], "runCountdown (in Redirecting Standard I/O to Strings)": [{"id": "runCountdown-_LPAR_in-Redirecting-Standard-I___O-to-Strings_RPAR_", "data": {"/IO/Files___-File-Handles___-and-Streams/#runCountdown-_LPAR_in-Redirecting-Standard-I___O-to-Strings_RPAR_": {"display": "runCountdown", "context": ["The Lean Language Reference", "IO", "Files, File Handles, and Streams", "Standard I/O", "Redirecting Standard I/O to Strings"]}}, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "reverse.helper (in Testing Return Values)": [{"id": "reverse___helper-_LPAR_in-Testing-Return-Values_RPAR_", "data": {"/Interacting-with-Lean/#reverse___helper-_LPAR_in-Testing-Return-Values_RPAR_": {"display": "helper", "context": ["The Lean Language Reference", "Interacting with Lean", "Testing Output with #guard_msgs", "Testing Return Values"]}}, "address": "/Interacting-with-Lean/"}], "reverse (in Testing Return Values)": [{"id": "reverse-_LPAR_in-Testing-Return-Values_RPAR_", "data": {"/Interacting-with-Lean/#reverse-_LPAR_in-Testing-Return-Values_RPAR_": {"display": "reverse", "context": ["The Lean Language Reference", "Interacting with Lean", "Testing Output with #guard_msgs", "Testing Return Values"]}}, "address": "/Interacting-with-Lean/"}], "rev_correct (in Missing WPMonad Instance)": [{"id": "rev_correct-_LPAR_in-Missing--WPMonad--Instance_RPAR_-next", "data": {"/The--mvcgen--tactic/Predicate-Transformers/#rev_correct-_LPAR_in-Missing--WPMonad--Instance_RPAR_-next": {"display": "rev_correct", "context": ["The Lean Language Reference", "The mvcgen tactic", "Predicate Transformers", "Predicate Transformers", "Weakest Precondition Monad Morphisms", "Missing WPMonad Instance"]}, "/The--mvcgen--tactic/Predicate-Transformers/#rev_correct-_LPAR_in-Missing--WPMonad--Instance_RPAR_": {"display": "rev_correct", "context": ["The Lean Language Reference", "The mvcgen tactic", "Predicate Transformers", "Predicate Transformers", "Weakest Precondition Monad Morphisms", "Missing WPMonad Instance"]}}, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}, {"id": "rev_correct-_LPAR_in-Missing--WPMonad--Instance_RPAR_", "data": {"/The--mvcgen--tactic/Predicate-Transformers/#rev_correct-_LPAR_in-Missing--WPMonad--Instance_RPAR_-next": {"display": "rev_correct", "context": ["The Lean Language Reference", "The mvcgen tactic", "Predicate Transformers", "Predicate Transformers", "Weakest Precondition Monad Morphisms", "Missing WPMonad Instance"]}, "/The--mvcgen--tactic/Predicate-Transformers/#rev_correct-_LPAR_in-Missing--WPMonad--Instance_RPAR_": {"display": "rev_correct", "context": ["The Lean Language Reference", "The mvcgen tactic", "Predicate Transformers", "Predicate Transformers", "Weakest Precondition Monad Morphisms", "Missing WPMonad Instance"]}}, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "rev (in Missing WPMonad Instance)": [{"id": "rev-_LPAR_in-Missing--WPMonad--Instance_RPAR_", "data": {"/The--mvcgen--tactic/Predicate-Transformers/#rev-_LPAR_in-Missing--WPMonad--Instance_RPAR_": {"display": "rev", "context": ["The Lean Language Reference", "The mvcgen tactic", "Predicate Transformers", "Predicate Transformers", "Weakest Precondition Monad Morphisms", "Missing WPMonad Instance"]}}, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "repeatAccessControl (in Throwing and Catching Errors)": [{"id": "repeatAccessControl-_LPAR_in-Throwing-and-Catching-Errors_RPAR_", "data": {"/IO/Logical-Model/#repeatAccessControl-_LPAR_in-Throwing-and-Catching-Errors_RPAR_": {"display": "repeatAccessControl", "context": ["The Lean Language Reference", "IO", "Logical Model", "Errors and Error Handling in IO", "Throwing and Catching Errors"]}}, "address": "/IO/Logical-Model/"}], "rep (in The Macro Attribute)": [{"id": "rep-_LPAR_in-The-Macro-Attribute_RPAR_", "data": {"/Notations-and-Macros/Macros/#rep-_LPAR_in-The-Macro-Attribute_RPAR_": {"display": "rep", "context": ["The Lean Language Reference", "Notations and Macros", "Macros", "Defining Macros", "The Macro Attribute", "The Macro Attribute"]}}, "address": "/Notations-and-Macros/Macros/"}], "removeSourceInfo (in Representing Syntax as Constructors)": [{"id": "removeSourceInfo-_LPAR_in-Representing-Syntax-as-Constructors_RPAR_", "data": {"/Notations-and-Macros/Defining-New-Syntax/#removeSourceInfo-_LPAR_in-Representing-Syntax-as-Constructors_RPAR_": {"display": "removeSourceInfo", "context": ["The Lean Language Reference", "Notations and Macros", "Defining New Syntax", "Inspecting Syntax", "Representing Syntax as Constructors"]}}, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "reds (in Iterator State Types)": [{"id": "reds-_LPAR_in-Iterator-State-Types_RPAR_", "data": {"/Iterators/Iterator-Definitions/#reds-_LPAR_in-Iterator-State-Types_RPAR_": {"display": "reds", "context": ["The Lean Language Reference", "Iterators", "Iterator Definitions", "Iterator State Types"]}}, "address": "/Iterators/Iterator-Definitions/"}], "q (in Forward Pattern Generation)": [{"id": "q-_LPAR_in-Forward-Pattern-Generation_RPAR_", "data": {"/The--grind--tactic/E___matching/#q-_LPAR_in-Forward-Pattern-Generation_RPAR_": {"display": "q", "context": ["The Lean Language Reference", "The grind tactic", "E‑matching", "Inspecting Patterns", "Forward Pattern Generation"]}}, "address": "/The--grind--tactic/E___matching/"}], "process' (in Reference Counts in IR)": [{"id": "process___-_LPAR_in-Reference-Counts-in-IR_RPAR_", "data": {"/Run-Time-Code/Reference-Counting/#process___-_LPAR_in-Reference-Counts-in-IR_RPAR_": {"display": "process'", "context": ["The Lean Language Reference", "Run-Time Code", "Reference Counting", "Compiler IR", "Reference Counts in IR"]}}, "address": "/Run-Time-Code/Reference-Counting/"}], "process (in Reference Counts in IR)": [{"id": "process-_LPAR_in-Reference-Counts-in-IR_RPAR_", "data": {"/Run-Time-Code/Reference-Counting/#process-_LPAR_in-Reference-Counts-in-IR_RPAR_": {"display": "process", "context": ["The Lean Language Reference", "Run-Time Code", "Reference Counting", "Compiler IR", "Reference Counts in IR"]}}, "address": "/Run-Time-Code/Reference-Counting/"}], "process (in Observing Uniqueness)": [{"id": "process-_LPAR_in-Observing-Uniqueness_RPAR_", "data": {"/Run-Time-Code/Reference-Counting/#process-_LPAR_in-Observing-Uniqueness_RPAR_-next": {"display": "process", "context": ["The Lean Language Reference", "Run-Time Code", "Reference Counting", "Observing Uniqueness", "Observing Uniqueness"]}, "/Run-Time-Code/Reference-Counting/#process-_LPAR_in-Observing-Uniqueness_RPAR_": {"display": "process", "context": ["The Lean Language Reference", "Run-Time Code", "Reference Counting", "Observing Uniqueness", "Observing Uniqueness"]}}, "address": "/Run-Time-Code/Reference-Counting/"}, {"id": "process-_LPAR_in-Observing-Uniqueness_RPAR_-next", "data": {"/Run-Time-Code/Reference-Counting/#process-_LPAR_in-Observing-Uniqueness_RPAR_-next": {"display": "process", "context": ["The Lean Language Reference", "Run-Time Code", "Reference Counting", "Observing Uniqueness", "Observing Uniqueness"]}, "/Run-Time-Code/Reference-Counting/#process-_LPAR_in-Observing-Uniqueness_RPAR_": {"display": "process", "context": ["The Lean Language Reference", "Run-Time Code", "Reference Counting", "Observing Uniqueness", "Observing Uniqueness"]}}, "address": "/Run-Time-Code/Reference-Counting/"}], "printEven (in No structure subtyping)": [{"id": "printEven-_LPAR_in-No-structure-subtyping_RPAR_", "data": {"/The-Type-System/Inductive-Types/#printEven-_LPAR_in-No-structure-subtyping_RPAR_": {"display": "printEven", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Structure Declarations", "Structure Inheritance", "No structure subtyping"]}}, "address": "/The-Type-System/Inductive-Types/"}], "postalCodes (in Options as Safe Nullability)": [{"id": "postalCodes-_LPAR_in-Options-as-Safe-Nullability_RPAR_", "data": {"/Basic-Types/Optional-Values/#postalCodes-_LPAR_in-Options-as-Safe-Nullability_RPAR_": {"display": "postalCodes", "context": ["The Lean Language Reference", "Basic Types", "Optional Values", "Options as Safe Nullability"]}}, "address": "/Basic-Types/Optional-Values/"}], "pos0 (in Floating-Point Equality Is Not a Congruence)": [{"id": "pos0-_LPAR_in-Floating-Point-Equality-Is-Not-a-Congruence_RPAR_", "data": {"/Basic-Types/Floating-Point-Numbers/#pos0-_LPAR_in-Floating-Point-Equality-Is-Not-a-Congruence_RPAR_": {"display": "pos0", "context": ["The Lean Language Reference", "Basic Types", "Floating-Point Numbers", "Floating-Point Equality Is Not a Congruence"]}}, "address": "/Basic-Types/Floating-Point-Numbers/"}], "popcount_spec (in Popcount)": [{"id": "popcount_spec-_LPAR_in-Popcount_RPAR_", "data": {"/Basic-Types/Bitvectors/#popcount_spec-_LPAR_in-Popcount_RPAR_": {"display": "popcount_spec", "context": ["The Lean Language Reference", "Basic Types", "Bitvectors", "Automation", "Popcount"]}}, "address": "/Basic-Types/Bitvectors/"}], "popcount_correct (in Popcount)": [{"id": "popcount_correct-_LPAR_in-Popcount_RPAR_", "data": {"/Basic-Types/Bitvectors/#popcount_correct-_LPAR_in-Popcount_RPAR_": {"display": "popcount_correct", "context": ["The Lean Language Reference", "Basic Types", "Bitvectors", "Automation", "Popcount"]}}, "address": "/Basic-Types/Bitvectors/"}], "popcount (in Popcount)": [{"id": "popcount-_LPAR_in-Popcount_RPAR_", "data": {"/Basic-Types/Bitvectors/#popcount-_LPAR_in-Popcount_RPAR_": {"display": "popcount", "context": ["The Lean Language Reference", "Basic Types", "Bitvectors", "Automation", "Popcount"]}}, "address": "/Basic-Types/Bitvectors/"}], "plus_eq_add (in Reducibility and Tactics)": [{"id": "plus_eq_add-_LPAR_in-Reducibility-and-Tactics_RPAR_", "data": {"/Definitions/Recursive-Definitions/#plus_eq_add-_LPAR_in-Reducibility-and-Tactics_RPAR_": {"display": "plus_eq_add", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Controlling Reduction", "Reducibility and Tactics", "Reducibility and Tactics"]}}, "address": "/Definitions/Recursive-Definitions/"}], "plusTimes2 (in Class Abbreviations)": [{"id": "plusTimes2-_LPAR_in-Class-Abbreviations_RPAR_", "data": {"/Type-Classes/Class-Declarations/#plusTimes2-_LPAR_in-Class-Abbreviations_RPAR_": {"display": "plusTimes2", "context": ["The Lean Language Reference", "Type Classes", "Class Declarations", "Class Abbreviations", "Class Abbreviations"]}}, "address": "/Type-Classes/Class-Declarations/"}], "plusTimes1 (in Class Abbreviations)": [{"id": "plusTimes1-_LPAR_in-Class-Abbreviations_RPAR_", "data": {"/Type-Classes/Class-Declarations/#plusTimes1-_LPAR_in-Class-Abbreviations_RPAR_": {"display": "plusTimes1", "context": ["The Lean Language Reference", "Type Classes", "Class Declarations", "Class Abbreviations", "Class Abbreviations"]}}, "address": "/Type-Classes/Class-Declarations/"}], "plus (in Reducibility and Tactics)": [{"id": "plus-_LPAR_in-Reducibility-and-Tactics_RPAR_", "data": {"/Definitions/Recursive-Definitions/#plus-_LPAR_in-Reducibility-and-Tactics_RPAR_": {"display": "plus", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Controlling Reduction", "Reducibility and Tactics", "Reducibility and Tactics"]}}, "address": "/Definitions/Recursive-Definitions/"}], "plus (in Coercing to Function Types)": [{"id": "plus-_LPAR_in-Coercing-to-Function-Types_RPAR_", "data": {"/Coercions/Coercing-to-Function-Types/#plus-_LPAR_in-Coercing-to-Function-Types_RPAR_": {"display": "plus", "context": ["The Lean Language Reference", "Coercions", "Coercing to Function Types", "Coercing to Function Types"]}}, "address": "/Coercions/Coercing-to-Function-Types/"}], "perhapsFactorial (in Custom Operators in Lean's Output)": [{"id": "perhapsFactorial-_LPAR_in-Custom-Operators-in-Lean___s-Output_RPAR_", "data": {"/Notations-and-Macros/Custom-Operators/#perhapsFactorial-_LPAR_in-Custom-Operators-in-Lean___s-Output_RPAR_": {"display": "perhapsFactorial", "context": ["The Lean Language Reference", "Notations and Macros", "Custom Operators", "Custom Operators in Lean's Output"]}}, "address": "/Notations-and-Macros/Custom-Operators/"}], "parenSeq (in Widths and Newlines)": [{"id": "parenSeq-_LPAR_in-Widths-and-Newlines_RPAR_", "data": {"/Interacting-with-Lean/#parenSeq-_LPAR_in-Widths-and-Newlines_RPAR_": {"display": "parenSeq", "context": ["The Lean Language Reference", "Interacting with Lean", "Formatted Output", "Format", "Widths and Newlines"]}}, "address": "/Interacting-with-Lean/"}], "parenSeq (in Grouping and Filling)": [{"id": "parenSeq-_LPAR_in-Grouping-and-Filling_RPAR_", "data": {"/Interacting-with-Lean/#parenSeq-_LPAR_in-Grouping-and-Filling_RPAR_": {"display": "parenSeq", "context": ["The Lean Language Reference", "Interacting with Lean", "Formatted Output", "Format", "Grouping and Filling"]}}, "address": "/Interacting-with-Lean/"}], "p_all (in Included and Omitted Section Variables)": [{"id": "p_all-_LPAR_in-Included-and-Omitted-Section-Variables_RPAR_-next", "data": {"/Namespaces-and-Sections/#p_all-_LPAR_in-Included-and-Omitted-Section-Variables_RPAR_-next-next": {"display": "p_all", "context": ["The Lean Language Reference", "Namespaces and Sections", "Section Scopes", "Section Variables", "Included and Omitted Section Variables"]}, "/Namespaces-and-Sections/#p_all-_LPAR_in-Included-and-Omitted-Section-Variables_RPAR_-next": {"display": "p_all", "context": ["The Lean Language Reference", "Namespaces and Sections", "Section Scopes", "Section Variables", "Included and Omitted Section Variables"]}, "/Namespaces-and-Sections/#p_all-_LPAR_in-Included-and-Omitted-Section-Variables_RPAR_": {"display": "p_all", "context": ["The Lean Language Reference", "Namespaces and Sections", "Section Scopes", "Section Variables", "Included and Omitted Section Variables"]}}, "address": "/Namespaces-and-Sections/"}, {"id": "p_all-_LPAR_in-Included-and-Omitted-Section-Variables_RPAR_", "data": {"/Namespaces-and-Sections/#p_all-_LPAR_in-Included-and-Omitted-Section-Variables_RPAR_-next-next": {"display": "p_all", "context": ["The Lean Language Reference", "Namespaces and Sections", "Section Scopes", "Section Variables", "Included and Omitted Section Variables"]}, "/Namespaces-and-Sections/#p_all-_LPAR_in-Included-and-Omitted-Section-Variables_RPAR_-next": {"display": "p_all", "context": ["The Lean Language Reference", "Namespaces and Sections", "Section Scopes", "Section Variables", "Included and Omitted Section Variables"]}, "/Namespaces-and-Sections/#p_all-_LPAR_in-Included-and-Omitted-Section-Variables_RPAR_": {"display": "p_all", "context": ["The Lean Language Reference", "Namespaces and Sections", "Section Scopes", "Section Variables", "Included and Omitted Section Variables"]}}, "address": "/Namespaces-and-Sections/"}, {"id": "p_all-_LPAR_in-Included-and-Omitted-Section-Variables_RPAR_-next-next", "data": {"/Namespaces-and-Sections/#p_all-_LPAR_in-Included-and-Omitted-Section-Variables_RPAR_-next-next": {"display": "p_all", "context": ["The Lean Language Reference", "Namespaces and Sections", "Section Scopes", "Section Variables", "Included and Omitted Section Variables"]}, "/Namespaces-and-Sections/#p_all-_LPAR_in-Included-and-Omitted-Section-Variables_RPAR_-next": {"display": "p_all", "context": ["The Lean Language Reference", "Namespaces and Sections", "Section Scopes", "Section Variables", "Included and Omitted Section Variables"]}, "/Namespaces-and-Sections/#p_all-_LPAR_in-Included-and-Omitted-Section-Variables_RPAR_": {"display": "p_all", "context": ["The Lean Language Reference", "Namespaces and Sections", "Section Scopes", "Section Variables", "Included and Omitted Section Variables"]}}, "address": "/Namespaces-and-Sections/"}], "p (in Forward Pattern Generation)": [{"id": "p-_LPAR_in-Forward-Pattern-Generation_RPAR_", "data": {"/The--grind--tactic/E___matching/#p-_LPAR_in-Forward-Pattern-Generation_RPAR_": {"display": "p", "context": ["The Lean Language Reference", "The grind tactic", "E‑matching", "Inspecting Patterns", "Forward Pattern Generation"]}}, "address": "/The--grind--tactic/E___matching/"}], "oneTwoThree' (in Anonymous constructors)": [{"id": "oneTwoThree___-_LPAR_in-Anonymous-constructors_RPAR_", "data": {"/The-Type-System/Inductive-Types/#oneTwoThree___-_LPAR_in-Anonymous-constructors_RPAR_": {"display": "oneTwoThree'", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Inductive Type Declarations", "Anonymous Constructor Syntax", "Anonymous constructors"]}}, "address": "/The-Type-System/Inductive-Types/"}], "oneTwoThree (in Dependent Coercion)": [{"id": "oneTwoThree-_LPAR_in-Dependent-Coercion_RPAR_", "data": {"/Coercions/Coercing-Between-Types/#oneTwoThree-_LPAR_in-Dependent-Coercion_RPAR_": {"display": "oneTwoThree", "context": ["The Lean Language Reference", "Coercions", "Coercing Between Types", "Dependent Coercion"]}}, "address": "/Coercions/Coercing-Between-Types/"}], "oneTwoThree (in Array Literals)": [{"id": "oneTwoThree-_LPAR_in-Array-Literals_RPAR_", "data": {"/Basic-Types/Arrays/#oneTwoThree-_LPAR_in-Array-Literals_RPAR_": {"display": "oneTwoThree", "context": ["The Lean Language Reference", "Basic Types", "Arrays", "Syntax", "Array Literals"]}}, "address": "/Basic-Types/Arrays/"}], "oneTwoThree (in Anonymous constructors)": [{"id": "oneTwoThree-_LPAR_in-Anonymous-constructors_RPAR_", "data": {"/The-Type-System/Inductive-Types/#oneTwoThree-_LPAR_in-Anonymous-constructors_RPAR_": {"display": "oneTwoThree", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Inductive Type Declarations", "Anonymous Constructor Syntax", "Anonymous constructors"]}}, "address": "/The-Type-System/Inductive-Types/"}], "one (in Updating arrays)": [{"id": "one-_LPAR_in-Updating-arrays_RPAR_", "data": {"/The-Type-System/Inductive-Types/#one-_LPAR_in-Updating-arrays_RPAR_": {"display": "one", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Structure Declarations", "Structure Constructors", "Updating arrays"]}}, "address": "/The-Type-System/Inductive-Types/"}], "one (in Defining Coercions: Decimal Numbers)": [{"id": "one-_LPAR_in-Defining-Coercions___-Decimal-Numbers_RPAR_", "data": {"/Coercions/#one-_LPAR_in-Defining-Coercions___-Decimal-Numbers_RPAR_": {"display": "one", "context": ["The Lean Language Reference", "Coercions", "Defining Coercions: Decimal Numbers"]}}, "address": "/Coercions/"}], "ofNatEvenPlusTwo (in Default Instances)": [{"id": "ofNatEvenPlusTwo-_LPAR_in-Default-Instances_RPAR_", "data": {"/Type-Classes/Instance-Declarations/#ofNatEvenPlusTwo-_LPAR_in-Default-Instances_RPAR_": {"display": "ofNatEvenPlusTwo", "context": ["The Lean Language Reference", "Type Classes", "Instance Declarations", "Default Instances", "Default Instances"]}}, "address": "/Type-Classes/Instance-Declarations/"}], "ofNatEven0 (in Default Instances)": [{"id": "ofNatEven0-_LPAR_in-Default-Instances_RPAR_", "data": {"/Type-Classes/Instance-Declarations/#ofNatEven0-_LPAR_in-Default-Instances_RPAR_": {"display": "ofNatEven0", "context": ["The Lean Language Reference", "Type Classes", "Instance Declarations", "Default Instances", "Default Instances"]}}, "address": "/Type-Classes/Instance-Declarations/"}], "odd (in Mutual Structural Recursion Over Non-Mutual Types)": [{"id": "odd-_LPAR_in-Mutual-Structural-Recursion-Over-Non-Mutual-Types_RPAR_", "data": {"/Definitions/Recursive-Definitions/#odd-_LPAR_in-Mutual-Structural-Recursion-Over-Non-Mutual-Types_RPAR_": {"display": "odd", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Structural Recursion", "Mutual Structural Recursion", "Mutual Structural Recursion Over Non-Mutual Types"]}}, "address": "/Definitions/Recursive-Definitions/"}], "observe (in Lazy Lists)": [{"id": "observe-_LPAR_in-Lazy-Lists_RPAR_", "data": {"/Basic-Types/Lazy-Computations/#observe-_LPAR_in-Lazy-Lists_RPAR_": {"display": "observe", "context": ["The Lean Language Reference", "Basic Types", "Lazy Computations", "Coercions", "Lazy Lists"]}}, "address": "/Basic-Types/Lazy-Computations/"}], "nums (in Grouping and Filling)": [{"id": "nums-_LPAR_in-Grouping-and-Filling_RPAR_", "data": {"/Interacting-with-Lean/#nums-_LPAR_in-Grouping-and-Filling_RPAR_": {"display": "nums", "context": ["The Lean Language Reference", "Interacting with Lean", "Formatted Output", "Format", "Grouping and Filling"]}}, "address": "/Interacting-with-Lean/"}], "notType (in Avoiding a Type)": [{"id": "notType-_LPAR_in-Avoiding-a-Type_RPAR_", "data": {"/Notations-and-Macros/Elaborators/#notType-_LPAR_in-Avoiding-a-Type_RPAR_": {"display": "notType", "context": ["The Lean Language Reference", "Notations and Macros", "Elaborators", "Term Elaborators", "Avoiding a Type"]}}, "address": "/Notations-and-Macros/Elaborators/"}], "notInductive (in Ineligible decreasing parameters)": [{"id": "notInductive-_LPAR_in-Ineligible-decreasing-parameters_RPAR_", "data": {"/Definitions/Recursive-Definitions/#notInductive-_LPAR_in-Ineligible-decreasing-parameters_RPAR_": {"display": "notInductive", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Structural Recursion", "Explicit Structural Recursion", "Ineligible decreasing parameters"]}}, "address": "/Definitions/Recursive-Definitions/"}], "notAck (in Inference too powerful)": [{"id": "notAck-_LPAR_in-Inference-too-powerful_RPAR_", "data": {"/Definitions/Recursive-Definitions/#notAck-_LPAR_in-Inference-too-powerful_RPAR_": {"display": "notAck", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Well-Founded Recursion", "Inferring Well-Founded Recursion", "Inference too powerful"]}}, "address": "/Definitions/Recursive-Definitions/"}], "nonzero (in Match Patterns Follow Reduction)": [{"id": "nonzero-_LPAR_in-Match-Patterns-Follow-Reduction_RPAR_", "data": {"/Terms/Pattern-Matching/#nonzero-_LPAR_in-Match-Patterns-Follow-Reduction_RPAR_": {"display": "nonzero", "context": ["The Lean Language Reference", "Terms", "Pattern Matching", "Custom Pattern Functions", "Match Patterns Follow Reduction"]}}, "address": "/Terms/Pattern-Matching/"}], "nonParametric (in Inconsistencies From Axioms)": [{"id": "nonParametric-_LPAR_in-Inconsistencies-From-Axioms_RPAR_", "data": {"/Axioms/#nonParametric-_LPAR_in-Inconsistencies-From-Axioms_RPAR_": {"display": "nonParametric", "context": ["The Lean Language Reference", "Axioms", "Consistency", "Inconsistencies From Axioms"]}}, "address": "/Axioms/"}], "nodup_correct_directly": [{"id": "nodup_correct_directly", "data": {"/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/#nodup_correct_directly": {"display": "nodup_correct_directly", "context": ["The Lean Language Reference", "The mvcgen tactic", "Tutorial: Verifying Imperative Programs Using mvcgen", "Control Flow"]}}, "address": "/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/"}], "nodup_correct": [{"id": "nodup_correct", "data": {"/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/#nodup_correct": {"display": "nodup_correct", "context": ["The Lean Language Reference", "The mvcgen tactic", "Tutorial: Verifying Imperative Programs Using mvcgen", "Control Flow"]}}, "address": "/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/"}], "nodup": [{"id": "nodup", "data": {"/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/#nodup": {"display": "nodup", "context": ["The Lean Language Reference", "The mvcgen tactic", "Tutorial: Verifying Imperative Programs Using mvcgen", "Control Flow"]}}, "address": "/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/"}], "noConfusionDiagonal": [{"id": "noConfusionDiagonal", "data": {"/Basic-Types/Natural-Numbers/#noConfusionDiagonal": {"display": "noConfusionDiagonal", "context": ["The Lean Language Reference", "Basic Types", "Natural Numbers", "Logical Model", "Peano Axioms"]}}, "address": "/Basic-Types/Natural-Numbers/"}], "noConfusion": [{"id": "noConfusion", "data": {"/Basic-Types/Natural-Numbers/#noConfusion": {"display": "noConfusion", "context": ["The Lean Language Reference", "Basic Types", "Natural Numbers", "Logical Model", "Peano Axioms"]}}, "address": "/Basic-Types/Natural-Numbers/"}], "nine (in Subtype Coercions)": [{"id": "nine-_LPAR_in-Subtype-Coercions_RPAR_", "data": {"/Basic-Types/Subtypes/#nine-_LPAR_in-Subtype-Coercions_RPAR_": {"display": "nine", "context": ["The Lean Language Reference", "Basic Types", "Subtypes", "Subtype Coercions"]}}, "address": "/Basic-Types/Subtypes/"}], "nextPrime (in Partial Functions in Proofs)": [{"id": "nextPrime-_LPAR_in-Partial-Functions-in-Proofs_RPAR_", "data": {"/Definitions/Recursive-Definitions/#nextPrime-_LPAR_in-Partial-Functions-in-Proofs_RPAR_": {"display": "nextPrime", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Partial and Unsafe Definitions", "Partial Functions", "Partial Functions in Proofs"]}}, "address": "/Definitions/Recursive-Definitions/"}], "nextOdd (in Axioms and Compilation)": [{"id": "nextOdd-_LPAR_in-Axioms-and-Compilation_RPAR_", "data": {"/Axioms/#nextOdd-_LPAR_in-Axioms-and-Compilation_RPAR_": {"display": "nextOdd", "context": ["The Lean Language Reference", "Axioms", "Reduction", "Axioms and Compilation"]}}, "address": "/Axioms/"}], "neg0 (in Floating-Point Equality Is Not a Congruence)": [{"id": "neg0-_LPAR_in-Floating-Point-Equality-Is-Not-a-Congruence_RPAR_", "data": {"/Basic-Types/Floating-Point-Numbers/#neg0-_LPAR_in-Floating-Point-Equality-Is-Not-a-Congruence_RPAR_": {"display": "neg0", "context": ["The Lean Language Reference", "Basic Types", "Floating-Point Numbers", "Floating-Point Equality Is Not a Congruence"]}}, "address": "/Basic-Types/Floating-Point-Numbers/"}], "neg' (in Integer Negation and Addition)": [{"id": "neg___-_LPAR_in-Integer-Negation-and-Addition_RPAR_", "data": {"/The-Type-System/Quotients/#neg___-_LPAR_in-Integer-Negation-and-Addition_RPAR_": {"display": "neg'", "context": ["The Lean Language Reference", "The Type System", "Quotients", "Quotient API", "Eliminating Quotients", "Integer Negation and Addition"]}}, "address": "/The-Type-System/Quotients/"}], "natWriter (in Dependent Coercion to Functions)": [{"id": "natWriter-_LPAR_in-Dependent-Coercion-to-Functions_RPAR_", "data": {"/Coercions/Coercing-to-Function-Types/#natWriter-_LPAR_in-Dependent-Coercion-to-Functions_RPAR_": {"display": "natWriter", "context": ["The Lean Language Reference", "Coercions", "Coercing to Function Types", "Dependent Coercion to Functions"]}}, "address": "/Coercions/Coercing-to-Function-Types/"}], "n (in Mutual Block Scope)": [{"id": "n-_LPAR_in-Mutual-Block-Scope_RPAR_-next", "data": {"/Definitions/Recursive-Definitions/#n-_LPAR_in-Mutual-Block-Scope_RPAR_-next": {"display": "n", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Mutual Recursion", "Mutual Block Scope"]}, "/Definitions/Recursive-Definitions/#n-_LPAR_in-Mutual-Block-Scope_RPAR_": {"display": "n", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Mutual Recursion", "Mutual Block Scope"]}}, "address": "/Definitions/Recursive-Definitions/"}, {"id": "n-_LPAR_in-Mutual-Block-Scope_RPAR_", "data": {"/Definitions/Recursive-Definitions/#n-_LPAR_in-Mutual-Block-Scope_RPAR_-next": {"display": "n", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Mutual Recursion", "Mutual Block Scope"]}, "/Definitions/Recursive-Definitions/#n-_LPAR_in-Mutual-Block-Scope_RPAR_": {"display": "n", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Mutual Recursion", "Mutual Block Scope"]}}, "address": "/Definitions/Recursive-Definitions/"}], "mySum_correct_vanilla": [{"id": "mySum_correct_vanilla", "data": {"/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/#mySum_correct_vanilla": {"display": "mySum_correct_vanilla", "context": ["The Lean Language Reference", "The mvcgen tactic", "Tutorial: Verifying Imperative Programs Using mvcgen", "Loops and Invariants"]}}, "address": "/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/"}], "mySum_correct_shorter": [{"id": "mySum_correct_shorter", "data": {"/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/#mySum_correct_shorter": {"display": "mySum_correct_shorter", "context": ["The Lean Language Reference", "The mvcgen tactic", "Tutorial: Verifying Imperative Programs Using mvcgen", "Loops and Invariants"]}}, "address": "/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/"}], "mySum_correct_short": [{"id": "mySum_correct_short", "data": {"/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/#mySum_correct_short": {"display": "mySum_correct_short", "context": ["The Lean Language Reference", "The mvcgen tactic", "Tutorial: Verifying Imperative Programs Using mvcgen", "Loops and Invariants"]}}, "address": "/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/"}], "mySum_correct": [{"id": "mySum_correct", "data": {"/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/#mySum_correct": {"display": "mySum_correct", "context": ["The Lean Language Reference", "The mvcgen tactic", "Tutorial: Verifying Imperative Programs Using mvcgen", "Loops and Invariants"]}}, "address": "/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/"}], "mySum": [{"id": "mySum", "data": {"/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/#mySum": {"display": "mySum", "context": ["The Lean Language Reference", "The mvcgen tactic", "Tutorial: Verifying Imperative Programs Using mvcgen", "Loops and Invariants"]}}, "address": "/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/"}], "mustBeEqual (in Parameter Scope)": [{"id": "mustBeEqual-_LPAR_in-Parameter-Scope_RPAR_", "data": {"/Definitions/Headers-and-Signatures/#mustBeEqual-_LPAR_in-Parameter-Scope_RPAR_": {"display": "mustBeEqual", "context": ["The Lean Language Reference", "Definitions", "Headers and Signatures", "Bracketed Parameter Bindings", "Parameter Scope"]}}, "address": "/Definitions/Headers-and-Signatures/"}], "mkStx (in Optional Splices)": [{"id": "mkStx-_LPAR_in-Optional-Splices_RPAR_", "data": {"/Notations-and-Macros/Macros/#mkStx-_LPAR_in-Optional-Splices_RPAR_": {"display": "mkStx", "context": ["The Lean Language Reference", "Notations and Macros", "Macros", "Quotation", "Splices", "Optional Splices"]}}, "address": "/Notations-and-Macros/Macros/"}], "mkFresh_spec": [{"id": "mkFresh_spec", "data": {"/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/#mkFresh_spec": {"display": "mkFresh_spec", "context": ["The Lean Language Reference", "The mvcgen tactic", "Tutorial: Verifying Imperative Programs Using mvcgen", "Compositional Reasoning About Effectful Programs Using Hoare Triples", "Composing Specifications"]}}, "address": "/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/"}], "mkFreshN_spec": [{"id": "mkFreshN_spec", "data": {"/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/#mkFreshN_spec": {"display": "mkFreshN_spec", "context": ["The Lean Language Reference", "The mvcgen tactic", "Tutorial: Verifying Imperative Programs Using mvcgen", "Compositional Reasoning About Effectful Programs Using Hoare Triples", "Composing Specifications"]}}, "address": "/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/"}], "mkFreshN_correct_compositional": [{"id": "mkFreshN_correct_compositional", "data": {"/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/#mkFreshN_correct_compositional": {"display": "mkFreshN_correct_compositional", "context": ["The Lean Language Reference", "The mvcgen tactic", "Tutorial: Verifying Imperative Programs Using mvcgen", "Compositional Reasoning About Effectful Programs Using Hoare Triples", "Composing Specifications"]}}, "address": "/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/"}], "mkFreshN_correct": [{"id": "mkFreshN_correct", "data": {"/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/#mkFreshN_correct": {"display": "mkFreshN_correct", "context": ["The Lean Language Reference", "The mvcgen tactic", "Tutorial: Verifying Imperative Programs Using mvcgen", "Compositional Reasoning About Effectful Programs Using Hoare Triples"]}}, "address": "/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/"}], "mkFreshN": [{"id": "mkFreshN", "data": {"/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/#mkFreshN": {"display": "mkFreshN", "context": ["The Lean Language Reference", "The mvcgen tactic", "Tutorial: Verifying Imperative Programs Using mvcgen", "Compositional Reasoning About Effectful Programs Using Hoare Triples"]}}, "address": "/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/"}], "mkFresh": [{"id": "mkFresh", "data": {"/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/#mkFresh": {"display": "mkFresh", "context": ["The Lean Language Reference", "The mvcgen tactic", "Tutorial: Verifying Imperative Programs Using mvcgen", "Compositional Reasoning About Effectful Programs Using Hoare Triples"]}}, "address": "/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/"}], "min' (in Structural Recursion Under Pairs)": [{"id": "min___-_LPAR_in-Structural-Recursion-Under-Pairs_RPAR_-next", "data": {"/Definitions/Recursive-Definitions/#min___-_LPAR_in-Structural-Recursion-Under-Pairs_RPAR_-next": {"display": "min'", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Structural Recursion", "Explicit Structural Recursion", "Structural Recursion Under Pairs"]}, "/Definitions/Recursive-Definitions/#min___-_LPAR_in-Structural-Recursion-Under-Pairs_RPAR_": {"display": "min'", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Structural Recursion", "Explicit Structural Recursion", "Structural Recursion Under Pairs"]}}, "address": "/Definitions/Recursive-Definitions/"}, {"id": "min___-_LPAR_in-Structural-Recursion-Under-Pairs_RPAR_", "data": {"/Definitions/Recursive-Definitions/#min___-_LPAR_in-Structural-Recursion-Under-Pairs_RPAR_-next": {"display": "min'", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Structural Recursion", "Explicit Structural Recursion", "Structural Recursion Under Pairs"]}, "/Definitions/Recursive-Definitions/#min___-_LPAR_in-Structural-Recursion-Under-Pairs_RPAR_": {"display": "min'", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Structural Recursion", "Explicit Structural Recursion", "Structural Recursion Under Pairs"]}}, "address": "/Definitions/Recursive-Definitions/"}], "min' (in Simultaneous Matching vs Matching Pairs for Structural Recursion)": [{"id": "min___-_LPAR_in-Simultaneous-Matching-vs-Matching-Pairs-for-Structural-Recursion_RPAR_-next", "data": {"/Definitions/Recursive-Definitions/#min___-_LPAR_in-Simultaneous-Matching-vs-Matching-Pairs-for-Structural-Recursion_RPAR_-next": {"display": "min'", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Structural Recursion", "Explicit Structural Recursion", "Simultaneous Matching vs Matching Pairs for Structural Recursion"]}, "/Definitions/Recursive-Definitions/#min___-_LPAR_in-Simultaneous-Matching-vs-Matching-Pairs-for-Structural-Recursion_RPAR_": {"display": "min'", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Structural Recursion", "Explicit Structural Recursion", "Simultaneous Matching vs Matching Pairs for Structural Recursion"]}}, "address": "/Definitions/Recursive-Definitions/"}, {"id": "min___-_LPAR_in-Simultaneous-Matching-vs-Matching-Pairs-for-Structural-Recursion_RPAR_", "data": {"/Definitions/Recursive-Definitions/#min___-_LPAR_in-Simultaneous-Matching-vs-Matching-Pairs-for-Structural-Recursion_RPAR_-next": {"display": "min'", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Structural Recursion", "Explicit Structural Recursion", "Simultaneous Matching vs Matching Pairs for Structural Recursion"]}, "/Definitions/Recursive-Definitions/#min___-_LPAR_in-Simultaneous-Matching-vs-Matching-Pairs-for-Structural-Recursion_RPAR_": {"display": "min'", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Structural Recursion", "Explicit Structural Recursion", "Simultaneous Matching vs Matching Pairs for Structural Recursion"]}}, "address": "/Definitions/Recursive-Definitions/"}], "map (in Universe-polymorphic map)": [{"id": "map-_LPAR_in-Universe-polymorphic--map_RPAR_", "data": {"/The-Type-System/Universes/#map-_LPAR_in-Universe-polymorphic--map_RPAR_": {"display": "map", "context": ["The Lean Language Reference", "The Type System", "Universes", "Polymorphism", "Universe Variable Bindings", "Universe-polymorphic map"]}}, "address": "/The-Type-System/Universes/"}], "map (in No Automatic Implicit Parameters)": [{"id": "map-_LPAR_in-No-Automatic-Implicit-Parameters_RPAR_-next-next", "data": {"/Definitions/Headers-and-Signatures/#map-_LPAR_in-No-Automatic-Implicit-Parameters_RPAR_-next-next": {"display": "map", "context": ["The Lean Language Reference", "Definitions", "Headers and Signatures", "Automatic Implicit Parameters", "No Automatic Implicit Parameters"]}, "/Definitions/Headers-and-Signatures/#map-_LPAR_in-No-Automatic-Implicit-Parameters_RPAR_-next": {"display": "map", "context": ["The Lean Language Reference", "Definitions", "Headers and Signatures", "Automatic Implicit Parameters", "No Automatic Implicit Parameters"]}, "/Definitions/Headers-and-Signatures/#map-_LPAR_in-No-Automatic-Implicit-Parameters_RPAR_": {"display": "map", "context": ["The Lean Language Reference", "Definitions", "Headers and Signatures", "Automatic Implicit Parameters", "No Automatic Implicit Parameters"]}}, "address": "/Definitions/Headers-and-Signatures/"}, {"id": "map-_LPAR_in-No-Automatic-Implicit-Parameters_RPAR_-next", "data": {"/Definitions/Headers-and-Signatures/#map-_LPAR_in-No-Automatic-Implicit-Parameters_RPAR_-next-next": {"display": "map", "context": ["The Lean Language Reference", "Definitions", "Headers and Signatures", "Automatic Implicit Parameters", "No Automatic Implicit Parameters"]}, "/Definitions/Headers-and-Signatures/#map-_LPAR_in-No-Automatic-Implicit-Parameters_RPAR_-next": {"display": "map", "context": ["The Lean Language Reference", "Definitions", "Headers and Signatures", "Automatic Implicit Parameters", "No Automatic Implicit Parameters"]}, "/Definitions/Headers-and-Signatures/#map-_LPAR_in-No-Automatic-Implicit-Parameters_RPAR_": {"display": "map", "context": ["The Lean Language Reference", "Definitions", "Headers and Signatures", "Automatic Implicit Parameters", "No Automatic Implicit Parameters"]}}, "address": "/Definitions/Headers-and-Signatures/"}, {"id": "map-_LPAR_in-No-Automatic-Implicit-Parameters_RPAR_", "data": {"/Definitions/Headers-and-Signatures/#map-_LPAR_in-No-Automatic-Implicit-Parameters_RPAR_-next-next": {"display": "map", "context": ["The Lean Language Reference", "Definitions", "Headers and Signatures", "Automatic Implicit Parameters", "No Automatic Implicit Parameters"]}, "/Definitions/Headers-and-Signatures/#map-_LPAR_in-No-Automatic-Implicit-Parameters_RPAR_-next": {"display": "map", "context": ["The Lean Language Reference", "Definitions", "Headers and Signatures", "Automatic Implicit Parameters", "No Automatic Implicit Parameters"]}, "/Definitions/Headers-and-Signatures/#map-_LPAR_in-No-Automatic-Implicit-Parameters_RPAR_": {"display": "map", "context": ["The Lean Language Reference", "Definitions", "Headers and Signatures", "Automatic Implicit Parameters", "No Automatic Implicit Parameters"]}}, "address": "/Definitions/Headers-and-Signatures/"}], "map (in Automatic Implicit Parameters)": [{"id": "map-_LPAR_in-Automatic-Implicit-Parameters_RPAR_", "data": {"/Definitions/Headers-and-Signatures/#map-_LPAR_in-Automatic-Implicit-Parameters_RPAR_": {"display": "map", "context": ["The Lean Language Reference", "Definitions", "Headers and Signatures", "Automatic Implicit Parameters", "Automatic Implicit Parameters"]}}, "address": "/Definitions/Headers-and-Signatures/"}], "map (in Automatic Implicit Parameters and Universe Polymorphism)": [{"id": "map-_LPAR_in-Automatic-Implicit-Parameters-and-Universe-Polymorphism_RPAR_-next", "data": {"/The-Type-System/Universes/#map-_LPAR_in-Automatic-Implicit-Parameters-and-Universe-Polymorphism_RPAR_-next": {"display": "map", "context": ["The Lean Language Reference", "The Type System", "Universes", "Polymorphism", "Universe Variable Bindings", "Automatic Implicit Parameters and Universe Polymorphism"]}, "/The-Type-System/Universes/#map-_LPAR_in-Automatic-Implicit-Parameters-and-Universe-Polymorphism_RPAR_": {"display": "map", "context": ["The Lean Language Reference", "The Type System", "Universes", "Polymorphism", "Universe Variable Bindings", "Automatic Implicit Parameters and Universe Polymorphism"]}}, "address": "/The-Type-System/Universes/"}, {"id": "map-_LPAR_in-Automatic-Implicit-Parameters-and-Universe-Polymorphism_RPAR_", "data": {"/The-Type-System/Universes/#map-_LPAR_in-Automatic-Implicit-Parameters-and-Universe-Polymorphism_RPAR_-next": {"display": "map", "context": ["The Lean Language Reference", "The Type System", "Universes", "Polymorphism", "Universe Variable Bindings", "Automatic Implicit Parameters and Universe Polymorphism"]}, "/The-Type-System/Universes/#map-_LPAR_in-Automatic-Implicit-Parameters-and-Universe-Polymorphism_RPAR_": {"display": "map", "context": ["The Lean Language Reference", "The Type System", "Universes", "Polymorphism", "Universe Variable Bindings", "Automatic Implicit Parameters and Universe Polymorphism"]}}, "address": "/The-Type-System/Universes/"}], "main (in Throwing and Catching Errors)": [{"id": "main-_LPAR_in-Throwing-and-Catching-Errors_RPAR_", "data": {"/IO/Logical-Model/#main-_LPAR_in-Throwing-and-Catching-Errors_RPAR_": {"display": "main", "context": ["The Lean Language Reference", "IO", "Logical Model", "Errors and Error Handling in IO", "Throwing and Catching Errors"]}}, "address": "/IO/Logical-Model/"}], "main (in Running a Program)": [{"id": "main-_LPAR_in-Running-a-Program_RPAR_", "data": {"/IO/Processes/#main-_LPAR_in-Running-a-Program_RPAR_": {"display": "main", "context": ["The Lean Language Reference", "IO", "Processes", "Running Processes", "Running a Program"]}}, "address": "/IO/Processes/"}], "main (in Running a Program on a File)": [{"id": "main-_LPAR_in-Running-a-Program-on-a-File_RPAR_", "data": {"/IO/Processes/#main-_LPAR_in-Running-a-Program-on-a-File_RPAR_": {"display": "main", "context": ["The Lean Language Reference", "IO", "Processes", "Running Processes", "Running a Program on a File"]}}, "address": "/IO/Processes/"}], "main (in Reference Cells as Locks)": [{"id": "main-_LPAR_in-Reference-Cells-as-Locks_RPAR_", "data": {"/IO/Mutable-References/#main-_LPAR_in-Reference-Cells-as-Locks_RPAR_": {"display": "main", "context": ["The Lean Language Reference", "IO", "Mutable References", "Concurrency", "Reference Cells as Locks"]}}, "address": "/IO/Mutable-References/"}], "main (in Reading from Standard Input)": [{"id": "main-_LPAR_in-Reading-from-Standard-Input_RPAR_", "data": {"/IO/Files___-File-Handles___-and-Streams/#main-_LPAR_in-Reading-from-Standard-Input_RPAR_": {"display": "main", "context": ["The Lean Language Reference", "IO", "Files, File Handles, and Streams", "Standard I/O", "Reading from Standard Input"]}}, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "main (in Printing)": [{"id": "main-_LPAR_in-Printing_RPAR_", "data": {"/IO/Console-Output/#main-_LPAR_in-Printing_RPAR_": {"display": "main", "context": ["The Lean Language Reference", "IO", "Console Output", "Printing"]}}, "address": "/IO/Console-Output/"}], "main (in One File, Multiple Handles)": [{"id": "main-_LPAR_in-One-File___-Multiple-Handles_RPAR_", "data": {"/IO/Files___-File-Handles___-and-Streams/#main-_LPAR_in-One-File___-Multiple-Handles_RPAR_": {"display": "main", "context": ["The Lean Language Reference", "IO", "Files, File Handles, and Streams", "Low-Level File API", "One File, Multiple Handles"]}}, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "main (in Observing Uniqueness)": [{"id": "main-_LPAR_in-Observing-Uniqueness_RPAR_-next", "data": {"/Run-Time-Code/Reference-Counting/#main-_LPAR_in-Observing-Uniqueness_RPAR_-next": {"display": "main", "context": ["The Lean Language Reference", "Run-Time Code", "Reference Counting", "Observing Uniqueness", "Observing Uniqueness"]}, "/Run-Time-Code/Reference-Counting/#main-_LPAR_in-Observing-Uniqueness_RPAR_": {"display": "main", "context": ["The Lean Language Reference", "Run-Time Code", "Reference Counting", "Observing Uniqueness", "Observing Uniqueness"]}}, "address": "/Run-Time-Code/Reference-Counting/"}, {"id": "main-_LPAR_in-Observing-Uniqueness_RPAR_", "data": {"/Run-Time-Code/Reference-Counting/#main-_LPAR_in-Observing-Uniqueness_RPAR_-next": {"display": "main", "context": ["The Lean Language Reference", "Run-Time Code", "Reference Counting", "Observing Uniqueness", "Observing Uniqueness"]}, "/Run-Time-Code/Reference-Counting/#main-_LPAR_in-Observing-Uniqueness_RPAR_": {"display": "main", "context": ["The Lean Language Reference", "Run-Time Code", "Reference Counting", "Observing Uniqueness", "Observing Uniqueness"]}}, "address": "/Run-Time-Code/Reference-Counting/"}], "main (in Monadic Collection Operations)": [{"id": "main-_LPAR_in-Monadic-Collection-Operations_RPAR_", "data": {"/Functors___-Monads-and--do--Notation/API-Reference/#main-_LPAR_in-Monadic-Collection-Operations_RPAR_": {"display": "main", "context": ["The Lean Language Reference", "Functors, Monads and do -Notation", "API Reference", "Monadic Collection Operations"]}}, "address": "/Functors___-Monads-and--do--Notation/API-Reference/"}], "main (in Infix Functor and Applicative Operators)": [{"id": "main-_LPAR_in-Infix--Functor--and--Applicative--Operators_RPAR_", "data": {"/Functors___-Monads-and--do--Notation/Syntax/#main-_LPAR_in-Infix--Functor--and--Applicative--Operators_RPAR_": {"display": "main", "context": ["The Lean Language Reference", "Functors, Monads and do -Notation", "Syntax", "Infix Operators", "Applicative Functors", "Infix Functor and Applicative Operators"]}}, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}], "main (in Dependent Pairs with Data)": [{"id": "main-_LPAR_in-Dependent-Pairs-with-Data_RPAR_", "data": {"/Basic-Types/Tuples/#main-_LPAR_in-Dependent-Pairs-with-Data_RPAR_": {"display": "main", "context": ["The Lean Language Reference", "Basic Types", "Tuples", "Dependent Pairs", "Dependent Pairs with Data"]}}, "address": "/Basic-Types/Tuples/"}], "main (in Data races with get and set)": [{"id": "main-_LPAR_in-Data-races-with--get--and--set_RPAR_", "data": {"/IO/Mutable-References/#main-_LPAR_in-Data-races-with--get--and--set_RPAR_": {"display": "main", "context": ["The Lean Language Reference", "IO", "Mutable References", "State Transformers", "Reading and Writing", "Data races with get and set"]}}, "address": "/IO/Mutable-References/"}], "main (in Closing a Subprocess's Standard Input)": [{"id": "main-_LPAR_in-Closing-a-Subprocess___s-Standard-Input_RPAR_", "data": {"/IO/Processes/#main-_LPAR_in-Closing-a-Subprocess___s-Standard-Input_RPAR_": {"display": "main", "context": ["The Lean Language Reference", "IO", "Processes", "Running Processes", "Closing a Subprocess's Standard Input"]}}, "address": "/IO/Processes/"}], "main (in Checking Exit Codes)": [{"id": "main-_LPAR_in-Checking-Exit-Codes_RPAR_", "data": {"/IO/Processes/#main-_LPAR_in-Checking-Exit-Codes_RPAR_": {"display": "main", "context": ["The Lean Language Reference", "IO", "Processes", "Running Processes", "Checking Exit Codes"]}}, "address": "/IO/Processes/"}], "main (in Avoiding data races with modify)": [{"id": "main-_LPAR_in-Avoiding-data-races-with--modify_RPAR_", "data": {"/IO/Mutable-References/#main-_LPAR_in-Avoiding-data-races-with--modify_RPAR_": {"display": "main", "context": ["The Lean Language Reference", "IO", "Mutable References", "State Transformers", "Reading and Writing", "Avoiding data races with modify"]}}, "address": "/IO/Mutable-References/"}], "main (in Asynchronous Subprocesses)": [{"id": "main-_LPAR_in-Asynchronous-Subprocesses_RPAR_", "data": {"/IO/Processes/#main-_LPAR_in-Asynchronous-Subprocesses_RPAR_": {"display": "main", "context": ["The Lean Language Reference", "IO", "Processes", "Running Processes", "Asynchronous Subprocesses"]}}, "address": "/IO/Processes/"}], "main": [{"id": "main", "data": {"/Functors___-Monads-and--do--Notation/Syntax/#main": {"display": "main", "context": ["The Lean Language Reference", "Functors, Monads and do -Notation", "Syntax", "Infix Operators", "Applicative Functors"]}}, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}], "lsts (in Widths and Newlines)": [{"id": "lsts-_LPAR_in-Widths-and-Newlines_RPAR_", "data": {"/Interacting-with-Lean/#lsts-_LPAR_in-Widths-and-Newlines_RPAR_": {"display": "lsts", "context": ["The Lean Language Reference", "Interacting with Lean", "Formatted Output", "Format", "Widths and Newlines"]}}, "address": "/Interacting-with-Lean/"}], "lst.nums (in Widths and Newlines)": [{"id": "lst___nums-_LPAR_in-Widths-and-Newlines_RPAR_", "data": {"/Interacting-with-Lean/#lst___nums-_LPAR_in-Widths-and-Newlines_RPAR_": {"display": "nums", "context": ["The Lean Language Reference", "Interacting with Lean", "Formatted Output", "Format", "Widths and Newlines"]}}, "address": "/Interacting-with-Lean/"}], "lst (in Widths and Newlines)": [{"id": "lst-_LPAR_in-Widths-and-Newlines_RPAR_", "data": {"/Interacting-with-Lean/#lst-_LPAR_in-Widths-and-Newlines_RPAR_": {"display": "lst", "context": ["The Lean Language Reference", "Interacting with Lean", "Formatted Output", "Format", "Widths and Newlines"]}}, "address": "/Interacting-with-Lean/"}], "loop (in Loops are Tail Recursive Functions)": [{"id": "loop-_LPAR_in-Loops-are-Tail-Recursive-Functions_RPAR_", "data": {"/Definitions/Recursive-Definitions/#loop-_LPAR_in-Loops-are-Tail-Recursive-Functions_RPAR_": {"display": "loop", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Partial Fixpoint Recursion", "Tail-Recursive Functions", "Loops are Tail Recursive Functions"]}}, "address": "/Definitions/Recursive-Definitions/"}], "log_spec_better (in A Logging Monad)": [{"id": "log_spec_better-_LPAR_in-A-Logging-Monad_RPAR_", "data": {"/The--mvcgen--tactic/Enabling--mvcgen--For-Monads/#log_spec_better-_LPAR_in-A-Logging-Monad_RPAR_": {"display": "log_spec_better", "context": ["The Lean Language Reference", "The mvcgen tactic", "Enabling mvcgen For Monads", "A Logging Monad"]}}, "address": "/The--mvcgen--tactic/Enabling--mvcgen--For-Monads/"}], "log_spec (in A Logging Monad)": [{"id": "log_spec-_LPAR_in-A-Logging-Monad_RPAR_", "data": {"/The--mvcgen--tactic/Enabling--mvcgen--For-Monads/#log_spec-_LPAR_in-A-Logging-Monad_RPAR_": {"display": "log_spec", "context": ["The Lean Language Reference", "The mvcgen tactic", "Enabling mvcgen For Monads", "A Logging Monad"]}}, "address": "/The--mvcgen--tactic/Enabling--mvcgen--For-Monads/"}], "logUntil_length (in A Logging Monad)": [{"id": "logUntil_length-_LPAR_in-A-Logging-Monad_RPAR_", "data": {"/The--mvcgen--tactic/Enabling--mvcgen--For-Monads/#logUntil_length-_LPAR_in-A-Logging-Monad_RPAR_": {"display": "logUntil_length", "context": ["The Lean Language Reference", "The mvcgen tactic", "Enabling mvcgen For Monads", "A Logging Monad"]}}, "address": "/The--mvcgen--tactic/Enabling--mvcgen--For-Monads/"}], "logUntil (in A Logging Monad)": [{"id": "logUntil-_LPAR_in-A-Logging-Monad_RPAR_", "data": {"/The--mvcgen--tactic/Enabling--mvcgen--For-Monads/#logUntil-_LPAR_in-A-Logging-Monad_RPAR_": {"display": "logUntil", "context": ["The Lean Language Reference", "The mvcgen tactic", "Enabling mvcgen For Monads", "A Logging Monad"]}}, "address": "/The--mvcgen--tactic/Enabling--mvcgen--For-Monads/"}], "log (in A Logging Monad)": [{"id": "log-_LPAR_in-A-Logging-Monad_RPAR_", "data": {"/The--mvcgen--tactic/Enabling--mvcgen--For-Monads/#log-_LPAR_in-A-Logging-Monad_RPAR_": {"display": "log", "context": ["The Lean Language Reference", "The mvcgen tactic", "Enabling mvcgen For Monads", "A Logging Monad"]}}, "address": "/The--mvcgen--tactic/Enabling--mvcgen--For-Monads/"}], "location (in where for structures)": [{"id": "location-_LPAR_in-where--for-structures_RPAR_", "data": {"/The-Type-System/Inductive-Types/#location-_LPAR_in-where--for-structures_RPAR_": {"display": "location", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Structure Declarations", "Structure Constructors", "where for structures"]}}, "address": "/The-Type-System/Inductive-Types/"}], "listLen (in Matching on Complex Expressions Can Prevent Elaboration)": [{"id": "listLen-_LPAR_in-Matching-on-Complex-Expressions-Can-Prevent-Elaboration_RPAR_", "data": {"/Definitions/Recursive-Definitions/#listLen-_LPAR_in-Matching-on-Complex-Expressions-Can-Prevent-Elaboration_RPAR_": {"display": "listLen", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Structural Recursion", "Explicit Structural Recursion", "Matching on Complex Expressions Can Prevent Elaboration"]}}, "address": "/Definitions/Recursive-Definitions/"}], "lazy": [{"id": "lazy", "data": {"/Axioms/#lazy": {"display": "lazy", "context": ["The Lean Language Reference", "Axioms", "Displaying Axiom Dependencies"]}}, "address": "/Axioms/"}], "last?' (in Pattern Equality Proofs)": [{"id": "last______-_LPAR_in-Pattern-Equality-Proofs_RPAR_", "data": {"/Terms/Pattern-Matching/#last______-_LPAR_in-Pattern-Equality-Proofs_RPAR_": {"display": "last?'", "context": ["The Lean Language Reference", "Terms", "Pattern Matching", "Types", "Pattern Equality Proofs", "Pattern Equality Proofs"]}}, "address": "/Terms/Pattern-Matching/"}], "last? (in Pattern Equality Proofs)": [{"id": "last___-_LPAR_in-Pattern-Equality-Proofs_RPAR_", "data": {"/Terms/Pattern-Matching/#last___-_LPAR_in-Pattern-Equality-Proofs_RPAR_": {"display": "last?", "context": ["The Lean Language Reference", "Terms", "Pattern Matching", "Types", "Pattern Equality Proofs", "Pattern Equality Proofs"]}}, "address": "/Terms/Pattern-Matching/"}], "largeNumber (in Creating and Tracking Proofs That Trust the Compiler)": [{"id": "largeNumber-_LPAR_in-Creating-and-Tracking-Proofs-That-Trust-the-Compiler_RPAR_", "data": {"/Axioms/#largeNumber-_LPAR_in-Creating-and-Tracking-Proofs-That-Trust-the-Compiler_RPAR_": {"display": "largeNumber", "context": ["The Lean Language Reference", "Axioms", "Standard Axioms", "Creating and Tracking Proofs That Trust the Compiler"]}}, "address": "/Axioms/"}], "iterFile (in Iterators and Effects)": [{"id": "iterFile-_LPAR_in-Iterators-and-Effects_RPAR_", "data": {"/Iterators/Iterator-Definitions/#iterFile-_LPAR_in-Iterators-and-Effects_RPAR_": {"display": "iterFile", "context": ["The Lean Language Reference", "Iterators", "Iterator Definitions", "Finite and Productive Iterators", "Iterators and Effects"]}}, "address": "/Iterators/Iterator-Definitions/"}], "isZero' (in Pattern-Matching Functions)": [{"id": "isZero___-_LPAR_in-Pattern-Matching-Functions_RPAR_", "data": {"/Terms/Pattern-Matching/#isZero___-_LPAR_in-Pattern-Matching-Functions_RPAR_": {"display": "isZero'", "context": ["The Lean Language Reference", "Terms", "Pattern Matching", "Pattern Matching Functions", "Pattern-Matching Functions"]}}, "address": "/Terms/Pattern-Matching/"}], "isZero (in Pattern-Matching Functions)": [{"id": "isZero-_LPAR_in-Pattern-Matching-Functions_RPAR_", "data": {"/Terms/Pattern-Matching/#isZero-_LPAR_in-Pattern-Matching-Functions_RPAR_": {"display": "isZero", "context": ["The Lean Language Reference", "Terms", "Pattern Matching", "Pattern Matching Functions", "Pattern-Matching Functions"]}}, "address": "/Terms/Pattern-Matching/"}], "isPrime (in Partial Functions in Proofs)": [{"id": "isPrime-_LPAR_in-Partial-Functions-in-Proofs_RPAR_", "data": {"/Definitions/Recursive-Definitions/#isPrime-_LPAR_in-Partial-Functions-in-Proofs_RPAR_": {"display": "isPrime", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Partial and Unsafe Definitions", "Partial Functions", "Partial Functions in Proofs"]}}, "address": "/Definitions/Recursive-Definitions/"}], "iota_succ (in Increasing E-matching Limits)": [{"id": "iota_succ-_LPAR_in-Increasing-E-matching-Limits_RPAR_", "data": {"/The--grind--tactic/E___matching/#iota_succ-_LPAR_in-Increasing-E-matching-Limits_RPAR_": {"display": "iota_succ", "context": ["The Lean Language Reference", "The grind tactic", "E‑matching", "Resource Limits", "Increasing E-matching Limits"]}}, "address": "/The--grind--tactic/E___matching/"}], "iota (in Increasing E-matching Limits)": [{"id": "iota-_LPAR_in-Increasing-E-matching-Limits_RPAR_", "data": {"/The--grind--tactic/E___matching/#iota-_LPAR_in-Increasing-E-matching-Limits_RPAR_": {"display": "iota", "context": ["The Lean Language Reference", "The grind tactic", "E‑matching", "Resource Limits", "Increasing E-matching Limits"]}}, "address": "/The--grind--tactic/E___matching/"}], "inv_eq (in The @[grind ←=] Attribute)": [{"id": "inv_eq-_LPAR_in-The--____LSQ_grind-_______RSQ_--Attribute_RPAR_", "data": {"/The--grind--tactic/E___matching/#inv_eq-_LPAR_in-The--____LSQ_grind-_______RSQ_--Attribute_RPAR_": {"display": "inv_eq", "context": ["The Lean Language Reference", "The grind tactic", "E‑matching", "Patterns", "The @[grind ←=] Attribute"]}}, "address": "/The--grind--tactic/E___matching/"}], "intersperse (in Printing Equations)": [{"id": "intersperse-_LPAR_in-Printing-Equations_RPAR_", "data": {"/Interacting-with-Lean/#intersperse-_LPAR_in-Printing-Equations_RPAR_": {"display": "intersperse", "context": ["The Lean Language Reference", "Interacting with Lean", "Querying the Context", "Printing Equations"]}}, "address": "/Interacting-with-Lean/"}], "interestingName (in Querying the Environment)": [{"id": "interestingName-_LPAR_in-Querying-the-Environment_RPAR_", "data": {"/Notations-and-Macros/Elaborators/#interestingName-_LPAR_in-Querying-the-Environment_RPAR_": {"display": "interestingName", "context": ["The Lean Language Reference", "Notations and Macros", "Elaborators", "Command Elaborators", "Querying the Environment"]}}, "address": "/Notations-and-Macros/Elaborators/"}], "instDecidableEqStringList (in A recursive instance for a sum class)": [{"id": "instDecidableEqStringList-_LPAR_in-A-recursive-instance-for-a-sum-class_RPAR_", "data": {"/Type-Classes/Instance-Declarations/#instDecidableEqStringList-_LPAR_in-A-recursive-instance-for-a-sum-class_RPAR_": {"display": "instDecidableEqStringList", "context": ["The Lean Language Reference", "Type Classes", "Instance Declarations", "Instances of class inductive s", "A recursive instance for a sum class"]}}, "address": "/Type-Classes/Instance-Declarations/"}], "instCommRingR": [{"id": "instCommRingR", "data": {"/The--grind--tactic/Bigger-Examples/#instCommRingR": {"display": "instCommRingR", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "Integrating grind 's Features"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}], "instBeqNatWrapper (in Variations in Instance Definitions)": [{"id": "instBeqNatWrapper-_LPAR_in-Variations-in-Instance-Definitions_RPAR_", "data": {"/Type-Classes/Instance-Declarations/#instBeqNatWrapper-_LPAR_in-Variations-in-Instance-Definitions_RPAR_": {"display": "instBeqNatWrapper", "context": ["The Lean Language Reference", "Type Classes", "Instance Declarations", "Variations in Instance Definitions"]}}, "address": "/Type-Classes/Instance-Declarations/"}], "incr_eq_plus1 (in Proofs are Private)": [{"id": "incr_eq_plus1-_LPAR_in-Proofs-are-Private_RPAR_", "data": {"/Source-Files-and-Modules/#incr_eq_plus1-_LPAR_in-Proofs-are-Private_RPAR_": {"display": "incr_eq_plus1", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Proofs are Private"]}}, "address": "/Source-Files-and-Modules/"}], "incrOrFail (in Lifting Transformed Monads)": [{"id": "incrOrFail-_LPAR_in-Lifting-Transformed-Monads_RPAR_-next", "data": {"/Functors___-Monads-and--do--Notation/Lifting-Monads/#incrOrFail-_LPAR_in-Lifting-Transformed-Monads_RPAR_-next": {"display": "incrOrFail", "context": ["The Lean Language Reference", "Functors, Monads and do -Notation", "Lifting Monads", "Lifting Transformed Monads"]}, "/Functors___-Monads-and--do--Notation/Lifting-Monads/#incrOrFail-_LPAR_in-Lifting-Transformed-Monads_RPAR_": {"display": "incrOrFail", "context": ["The Lean Language Reference", "Functors, Monads and do -Notation", "Lifting Monads", "Lifting Transformed Monads"]}}, "address": "/Functors___-Monads-and--do--Notation/Lifting-Monads/"}, {"id": "incrOrFail-_LPAR_in-Lifting-Transformed-Monads_RPAR_", "data": {"/Functors___-Monads-and--do--Notation/Lifting-Monads/#incrOrFail-_LPAR_in-Lifting-Transformed-Monads_RPAR_-next": {"display": "incrOrFail", "context": ["The Lean Language Reference", "Functors, Monads and do -Notation", "Lifting Monads", "Lifting Transformed Monads"]}, "/Functors___-Monads-and--do--Notation/Lifting-Monads/#incrOrFail-_LPAR_in-Lifting-Transformed-Monads_RPAR_": {"display": "incrOrFail", "context": ["The Lean Language Reference", "Functors, Monads and do -Notation", "Lifting Monads", "Lifting Transformed Monads"]}}, "address": "/Functors___-Monads-and--do--Notation/Lifting-Monads/"}], "incrBy (in Lifting Transformed Monads)": [{"id": "incrBy-_LPAR_in-Lifting-Transformed-Monads_RPAR_", "data": {"/Functors___-Monads-and--do--Notation/Lifting-Monads/#incrBy-_LPAR_in-Lifting-Transformed-Monads_RPAR_-next": {"display": "incrBy", "context": ["The Lean Language Reference", "Functors, Monads and do -Notation", "Lifting Monads", "Lifting Transformed Monads"]}, "/Functors___-Monads-and--do--Notation/Lifting-Monads/#incrBy-_LPAR_in-Lifting-Transformed-Monads_RPAR_": {"display": "incrBy", "context": ["The Lean Language Reference", "Functors, Monads and do -Notation", "Lifting Monads", "Lifting Transformed Monads"]}}, "address": "/Functors___-Monads-and--do--Notation/Lifting-Monads/"}, {"id": "incrBy-_LPAR_in-Lifting-Transformed-Monads_RPAR_-next", "data": {"/Functors___-Monads-and--do--Notation/Lifting-Monads/#incrBy-_LPAR_in-Lifting-Transformed-Monads_RPAR_-next": {"display": "incrBy", "context": ["The Lean Language Reference", "Functors, Monads and do -Notation", "Lifting Monads", "Lifting Transformed Monads"]}, "/Functors___-Monads-and--do--Notation/Lifting-Monads/#incrBy-_LPAR_in-Lifting-Transformed-Monads_RPAR_": {"display": "incrBy", "context": ["The Lean Language Reference", "Functors, Monads and do -Notation", "Lifting Monads", "Lifting Transformed Monads"]}}, "address": "/Functors___-Monads-and--do--Notation/Lifting-Monads/"}], "incr (in Proofs are Private)": [{"id": "incr-_LPAR_in-Proofs-are-Private_RPAR_", "data": {"/Source-Files-and-Modules/#incr-_LPAR_in-Proofs-are-Private_RPAR_": {"display": "incr", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Proofs are Private"]}}, "address": "/Source-Files-and-Modules/"}], "ignore (in Ignored Terms in Notation Expansion)": [{"id": "ignore-_LPAR_in-Ignored-Terms-in-Notation-Expansion_RPAR_", "data": {"/Notations-and-Macros/Notations/#ignore-_LPAR_in-Ignored-Terms-in-Notation-Expansion_RPAR_": {"display": "ignore", "context": ["The Lean Language Reference", "Notations and Macros", "Notations", "Ignored Terms in Notation Expansion"]}}, "address": "/Notations-and-Macros/Notations/"}], "id₃ (in The universe command when autoImplicit is false)": [{"id": "id___-_LPAR_in-The--universe--command-when--autoImplicit--is--false_RPAR_", "data": {"/The-Type-System/Universes/#id___-_LPAR_in-The--universe--command-when--autoImplicit--is--false_RPAR_": {"display": "id₃", "context": ["The Lean Language Reference", "The Type System", "Universes", "Polymorphism", "Universe Variable Bindings", "The universe command when autoImplicit is false"]}}, "address": "/The-Type-System/Universes/"}], "idiom (in Idiom Brackets)": [{"id": "idiom-_LPAR_in-Idiom-Brackets_RPAR_", "data": {"/Notations-and-Macros/Macros/#idiom-_LPAR_in-Idiom-Brackets_RPAR_": {"display": "idiom", "context": ["The Lean Language Reference", "Notations and Macros", "Macros", "Defining Macros", "The macro_rules Command", "Idiom Brackets"]}}, "address": "/Notations-and-Macros/Macros/"}], "identity (in Mutual Block Scope and Automatic Implicit Parameters)": [{"id": "identity-_LPAR_in-Mutual-Block-Scope-and-Automatic-Implicit-Parameters_RPAR_", "data": {"/Definitions/Recursive-Definitions/#identity-_LPAR_in-Mutual-Block-Scope-and-Automatic-Implicit-Parameters_RPAR_-next": {"display": "identity", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Mutual Recursion", "Mutual Block Scope and Automatic Implicit Parameters"]}, "/Definitions/Recursive-Definitions/#identity-_LPAR_in-Mutual-Block-Scope-and-Automatic-Implicit-Parameters_RPAR_": {"display": "identity", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Mutual Recursion", "Mutual Block Scope and Automatic Implicit Parameters"]}}, "address": "/Definitions/Recursive-Definitions/"}, {"id": "identity-_LPAR_in-Mutual-Block-Scope-and-Automatic-Implicit-Parameters_RPAR_-next", "data": {"/Definitions/Recursive-Definitions/#identity-_LPAR_in-Mutual-Block-Scope-and-Automatic-Implicit-Parameters_RPAR_-next": {"display": "identity", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Mutual Recursion", "Mutual Block Scope and Automatic Implicit Parameters"]}, "/Definitions/Recursive-Definitions/#identity-_LPAR_in-Mutual-Block-Scope-and-Automatic-Implicit-Parameters_RPAR_": {"display": "identity", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Mutual Recursion", "Mutual Block Scope and Automatic Implicit Parameters"]}}, "address": "/Definitions/Recursive-Definitions/"}], "id'": [{"id": "id___", "data": {"/The-Type-System/Universes/#id___": {"display": "id'", "context": ["The Lean Language Reference", "The Type System", "Universes", "Polymorphism"]}}, "address": "/The-Type-System/Universes/"}], "h₆ (in Left-to-Right Generation)": [{"id": "h___-_LPAR_in-Left-to-Right-Generation_RPAR_", "data": {"/The--grind--tactic/E___matching/#h___-_LPAR_in-Left-to-Right-Generation_RPAR_": {"display": "h₆", "context": ["The Lean Language Reference", "The grind tactic", "E‑matching", "Inspecting Patterns", "Left-to-Right Generation"]}}, "address": "/The--grind--tactic/E___matching/"}], "h₅ (in Failing Backward Pattern Generation)": [{"id": "h___-_LPAR_in-Failing-Backward-Pattern-Generation_RPAR_", "data": {"/The--grind--tactic/E___matching/#h___-_LPAR_in-Failing-Backward-Pattern-Generation_RPAR_": {"display": "h₅", "context": ["The Lean Language Reference", "The grind tactic", "E‑matching", "Inspecting Patterns", "Failing Backward Pattern Generation"]}}, "address": "/The--grind--tactic/E___matching/"}], "h₄ (in Patterns from Conclusion and Hypotheses)": [{"id": "h___-_LPAR_in-Patterns-from-Conclusion-and-Hypotheses_RPAR_", "data": {"/The--grind--tactic/E___matching/#h___-_LPAR_in-Patterns-from-Conclusion-and-Hypotheses_RPAR_": {"display": "h₄", "context": ["The Lean Language Reference", "The grind tactic", "E‑matching", "Inspecting Patterns", "Patterns from Conclusion and Hypotheses"]}}, "address": "/The--grind--tactic/E___matching/"}], "h₃ (in Bidirectional Equality Pattern Generation)": [{"id": "h___-_LPAR_in-Bidirectional-Equality-Pattern-Generation_RPAR_", "data": {"/The--grind--tactic/E___matching/#h___-_LPAR_in-Bidirectional-Equality-Pattern-Generation_RPAR_": {"display": "h₃", "context": ["The Lean Language Reference", "The grind tactic", "E‑matching", "Inspecting Patterns", "Bidirectional Equality Pattern Generation"]}}, "address": "/The--grind--tactic/E___matching/"}], "h₂ (in Backward Pattern Generation)": [{"id": "h___-_LPAR_in-Backward-Pattern-Generation_RPAR_", "data": {"/The--grind--tactic/E___matching/#h___-_LPAR_in-Backward-Pattern-Generation_RPAR_": {"display": "h₂", "context": ["The Lean Language Reference", "The grind tactic", "E‑matching", "Inspecting Patterns", "Backward Pattern Generation"]}}, "address": "/The--grind--tactic/E___matching/"}], "h₁ (in Forward Pattern Generation)": [{"id": "h___-_LPAR_in-Forward-Pattern-Generation_RPAR_", "data": {"/The--grind--tactic/E___matching/#h___-_LPAR_in-Forward-Pattern-Generation_RPAR_": {"display": "h₁", "context": ["The Lean Language Reference", "The grind tactic", "E‑matching", "Inspecting Patterns", "Forward Pattern Generation"]}}, "address": "/The--grind--tactic/E___matching/"}], "helper (in Recursion vs Recursors)": [{"id": "helper-_LPAR_in-Recursion-vs-Recursors_RPAR_", "data": {"/Definitions/Recursive-Definitions/#helper-_LPAR_in-Recursion-vs-Recursors_RPAR_": {"display": "helper", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Structural Recursion", "Elaboration Using Course-of-Values Recursion", "Recursion vs Recursors"]}}, "address": "/Definitions/Recursive-Definitions/"}], "hello (in Reducibility and Instance Synthesis)": [{"id": "hello-_LPAR_in-Reducibility-and-Instance-Synthesis_RPAR_", "data": {"/Definitions/Recursive-Definitions/#hello-_LPAR_in-Reducibility-and-Instance-Synthesis_RPAR_": {"display": "hello", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Controlling Reduction", "Reducibility and Instance Synthesis"]}}, "address": "/Definitions/Recursive-Definitions/"}], "hello": [{"id": "hello", "data": {"/Introduction/#hello": {"display": "hello", "context": ["The Lean Language Reference", "Introduction", "Typographical Conventions", "Lean Code"]}}, "address": "/Introduction/"}], "half.match_1' (in Elaboration Walkthrough)": [{"id": "half___match_1___-_LPAR_in-Elaboration-Walkthrough_RPAR_", "data": {"/Definitions/Recursive-Definitions/#half___match_1___-_LPAR_in-Elaboration-Walkthrough_RPAR_": {"display": "half.match_1'", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Structural Recursion", "Elaboration Using Course-of-Values Recursion", "Elaboration Walkthrough"]}}, "address": "/Definitions/Recursive-Definitions/"}], "half''' (in Recursion vs Recursors)": [{"id": "half_________-_LPAR_in-Recursion-vs-Recursors_RPAR_", "data": {"/Definitions/Recursive-Definitions/#half_________-_LPAR_in-Recursion-vs-Recursors_RPAR_": {"display": "half'''", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Structural Recursion", "Elaboration Using Course-of-Values Recursion", "Recursion vs Recursors"]}}, "address": "/Definitions/Recursive-Definitions/"}], "half'' (in Recursion vs Recursors)": [{"id": "half______-_LPAR_in-Recursion-vs-Recursors_RPAR_", "data": {"/Definitions/Recursive-Definitions/#half______-_LPAR_in-Recursion-vs-Recursors_RPAR_": {"display": "half''", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Structural Recursion", "Elaboration Using Course-of-Values Recursion", "Recursion vs Recursors"]}}, "address": "/Definitions/Recursive-Definitions/"}], "half'' (in Elaboration Walkthrough)": [{"id": "half______-_LPAR_in-Elaboration-Walkthrough_RPAR_-next-next", "data": {"/Definitions/Recursive-Definitions/#half______-_LPAR_in-Elaboration-Walkthrough_RPAR_-next-next-next": {"display": "half''", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Structural Recursion", "Elaboration Using Course-of-Values Recursion", "Elaboration Walkthrough"]}, "/Definitions/Recursive-Definitions/#half______-_LPAR_in-Elaboration-Walkthrough_RPAR_-next-next": {"display": "half''", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Structural Recursion", "Elaboration Using Course-of-Values Recursion", "Elaboration Walkthrough"]}, "/Definitions/Recursive-Definitions/#half______-_LPAR_in-Elaboration-Walkthrough_RPAR_-next": {"display": "half''", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Structural Recursion", "Elaboration Using Course-of-Values Recursion", "Elaboration Walkthrough"]}, "/Definitions/Recursive-Definitions/#half______-_LPAR_in-Elaboration-Walkthrough_RPAR_": {"display": "half''", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Structural Recursion", "Elaboration Using Course-of-Values Recursion", "Elaboration Walkthrough"]}}, "address": "/Definitions/Recursive-Definitions/"}, {"id": "half______-_LPAR_in-Elaboration-Walkthrough_RPAR_-next", "data": {"/Definitions/Recursive-Definitions/#half______-_LPAR_in-Elaboration-Walkthrough_RPAR_-next-next-next": {"display": "half''", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Structural Recursion", "Elaboration Using Course-of-Values Recursion", "Elaboration Walkthrough"]}, "/Definitions/Recursive-Definitions/#half______-_LPAR_in-Elaboration-Walkthrough_RPAR_-next-next": {"display": "half''", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Structural Recursion", "Elaboration Using Course-of-Values Recursion", "Elaboration Walkthrough"]}, "/Definitions/Recursive-Definitions/#half______-_LPAR_in-Elaboration-Walkthrough_RPAR_-next": {"display": "half''", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Structural Recursion", "Elaboration Using Course-of-Values Recursion", "Elaboration Walkthrough"]}, "/Definitions/Recursive-Definitions/#half______-_LPAR_in-Elaboration-Walkthrough_RPAR_": {"display": "half''", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Structural Recursion", "Elaboration Using Course-of-Values Recursion", "Elaboration Walkthrough"]}}, "address": "/Definitions/Recursive-Definitions/"}, {"id": "half______-_LPAR_in-Elaboration-Walkthrough_RPAR_-next-next-next", "data": {"/Definitions/Recursive-Definitions/#half______-_LPAR_in-Elaboration-Walkthrough_RPAR_-next-next-next": {"display": "half''", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Structural Recursion", "Elaboration Using Course-of-Values Recursion", "Elaboration Walkthrough"]}, "/Definitions/Recursive-Definitions/#half______-_LPAR_in-Elaboration-Walkthrough_RPAR_-next-next": {"display": "half''", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Structural Recursion", "Elaboration Using Course-of-Values Recursion", "Elaboration Walkthrough"]}, "/Definitions/Recursive-Definitions/#half______-_LPAR_in-Elaboration-Walkthrough_RPAR_-next": {"display": "half''", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Structural Recursion", "Elaboration Using Course-of-Values Recursion", "Elaboration Walkthrough"]}, "/Definitions/Recursive-Definitions/#half______-_LPAR_in-Elaboration-Walkthrough_RPAR_": {"display": "half''", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Structural Recursion", "Elaboration Using Course-of-Values Recursion", "Elaboration Walkthrough"]}}, "address": "/Definitions/Recursive-Definitions/"}, {"id": "half______-_LPAR_in-Elaboration-Walkthrough_RPAR_", "data": {"/Definitions/Recursive-Definitions/#half______-_LPAR_in-Elaboration-Walkthrough_RPAR_-next-next-next": {"display": "half''", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Structural Recursion", "Elaboration Using Course-of-Values Recursion", "Elaboration Walkthrough"]}, "/Definitions/Recursive-Definitions/#half______-_LPAR_in-Elaboration-Walkthrough_RPAR_-next-next": {"display": "half''", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Structural Recursion", "Elaboration Using Course-of-Values Recursion", "Elaboration Walkthrough"]}, "/Definitions/Recursive-Definitions/#half______-_LPAR_in-Elaboration-Walkthrough_RPAR_-next": {"display": "half''", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Structural Recursion", "Elaboration Using Course-of-Values Recursion", "Elaboration Walkthrough"]}, "/Definitions/Recursive-Definitions/#half______-_LPAR_in-Elaboration-Walkthrough_RPAR_": {"display": "half''", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Structural Recursion", "Elaboration Using Course-of-Values Recursion", "Elaboration Walkthrough"]}}, "address": "/Definitions/Recursive-Definitions/"}], "half' (in Recursion vs Recursors)": [{"id": "half___-_LPAR_in-Recursion-vs-Recursors_RPAR_", "data": {"/Definitions/Recursive-Definitions/#half___-_LPAR_in-Recursion-vs-Recursors_RPAR_": {"display": "half'", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Structural Recursion", "Elaboration Using Course-of-Values Recursion", "Recursion vs Recursors"]}}, "address": "/Definitions/Recursive-Definitions/"}], "half' (in Elaboration Walkthrough)": [{"id": "half___-_LPAR_in-Elaboration-Walkthrough_RPAR_", "data": {"/Definitions/Recursive-Definitions/#half___-_LPAR_in-Elaboration-Walkthrough_RPAR_": {"display": "half'", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Structural Recursion", "Elaboration Using Course-of-Values Recursion", "Elaboration Walkthrough"]}}, "address": "/Definitions/Recursive-Definitions/"}], "half (in Specifying Decreasing Parameters)": [{"id": "half-_LPAR_in-Specifying-Decreasing-Parameters_RPAR_-next", "data": {"/Definitions/Recursive-Definitions/#half-_LPAR_in-Specifying-Decreasing-Parameters_RPAR_-next": {"display": "half", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Structural Recursion", "Explicit Structural Recursion", "Specifying Decreasing Parameters"]}, "/Definitions/Recursive-Definitions/#half-_LPAR_in-Specifying-Decreasing-Parameters_RPAR_": {"display": "half", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Structural Recursion", "Explicit Structural Recursion", "Specifying Decreasing Parameters"]}}, "address": "/Definitions/Recursive-Definitions/"}, {"id": "half-_LPAR_in-Specifying-Decreasing-Parameters_RPAR_", "data": {"/Definitions/Recursive-Definitions/#half-_LPAR_in-Specifying-Decreasing-Parameters_RPAR_-next": {"display": "half", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Structural Recursion", "Explicit Structural Recursion", "Specifying Decreasing Parameters"]}, "/Definitions/Recursive-Definitions/#half-_LPAR_in-Specifying-Decreasing-Parameters_RPAR_": {"display": "half", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Structural Recursion", "Explicit Structural Recursion", "Specifying Decreasing Parameters"]}}, "address": "/Definitions/Recursive-Definitions/"}], "half (in Recursion vs Recursors)": [{"id": "half-_LPAR_in-Recursion-vs-Recursors_RPAR_", "data": {"/Definitions/Recursive-Definitions/#half-_LPAR_in-Recursion-vs-Recursors_RPAR_": {"display": "half", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Structural Recursion", "Elaboration Using Course-of-Values Recursion", "Recursion vs Recursors"]}}, "address": "/Definitions/Recursive-Definitions/"}], "half (in Matching on Complex Expressions Can Prevent Elaboration)": [{"id": "half-_LPAR_in-Matching-on-Complex-Expressions-Can-Prevent-Elaboration_RPAR_-next", "data": {"/Definitions/Recursive-Definitions/#half-_LPAR_in-Matching-on-Complex-Expressions-Can-Prevent-Elaboration_RPAR_-next": {"display": "half", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Structural Recursion", "Explicit Structural Recursion", "Matching on Complex Expressions Can Prevent Elaboration"]}, "/Definitions/Recursive-Definitions/#half-_LPAR_in-Matching-on-Complex-Expressions-Can-Prevent-Elaboration_RPAR_": {"display": "half", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Structural Recursion", "Explicit Structural Recursion", "Matching on Complex Expressions Can Prevent Elaboration"]}}, "address": "/Definitions/Recursive-Definitions/"}, {"id": "half-_LPAR_in-Matching-on-Complex-Expressions-Can-Prevent-Elaboration_RPAR_", "data": {"/Definitions/Recursive-Definitions/#half-_LPAR_in-Matching-on-Complex-Expressions-Can-Prevent-Elaboration_RPAR_-next": {"display": "half", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Structural Recursion", "Explicit Structural Recursion", "Matching on Complex Expressions Can Prevent Elaboration"]}, "/Definitions/Recursive-Definitions/#half-_LPAR_in-Matching-on-Complex-Expressions-Can-Prevent-Elaboration_RPAR_": {"display": "half", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Structural Recursion", "Explicit Structural Recursion", "Matching on Complex Expressions Can Prevent Elaboration"]}}, "address": "/Definitions/Recursive-Definitions/"}], "half (in Inferred Termination Annotations)": [{"id": "half-_LPAR_in-Inferred-Termination-Annotations_RPAR_", "data": {"/Definitions/Recursive-Definitions/#half-_LPAR_in-Inferred-Termination-Annotations_RPAR_": {"display": "half", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Structural Recursion", "Inferring Structural Recursion", "Inferred Termination Annotations"]}}, "address": "/Definitions/Recursive-Definitions/"}], "half (in Inaccessible Patterns)": [{"id": "half-_LPAR_in-Inaccessible-Patterns_RPAR_", "data": {"/Terms/Pattern-Matching/#half-_LPAR_in-Inaccessible-Patterns_RPAR_": {"display": "half", "context": ["The Lean Language Reference", "Terms", "Pattern Matching", "Inaccessible Patterns"]}}, "address": "/Terms/Pattern-Matching/"}], "half (in Elaboration Walkthrough)": [{"id": "half-_LPAR_in-Elaboration-Walkthrough_RPAR_-next-next", "data": {"/Definitions/Recursive-Definitions/#half-_LPAR_in-Elaboration-Walkthrough_RPAR_-next-next": {"display": "half", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Structural Recursion", "Elaboration Using Course-of-Values Recursion", "Elaboration Walkthrough"]}, "/Definitions/Recursive-Definitions/#half-_LPAR_in-Elaboration-Walkthrough_RPAR_-next": {"display": "half", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Structural Recursion", "Elaboration Using Course-of-Values Recursion", "Elaboration Walkthrough"]}, "/Definitions/Recursive-Definitions/#half-_LPAR_in-Elaboration-Walkthrough_RPAR_": {"display": "half", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Structural Recursion", "Elaboration Using Course-of-Values Recursion", "Elaboration Walkthrough"]}}, "address": "/Definitions/Recursive-Definitions/"}, {"id": "half-_LPAR_in-Elaboration-Walkthrough_RPAR_", "data": {"/Definitions/Recursive-Definitions/#half-_LPAR_in-Elaboration-Walkthrough_RPAR_-next-next": {"display": "half", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Structural Recursion", "Elaboration Using Course-of-Values Recursion", "Elaboration Walkthrough"]}, "/Definitions/Recursive-Definitions/#half-_LPAR_in-Elaboration-Walkthrough_RPAR_-next": {"display": "half", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Structural Recursion", "Elaboration Using Course-of-Values Recursion", "Elaboration Walkthrough"]}, "/Definitions/Recursive-Definitions/#half-_LPAR_in-Elaboration-Walkthrough_RPAR_": {"display": "half", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Structural Recursion", "Elaboration Using Course-of-Values Recursion", "Elaboration Walkthrough"]}}, "address": "/Definitions/Recursive-Definitions/"}, {"id": "half-_LPAR_in-Elaboration-Walkthrough_RPAR_-next", "data": {"/Definitions/Recursive-Definitions/#half-_LPAR_in-Elaboration-Walkthrough_RPAR_-next-next": {"display": "half", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Structural Recursion", "Elaboration Using Course-of-Values Recursion", "Elaboration Walkthrough"]}, "/Definitions/Recursive-Definitions/#half-_LPAR_in-Elaboration-Walkthrough_RPAR_-next": {"display": "half", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Structural Recursion", "Elaboration Using Course-of-Values Recursion", "Elaboration Walkthrough"]}, "/Definitions/Recursive-Definitions/#half-_LPAR_in-Elaboration-Walkthrough_RPAR_": {"display": "half", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Structural Recursion", "Elaboration Using Course-of-Values Recursion", "Elaboration Walkthrough"]}}, "address": "/Definitions/Recursive-Definitions/"}], "gt1 (in E-matching and Pattern Matching)": [{"id": "gt1-_LPAR_in-E-matching-and-Pattern-Matching_RPAR_", "data": {"/The--grind--tactic/E___matching/#gt1-_LPAR_in-E-matching-and-Pattern-Matching_RPAR_": {"display": "gt1", "context": ["The Lean Language Reference", "The grind tactic", "E‑matching", "Resource Limits", "E-matching and Pattern Matching"]}}, "address": "/The--grind--tactic/E___matching/"}], "grouped (in Grouping and Filling)": [{"id": "grouped-_LPAR_in-Grouping-and-Filling_RPAR_", "data": {"/Interacting-with-Lean/#grouped-_LPAR_in-Grouping-and-Filling_RPAR_": {"display": "grouped", "context": ["The Lean Language Reference", "Interacting with Lean", "Formatted Output", "Format", "Grouping and Filling"]}}, "address": "/Interacting-with-Lean/"}], "groceries (in Slicing Lists)": [{"id": "groceries-_LPAR_in-Slicing-Lists_RPAR_", "data": {"/Basic-Types/Ranges/#groceries-_LPAR_in-Slicing-Lists_RPAR_": {"display": "groceries", "context": ["The Lean Language Reference", "Basic Types", "Ranges", "Ranges and Slices", "Slicing Lists"]}}, "address": "/Basic-Types/Ranges/"}], "greeting (in Private and Public Definitions)": [{"id": "greeting-_LPAR_in-Private-and-Public-Definitions_RPAR_", "data": {"/Source-Files-and-Modules/#greeting-_LPAR_in-Private-and-Public-Definitions_RPAR_": {"display": "greeting", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Private and Public Definitions"]}}, "address": "/Source-Files-and-Modules/"}], "greeting (in Exposed and Unexposed Definitions)": [{"id": "greeting-_LPAR_in-Exposed-and-Unexposed-Definitions_RPAR_", "data": {"/Source-Files-and-Modules/#greeting-_LPAR_in-Exposed-and-Unexposed-Definitions_RPAR_-next": {"display": "greeting", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Exposed and Unexposed Definitions"]}, "/Source-Files-and-Modules/#greeting-_LPAR_in-Exposed-and-Unexposed-Definitions_RPAR_": {"display": "greeting", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Exposed and Unexposed Definitions"]}}, "address": "/Source-Files-and-Modules/"}, {"id": "greeting-_LPAR_in-Exposed-and-Unexposed-Definitions_RPAR_-next", "data": {"/Source-Files-and-Modules/#greeting-_LPAR_in-Exposed-and-Unexposed-Definitions_RPAR_-next": {"display": "greeting", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Exposed and Unexposed Definitions"]}, "/Source-Files-and-Modules/#greeting-_LPAR_in-Exposed-and-Unexposed-Definitions_RPAR_": {"display": "greeting", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Exposed and Unexposed Definitions"]}}, "address": "/Source-Files-and-Modules/"}], "goodMorning (in Reducibility and Instance Synthesis)": [{"id": "goodMorning-_LPAR_in-Reducibility-and-Instance-Synthesis_RPAR_", "data": {"/Definitions/Recursive-Definitions/#goodMorning-_LPAR_in-Reducibility-and-Instance-Synthesis_RPAR_": {"display": "goodMorning", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Controlling Reduction", "Reducibility and Instance Synthesis"]}}, "address": "/Definitions/Recursive-Definitions/"}], "goodEvening (in Reducibility and Instance Synthesis)": [{"id": "goodEvening-_LPAR_in-Reducibility-and-Instance-Synthesis_RPAR_", "data": {"/Definitions/Recursive-Definitions/#goodEvening-_LPAR_in-Reducibility-and-Instance-Synthesis_RPAR_": {"display": "goodEvening", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Controlling Reduction", "Reducibility and Instance Synthesis"]}}, "address": "/Definitions/Recursive-Definitions/"}], "go (in Avoiding Intermediate Structures)": [{"id": "go-_LPAR_in-Avoiding-Intermediate-Structures_RPAR_", "data": {"/Iterators/#go-_LPAR_in-Avoiding-Intermediate-Structures_RPAR_": {"display": "go", "context": ["The Lean Language Reference", "Iterators", "Avoiding Intermediate Structures"]}}, "address": "/Iterators/"}], "gf (in Selecting Patterns)": [{"id": "gf-_LPAR_in-Selecting-Patterns_RPAR_", "data": {"/The--grind--tactic/E___matching/#gf-_LPAR_in-Selecting-Patterns_RPAR_": {"display": "gf", "context": ["The Lean Language Reference", "The grind tactic", "E‑matching", "Patterns", "Selecting Patterns"]}}, "address": "/The--grind--tactic/E___matching/"}], "gf (in E-matching Patterns)": [{"id": "gf-_LPAR_in-E-matching-Patterns_RPAR_", "data": {"/The--grind--tactic/E___matching/#gf-_LPAR_in-E-matching-Patterns_RPAR_": {"display": "gf", "context": ["The Lean Language Reference", "The grind tactic", "E‑matching", "Patterns", "E-matching Patterns"]}}, "address": "/The--grind--tactic/E___matching/"}], "getValues (in Dependent Pairs with Data)": [{"id": "getValues-_LPAR_in-Dependent-Pairs-with-Data_RPAR_", "data": {"/Basic-Types/Tuples/#getValues-_LPAR_in-Dependent-Pairs-with-Data_RPAR_": {"display": "getValues", "context": ["The Lean Language Reference", "Basic Types", "Tuples", "Dependent Pairs", "Dependent Pairs with Data"]}}, "address": "/Basic-Types/Tuples/"}], "getThird (in Checking Array Bounds)": [{"id": "getThird-_LPAR_in-Checking-Array-Bounds_RPAR_-next-next", "data": {"/Terms/Conditionals/#getThird-_LPAR_in-Checking-Array-Bounds_RPAR_-next-next": {"display": "getThird", "context": ["The Lean Language Reference", "Terms", "Conditionals", "Checking Array Bounds"]}, "/Terms/Conditionals/#getThird-_LPAR_in-Checking-Array-Bounds_RPAR_-next": {"display": "getThird", "context": ["The Lean Language Reference", "Terms", "Conditionals", "Checking Array Bounds"]}, "/Terms/Conditionals/#getThird-_LPAR_in-Checking-Array-Bounds_RPAR_": {"display": "getThird", "context": ["The Lean Language Reference", "Terms", "Conditionals", "Checking Array Bounds"]}}, "address": "/Terms/Conditionals/"}, {"id": "getThird-_LPAR_in-Checking-Array-Bounds_RPAR_", "data": {"/Terms/Conditionals/#getThird-_LPAR_in-Checking-Array-Bounds_RPAR_-next-next": {"display": "getThird", "context": ["The Lean Language Reference", "Terms", "Conditionals", "Checking Array Bounds"]}, "/Terms/Conditionals/#getThird-_LPAR_in-Checking-Array-Bounds_RPAR_-next": {"display": "getThird", "context": ["The Lean Language Reference", "Terms", "Conditionals", "Checking Array Bounds"]}, "/Terms/Conditionals/#getThird-_LPAR_in-Checking-Array-Bounds_RPAR_": {"display": "getThird", "context": ["The Lean Language Reference", "Terms", "Conditionals", "Checking Array Bounds"]}}, "address": "/Terms/Conditionals/"}, {"id": "getThird-_LPAR_in-Checking-Array-Bounds_RPAR_-next", "data": {"/Terms/Conditionals/#getThird-_LPAR_in-Checking-Array-Bounds_RPAR_-next-next": {"display": "getThird", "context": ["The Lean Language Reference", "Terms", "Conditionals", "Checking Array Bounds"]}, "/Terms/Conditionals/#getThird-_LPAR_in-Checking-Array-Bounds_RPAR_-next": {"display": "getThird", "context": ["The Lean Language Reference", "Terms", "Conditionals", "Checking Array Bounds"]}, "/Terms/Conditionals/#getThird-_LPAR_in-Checking-Array-Bounds_RPAR_": {"display": "getThird", "context": ["The Lean Language Reference", "Terms", "Conditionals", "Checking Array Bounds"]}}, "address": "/Terms/Conditionals/"}], "getPPContext (in Pretty-Printed Syntax)": [{"id": "getPPContext-_LPAR_in-Pretty-Printed-Syntax_RPAR_", "data": {"/Notations-and-Macros/Defining-New-Syntax/#getPPContext-_LPAR_in-Pretty-Printed-Syntax_RPAR_": {"display": "getPPContext", "context": ["The Lean Language Reference", "Notations and Macros", "Defining New Syntax", "Inspecting Syntax", "Pretty-Printed Syntax"]}}, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "getName (in Infix Functor and Applicative Operators)": [{"id": "getName-_LPAR_in-Infix--Functor--and--Applicative--Operators_RPAR_", "data": {"/Functors___-Monads-and--do--Notation/Syntax/#getName-_LPAR_in-Infix--Functor--and--Applicative--Operators_RPAR_": {"display": "getName", "context": ["The Lean Language Reference", "Functors, Monads and do -Notation", "Syntax", "Infix Operators", "Applicative Functors", "Infix Functor and Applicative Operators"]}}, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}], "getNLinesRev (in Dependent Pairs with Data)": [{"id": "getNLinesRev-_LPAR_in-Dependent-Pairs-with-Data_RPAR_", "data": {"/Basic-Types/Tuples/#getNLinesRev-_LPAR_in-Dependent-Pairs-with-Data_RPAR_": {"display": "getNLinesRev", "context": ["The Lean Language Reference", "Basic Types", "Tuples", "Dependent Pairs", "Dependent Pairs with Data"]}}, "address": "/Basic-Types/Tuples/"}], "getNLines (in Dependent Pairs with Data)": [{"id": "getNLines-_LPAR_in-Dependent-Pairs-with-Data_RPAR_", "data": {"/Basic-Types/Tuples/#getNLines-_LPAR_in-Dependent-Pairs-with-Data_RPAR_": {"display": "getNLines", "context": ["The Lean Language Reference", "Basic Types", "Tuples", "Dependent Pairs", "Dependent Pairs with Data"]}}, "address": "/Basic-Types/Tuples/"}], "getFirst (in Finitely Many Skips)": [{"id": "getFirst-_LPAR_in-Finitely-Many-Skips_RPAR_", "data": {"/Iterators/Consuming-Iterators/#getFirst-_LPAR_in-Finitely-Many-Skips_RPAR_": {"display": "getFirst", "context": ["The Lean Language Reference", "Iterators", "Consuming Iterators", "Stepping Iterators", "Termination", "Finitely Many Skips"]}}, "address": "/Iterators/Consuming-Iterators/"}], "getFavoriteNat (in Infix Functor and Applicative Operators)": [{"id": "getFavoriteNat-_LPAR_in-Infix--Functor--and--Applicative--Operators_RPAR_", "data": {"/Functors___-Monads-and--do--Notation/Syntax/#getFavoriteNat-_LPAR_in-Infix--Functor--and--Applicative--Operators_RPAR_": {"display": "getFavoriteNat", "context": ["The Lean Language Reference", "Functors, Monads and do -Notation", "Syntax", "Infix Operators", "Applicative Functors", "Infix Functor and Applicative Operators"]}}, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}], "getDOp (in Provided Operator Names)": [{"id": "getDOp-_LPAR_in-Provided-Operator-Names_RPAR_", "data": {"/Notations-and-Macros/Custom-Operators/#getDOp-_LPAR_in-Provided-Operator-Names_RPAR_": {"display": "getDOp", "context": ["The Lean Language Reference", "Notations and Macros", "Custom Operators", "Provided Operator Names"]}}, "address": "/Notations-and-Macros/Custom-Operators/"}], "getBytes' (in Exceptions and Lifting)": [{"id": "getBytes___-_LPAR_in-Exceptions-and-Lifting_RPAR_-next", "data": {"/Functors___-Monads-and--do--Notation/Lifting-Monads/#getBytes___-_LPAR_in-Exceptions-and-Lifting_RPAR_-next": {"display": "getBytes'", "context": ["The Lean Language Reference", "Functors, Monads and do -Notation", "Lifting Monads", "Reversing Lifts", "Reversible Lifting with MonadControl", "Exceptions and Lifting"]}, "/Functors___-Monads-and--do--Notation/Lifting-Monads/#getBytes___-_LPAR_in-Exceptions-and-Lifting_RPAR_": {"display": "getBytes'", "context": ["The Lean Language Reference", "Functors, Monads and do -Notation", "Lifting Monads", "Reversing Lifts", "Reversible Lifting with MonadControl", "Exceptions and Lifting"]}}, "address": "/Functors___-Monads-and--do--Notation/Lifting-Monads/"}, {"id": "getBytes___-_LPAR_in-Exceptions-and-Lifting_RPAR_", "data": {"/Functors___-Monads-and--do--Notation/Lifting-Monads/#getBytes___-_LPAR_in-Exceptions-and-Lifting_RPAR_-next": {"display": "getBytes'", "context": ["The Lean Language Reference", "Functors, Monads and do -Notation", "Lifting Monads", "Reversing Lifts", "Reversible Lifting with MonadControl", "Exceptions and Lifting"]}, "/Functors___-Monads-and--do--Notation/Lifting-Monads/#getBytes___-_LPAR_in-Exceptions-and-Lifting_RPAR_": {"display": "getBytes'", "context": ["The Lean Language Reference", "Functors, Monads and do -Notation", "Lifting Monads", "Reversing Lifts", "Reversible Lifting with MonadControl", "Exceptions and Lifting"]}}, "address": "/Functors___-Monads-and--do--Notation/Lifting-Monads/"}], "getBytes (in Exceptions and Lifting)": [{"id": "getBytes-_LPAR_in-Exceptions-and-Lifting_RPAR_", "data": {"/Functors___-Monads-and--do--Notation/Lifting-Monads/#getBytes-_LPAR_in-Exceptions-and-Lifting_RPAR_": {"display": "getBytes", "context": ["The Lean Language Reference", "Functors, Monads and do -Notation", "Lifting Monads", "Reversing Lifts", "Reversible Lifting with MonadControl", "Exceptions and Lifting"]}}, "address": "/Functors___-Monads-and--do--Notation/Lifting-Monads/"}], "getByte (in Exceptions and Lifting)": [{"id": "getByte-_LPAR_in-Exceptions-and-Lifting_RPAR_", "data": {"/Functors___-Monads-and--do--Notation/Lifting-Monads/#getByte-_LPAR_in-Exceptions-and-Lifting_RPAR_": {"display": "getByte", "context": ["The Lean Language Reference", "Functors, Monads and do -Notation", "Lifting Monads", "Reversing Lifts", "Reversible Lifting with MonadControl", "Exceptions and Lifting"]}}, "address": "/Functors___-Monads-and--do--Notation/Lifting-Monads/"}], "getAlpha (in Coercions and Option)": [{"id": "getAlpha-_LPAR_in-Coercions-and--Option_RPAR_", "data": {"/Basic-Types/Optional-Values/#getAlpha-_LPAR_in-Coercions-and--Option_RPAR_": {"display": "getAlpha", "context": ["The Lean Language Reference", "Basic Types", "Optional Values", "Coercions", "Coercions and Option"]}}, "address": "/Basic-Types/Optional-Values/"}], "g (in Selecting Patterns)": [{"id": "g-_LPAR_in-Selecting-Patterns_RPAR_", "data": {"/The--grind--tactic/E___matching/#g-_LPAR_in-Selecting-Patterns_RPAR_": {"display": "g", "context": ["The Lean Language Reference", "The grind tactic", "E‑matching", "Patterns", "Selecting Patterns"]}}, "address": "/The--grind--tactic/E___matching/"}], "g (in Ordinary vs Strict Implicit Parameters)": [{"id": "g-_LPAR_in-Ordinary-vs-Strict-Implicit-Parameters_RPAR_", "data": {"/Terms/Functions/#g-_LPAR_in-Ordinary-vs-Strict-Implicit-Parameters_RPAR_": {"display": "g", "context": ["The Lean Language Reference", "Terms", "Functions", "Implicit Parameters", "Ordinary vs Strict Implicit Parameters"]}}, "address": "/Terms/Functions/"}], "g (in Mutual recursion without parameter decrease)": [{"id": "g-_LPAR_in-Mutual-recursion-without-parameter-decrease_RPAR_", "data": {"/Definitions/Recursive-Definitions/#g-_LPAR_in-Mutual-recursion-without-parameter-decrease_RPAR_": {"display": "g", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Well-Founded Recursion", "Mutual Well-Founded Recursion", "Mutual recursion without parameter decrease"]}}, "address": "/Definitions/Recursive-Definitions/"}], "g (in Impossible Code Paths)": [{"id": "g-_LPAR_in-Impossible-Code-Paths_RPAR_", "data": {"/Basic-Types/The-Empty-Type/#g-_LPAR_in-Impossible-Code-Paths_RPAR_": {"display": "g", "context": ["The Lean Language Reference", "Basic Types", "The Empty Type", "Impossible Code Paths"]}}, "address": "/Basic-Types/The-Empty-Type/"}], "g (in E-matching Patterns)": [{"id": "g-_LPAR_in-E-matching-Patterns_RPAR_", "data": {"/The--grind--tactic/E___matching/#g-_LPAR_in-E-matching-Patterns_RPAR_": {"display": "g", "context": ["The Lean Language Reference", "The grind tactic", "E‑matching", "Patterns", "E-matching Patterns"]}}, "address": "/The--grind--tactic/E___matching/"}], "g (in Dead Code and Subsingleton Elimination)": [{"id": "g-_LPAR_in-Dead-Code-and-Subsingleton-Elimination_RPAR_", "data": {"/Basic-Propositions/Truth/#g-_LPAR_in-Dead-Code-and-Subsingleton-Elimination_RPAR_": {"display": "g", "context": ["The Lean Language Reference", "Basic Propositions", "Truth", "Dead Code and Subsingleton Elimination"]}}, "address": "/Basic-Propositions/Truth/"}], "funext'": [{"id": "funext___", "data": {"/The-Type-System/Quotients/#funext___": {"display": "funext'", "context": ["The Lean Language Reference", "The Type System", "Quotients", "Quotients and Function Extensionality"]}}, "address": "/The-Type-System/Quotients/"}], "fromBaseIO (in Lifting IO Monads)": [{"id": "fromBaseIO-_LPAR_in-Lifting--IO--Monads_RPAR_", "data": {"/Functors___-Monads-and--do--Notation/Lifting-Monads/#fromBaseIO-_LPAR_in-Lifting--IO--Monads_RPAR_": {"display": "fromBaseIO", "context": ["The Lean Language Reference", "Functors, Monads and do -Notation", "Lifting Monads", "Lifting IO Monads"]}}, "address": "/Functors___-Monads-and--do--Notation/Lifting-Monads/"}], "friday (in Implementing Coercions)": [{"id": "friday-_LPAR_in-Implementing-Coercions_RPAR_", "data": {"/Coercions/Coercing-Between-Types/#friday-_LPAR_in-Implementing-Coercions_RPAR_": {"display": "friday", "context": ["The Lean Language Reference", "Coercions", "Coercing Between Types", "Implementing Coercions", "Implementing Coercions"]}}, "address": "/Coercions/Coercing-Between-Types/"}], "four (in Defining Coercions)": [{"id": "four-_LPAR_in-Defining-Coercions_RPAR_", "data": {"/Coercions/Coercing-Between-Types/#four-_LPAR_in-Defining-Coercions_RPAR_": {"display": "four", "context": ["The Lean Language Reference", "Coercions", "Coercing Between Types", "Defining Coercions"]}}, "address": "/Coercions/Coercing-Between-Types/"}], "fooInst (in Default Size Instance)": [{"id": "fooInst-_LPAR_in-Default-Size-Instance_RPAR_", "data": {"/Definitions/Recursive-Definitions/#fooInst-_LPAR_in-Default-Size-Instance_RPAR_": {"display": "fooInst", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Well-Founded Recursion", "Well-Founded Relations", "Default Size Instance"]}}, "address": "/Definitions/Recursive-Definitions/"}], "find (in Definition by Partial Fixpoint)": [{"id": "find-_LPAR_in-Definition-by-Partial-Fixpoint_RPAR_", "data": {"/Definitions/Recursive-Definitions/#find-_LPAR_in-Definition-by-Partial-Fixpoint_RPAR_": {"display": "find", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Partial Fixpoint Recursion", "Definition by Partial Fixpoint"]}}, "address": "/Definitions/Recursive-Definitions/"}], "filled (in Grouping and Filling)": [{"id": "filled-_LPAR_in-Grouping-and-Filling_RPAR_", "data": {"/Interacting-with-Lean/#filled-_LPAR_in-Grouping-and-Filling_RPAR_": {"display": "filled", "context": ["The Lean Language Reference", "Interacting with Lean", "Formatted Output", "Format", "Grouping and Filling"]}}, "address": "/Interacting-with-Lean/"}], "fileSize (in Iterators and Effects)": [{"id": "fileSize-_LPAR_in-Iterators-and-Effects_RPAR_", "data": {"/Iterators/Iterator-Definitions/#fileSize-_LPAR_in-Iterators-and-Effects_RPAR_": {"display": "fileSize", "context": ["The Lean Language Reference", "Iterators", "Iterator Definitions", "Finite and Productive Iterators", "Iterators and Effects"]}}, "address": "/Iterators/Iterator-Definitions/"}], "fib (in Termination Proof Obligations)": [{"id": "fib-_LPAR_in-Termination-Proof-Obligations_RPAR_", "data": {"/Definitions/Recursive-Definitions/#fib-_LPAR_in-Termination-Proof-Obligations_RPAR_-next": {"display": "fib", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Well-Founded Recursion", "Termination proofs", "Termination Proof Obligations"]}, "/Definitions/Recursive-Definitions/#fib-_LPAR_in-Termination-Proof-Obligations_RPAR_": {"display": "fib", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Well-Founded Recursion", "Termination proofs", "Termination Proof Obligations"]}}, "address": "/Definitions/Recursive-Definitions/"}, {"id": "fib-_LPAR_in-Termination-Proof-Obligations_RPAR_-next", "data": {"/Definitions/Recursive-Definitions/#fib-_LPAR_in-Termination-Proof-Obligations_RPAR_-next": {"display": "fib", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Well-Founded Recursion", "Termination proofs", "Termination Proof Obligations"]}, "/Definitions/Recursive-Definitions/#fib-_LPAR_in-Termination-Proof-Obligations_RPAR_": {"display": "fib", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Well-Founded Recursion", "Termination proofs", "Termination Proof Obligations"]}}, "address": "/Definitions/Recursive-Definitions/"}], "fib (in Refined Parameters)": [{"id": "fib-_LPAR_in-Refined-Parameters_RPAR_", "data": {"/Definitions/Recursive-Definitions/#fib-_LPAR_in-Refined-Parameters_RPAR_": {"display": "fib", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Well-Founded Recursion", "Termination proofs", "Refined Parameters"]}}, "address": "/Definitions/Recursive-Definitions/"}], "fib (in Nested Patterns and Sub-Terms)": [{"id": "fib-_LPAR_in-Nested-Patterns-and-Sub-Terms_RPAR_", "data": {"/Definitions/Recursive-Definitions/#fib-_LPAR_in-Nested-Patterns-and-Sub-Terms_RPAR_": {"display": "fib", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Structural Recursion", "Explicit Structural Recursion", "Nested Patterns and Sub-Terms"]}}, "address": "/Definitions/Recursive-Definitions/"}], "fib (in Enriched Proof Obligation Contexts)": [{"id": "fib-_LPAR_in-Enriched-Proof-Obligation-Contexts_RPAR_", "data": {"/Definitions/Recursive-Definitions/#fib-_LPAR_in-Enriched-Proof-Obligation-Contexts_RPAR_": {"display": "fib", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Well-Founded Recursion", "Termination proofs", "Enriched Proof Obligation Contexts"]}}, "address": "/Definitions/Recursive-Definitions/"}], "false_is_true (in Inconsistencies From Axioms)": [{"id": "false_is_true-_LPAR_in-Inconsistencies-From-Axioms_RPAR_", "data": {"/Axioms/#false_is_true-_LPAR_in-Inconsistencies-From-Axioms_RPAR_": {"display": "false_is_true", "context": ["The Lean Language Reference", "Axioms", "Consistency", "Inconsistencies From Axioms"]}}, "address": "/Axioms/"}], "fact (in Custom Operators in Lean's Output)": [{"id": "fact-_LPAR_in-Custom-Operators-in-Lean___s-Output_RPAR_", "data": {"/Notations-and-Macros/Custom-Operators/#fact-_LPAR_in-Custom-Operators-in-Lean___s-Output_RPAR_": {"display": "fact", "context": ["The Lean Language Reference", "Notations and Macros", "Custom Operators", "Custom Operators in Lean's Output"]}}, "address": "/Notations-and-Macros/Custom-Operators/"}], "f (in Termination failure)": [{"id": "f-_LPAR_in-Termination-failure_RPAR_", "data": {"/Definitions/Recursive-Definitions/#f-_LPAR_in-Termination-failure_RPAR_": {"display": "f", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Well-Founded Recursion", "Inferring Well-Founded Recursion", "Termination failure"]}}, "address": "/Definitions/Recursive-Definitions/"}], "f (in Selecting Patterns)": [{"id": "f-_LPAR_in-Selecting-Patterns_RPAR_", "data": {"/The--grind--tactic/E___matching/#f-_LPAR_in-Selecting-Patterns_RPAR_": {"display": "f", "context": ["The Lean Language Reference", "The grind tactic", "E‑matching", "Patterns", "Selecting Patterns"]}}, "address": "/The--grind--tactic/E___matching/"}], "f (in Ordinary vs Strict Implicit Parameters)": [{"id": "f-_LPAR_in-Ordinary-vs-Strict-Implicit-Parameters_RPAR_", "data": {"/Terms/Functions/#f-_LPAR_in-Ordinary-vs-Strict-Implicit-Parameters_RPAR_": {"display": "f", "context": ["The Lean Language Reference", "Terms", "Functions", "Implicit Parameters", "Ordinary vs Strict Implicit Parameters"]}}, "address": "/Terms/Functions/"}], "f (in Mutual recursion without parameter decrease)": [{"id": "f-_LPAR_in-Mutual-recursion-without-parameter-decrease_RPAR_", "data": {"/Definitions/Recursive-Definitions/#f-_LPAR_in-Mutual-recursion-without-parameter-decrease_RPAR_": {"display": "f", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Well-Founded Recursion", "Mutual Well-Founded Recursion", "Mutual recursion without parameter decrease"]}}, "address": "/Definitions/Recursive-Definitions/"}], "f (in Impossible Code Paths)": [{"id": "f-_LPAR_in-Impossible-Code-Paths_RPAR_", "data": {"/Basic-Types/The-Empty-Type/#f-_LPAR_in-Impossible-Code-Paths_RPAR_": {"display": "f", "context": ["The Lean Language Reference", "Basic Types", "The Empty Type", "Impossible Code Paths"]}}, "address": "/Basic-Types/The-Empty-Type/"}], "f (in Exporting Private Definitions)": [{"id": "f-_LPAR_in-Exporting-Private-Definitions_RPAR_", "data": {"/Source-Files-and-Modules/#f-_LPAR_in-Exporting-Private-Definitions_RPAR_": {"display": "f", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Exporting Private Definitions"]}}, "address": "/Source-Files-and-Modules/"}], "f (in Expanding Quasiquotation)": [{"id": "f-_LPAR_in-Expanding-Quasiquotation_RPAR_", "data": {"/Notations-and-Macros/Macros/#f-_LPAR_in-Expanding-Quasiquotation_RPAR_": {"display": "f", "context": ["The Lean Language Reference", "Notations and Macros", "Macros", "Quotation", "Quasiquotation", "Expanding Quasiquotation"]}}, "address": "/Notations-and-Macros/Macros/"}], "f (in Enriched Proof Obligation Contexts)": [{"id": "f-_LPAR_in-Enriched-Proof-Obligation-Contexts_RPAR_", "data": {"/Definitions/Recursive-Definitions/#f-_LPAR_in-Enriched-Proof-Obligation-Contexts_RPAR_-next-next": {"display": "f", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Well-Founded Recursion", "Termination proofs", "Enriched Proof Obligation Contexts"]}, "/Definitions/Recursive-Definitions/#f-_LPAR_in-Enriched-Proof-Obligation-Contexts_RPAR_-next": {"display": "f", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Well-Founded Recursion", "Termination proofs", "Enriched Proof Obligation Contexts"]}, "/Definitions/Recursive-Definitions/#f-_LPAR_in-Enriched-Proof-Obligation-Contexts_RPAR_": {"display": "f", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Well-Founded Recursion", "Termination proofs", "Enriched Proof Obligation Contexts"]}}, "address": "/Definitions/Recursive-Definitions/"}, {"id": "f-_LPAR_in-Enriched-Proof-Obligation-Contexts_RPAR_-next", "data": {"/Definitions/Recursive-Definitions/#f-_LPAR_in-Enriched-Proof-Obligation-Contexts_RPAR_-next-next": {"display": "f", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Well-Founded Recursion", "Termination proofs", "Enriched Proof Obligation Contexts"]}, "/Definitions/Recursive-Definitions/#f-_LPAR_in-Enriched-Proof-Obligation-Contexts_RPAR_-next": {"display": "f", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Well-Founded Recursion", "Termination proofs", "Enriched Proof Obligation Contexts"]}, "/Definitions/Recursive-Definitions/#f-_LPAR_in-Enriched-Proof-Obligation-Contexts_RPAR_": {"display": "f", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Well-Founded Recursion", "Termination proofs", "Enriched Proof Obligation Contexts"]}}, "address": "/Definitions/Recursive-Definitions/"}, {"id": "f-_LPAR_in-Enriched-Proof-Obligation-Contexts_RPAR_-next-next", "data": {"/Definitions/Recursive-Definitions/#f-_LPAR_in-Enriched-Proof-Obligation-Contexts_RPAR_-next-next": {"display": "f", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Well-Founded Recursion", "Termination proofs", "Enriched Proof Obligation Contexts"]}, "/Definitions/Recursive-Definitions/#f-_LPAR_in-Enriched-Proof-Obligation-Contexts_RPAR_-next": {"display": "f", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Well-Founded Recursion", "Termination proofs", "Enriched Proof Obligation Contexts"]}, "/Definitions/Recursive-Definitions/#f-_LPAR_in-Enriched-Proof-Obligation-Contexts_RPAR_": {"display": "f", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Well-Founded Recursion", "Termination proofs", "Enriched Proof Obligation Contexts"]}}, "address": "/Definitions/Recursive-Definitions/"}], "f (in E-matching Patterns)": [{"id": "f-_LPAR_in-E-matching-Patterns_RPAR_", "data": {"/The--grind--tactic/E___matching/#f-_LPAR_in-E-matching-Patterns_RPAR_": {"display": "f", "context": ["The Lean Language Reference", "The grind tactic", "E‑matching", "Patterns", "E-matching Patterns"]}}, "address": "/The--grind--tactic/E___matching/"}], "f (in Discriminant Refinement)": [{"id": "f-_LPAR_in-Discriminant-Refinement_RPAR_", "data": {"/Terms/Pattern-Matching/#f-_LPAR_in-Discriminant-Refinement_RPAR_": {"display": "f", "context": ["The Lean Language Reference", "Terms", "Pattern Matching", "Types", "Discriminant Refinement", "Discriminant Refinement"]}}, "address": "/Terms/Pattern-Matching/"}], "f (in Dead Code and Subsingleton Elimination)": [{"id": "f-_LPAR_in-Dead-Code-and-Subsingleton-Elimination_RPAR_", "data": {"/Basic-Propositions/Truth/#f-_LPAR_in-Dead-Code-and-Subsingleton-Elimination_RPAR_": {"display": "f", "context": ["The Lean Language Reference", "Basic Propositions", "Truth", "Dead Code and Subsingleton Elimination"]}}, "address": "/Basic-Propositions/Truth/"}], "extEq": [{"id": "extEq", "data": {"/The-Type-System/Quotients/#extEq": {"display": "extEq", "context": ["The Lean Language Reference", "The Type System", "Quotients", "Quotients and Function Extensionality"]}}, "address": "/The-Type-System/Quotients/"}], "extApp": [{"id": "extApp", "data": {"/The-Type-System/Quotients/#extApp": {"display": "extApp", "context": ["The Lean Language Reference", "The Type System", "Quotients", "Quotients and Function Extensionality"]}}, "address": "/The-Type-System/Quotients/"}], "expandRep (in The Macro Attribute)": [{"id": "expandRep-_LPAR_in-The-Macro-Attribute_RPAR_", "data": {"/Notations-and-Macros/Macros/#expandRep-_LPAR_in-The-Macro-Attribute_RPAR_": {"display": "expandRep", "context": ["The Lean Language Reference", "Notations and Macros", "Macros", "Defining Macros", "The Macro Attribute", "The Macro Attribute"]}}, "address": "/Notations-and-Macros/Macros/"}], "excluded_middle (in Printing Axioms of Simple Definitions)": [{"id": "excluded_middle-_LPAR_in-Printing-Axioms-of-Simple-Definitions_RPAR_", "data": {"/Axioms/#excluded_middle-_LPAR_in-Printing-Axioms-of-Simple-Definitions_RPAR_": {"display": "excluded_middle", "context": ["The Lean Language Reference", "Axioms", "Displaying Axiom Dependencies", "Printing Axioms of Simple Definitions"]}}, "address": "/Axioms/"}], "ex_four_plus_five' (in Proving Existential Statements)": [{"id": "ex_four_plus_five___-_LPAR_in-Proving-Existential-Statements_RPAR_", "data": {"/Basic-Propositions/Quantifiers/#ex_four_plus_five___-_LPAR_in-Proving-Existential-Statements_RPAR_": {"display": "ex_four_plus_five'", "context": ["The Lean Language Reference", "Basic Propositions", "Quantifiers", "Proving Existential Statements"]}}, "address": "/Basic-Propositions/Quantifiers/"}], "ex_four_plus_five (in Proving Existential Statements)": [{"id": "ex_four_plus_five-_LPAR_in-Proving-Existential-Statements_RPAR_", "data": {"/Basic-Propositions/Quantifiers/#ex_four_plus_five-_LPAR_in-Proving-Existential-Statements_RPAR_": {"display": "ex_four_plus_five", "context": ["The Lean Language Reference", "Basic Propositions", "Quantifiers", "Proving Existential Statements"]}}, "address": "/Basic-Propositions/Quantifiers/"}], "ex3 (in Suffixed Splices)": [{"id": "ex3-_LPAR_in-Suffixed-Splices_RPAR_", "data": {"/Notations-and-Macros/Macros/#ex3-_LPAR_in-Suffixed-Splices_RPAR_": {"display": "ex3", "context": ["The Lean Language Reference", "Notations and Macros", "Macros", "Quotation", "Splices", "Suffixed Splices"]}}, "address": "/Notations-and-Macros/Macros/"}], "ex2 (in Suffixed Splices)": [{"id": "ex2-_LPAR_in-Suffixed-Splices_RPAR_", "data": {"/Notations-and-Macros/Macros/#ex2-_LPAR_in-Suffixed-Splices_RPAR_": {"display": "ex2", "context": ["The Lean Language Reference", "Notations and Macros", "Macros", "Quotation", "Splices", "Suffixed Splices"]}}, "address": "/Notations-and-Macros/Macros/"}], "ex2 (in Antiquotation Annotations)": [{"id": "ex2-_LPAR_in-Antiquotation-Annotations_RPAR_", "data": {"/Notations-and-Macros/Macros/#ex2-_LPAR_in-Antiquotation-Annotations_RPAR_": {"display": "ex2", "context": ["The Lean Language Reference", "Notations and Macros", "Macros", "Quotation", "Quasiquotation", "Antiquotation Annotations"]}}, "address": "/Notations-and-Macros/Macros/"}], "ex1 (in Suffixed Splices)": [{"id": "ex1-_LPAR_in-Suffixed-Splices_RPAR_", "data": {"/Notations-and-Macros/Macros/#ex1-_LPAR_in-Suffixed-Splices_RPAR_": {"display": "ex1", "context": ["The Lean Language Reference", "Notations and Macros", "Macros", "Quotation", "Splices", "Suffixed Splices"]}}, "address": "/Notations-and-Macros/Macros/"}], "ex1 (in Antiquotation Annotations)": [{"id": "ex1-_LPAR_in-Antiquotation-Annotations_RPAR_", "data": {"/Notations-and-Macros/Macros/#ex1-_LPAR_in-Antiquotation-Annotations_RPAR_": {"display": "ex1", "context": ["The Lean Language Reference", "Notations and Macros", "Macros", "Quotation", "Quasiquotation", "Antiquotation Annotations"]}}, "address": "/Notations-and-Macros/Macros/"}], "everyOther (in Recursive Equational Lemmas)": [{"id": "everyOther-_LPAR_in-Recursive-Equational-Lemmas_RPAR_", "data": {"/Elaboration-and-Compilation/#everyOther-_LPAR_in-Recursive-Equational-Lemmas_RPAR_": {"display": "everyOther", "context": ["The Lean Language Reference", "Elaboration and Compilation", "Elaboration Results", "Recursive Equational Lemmas"]}}, "address": "/Elaboration-and-Compilation/"}], "even (in Mutual Structural Recursion Over Non-Mutual Types)": [{"id": "even-_LPAR_in-Mutual-Structural-Recursion-Over-Non-Mutual-Types_RPAR_", "data": {"/Definitions/Recursive-Definitions/#even-_LPAR_in-Mutual-Structural-Recursion-Over-Non-Mutual-Types_RPAR_": {"display": "even", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Structural Recursion", "Mutual Structural Recursion", "Mutual Structural Recursion Over Non-Mutual Types"]}}, "address": "/Definitions/Recursive-Definitions/"}], "emptyIsEmpty (in Extending trivial)": [{"id": "emptyIsEmpty-_LPAR_in-Extending--trivial_RPAR_", "data": {"/Tactic-Proofs/Custom-Tactics/#emptyIsEmpty-_LPAR_in-Extending--trivial_RPAR_": {"display": "emptyIsEmpty", "context": ["The Lean Language Reference", "Tactic Proofs", "Custom Tactics", "Tactic Macros", "Extensible Tactic Macros", "Extending trivial"]}}, "address": "/Tactic-Proofs/Custom-Tactics/"}], "elabNotType (in Avoiding a Type)": [{"id": "elabNotType-_LPAR_in-Avoiding-a-Type_RPAR_", "data": {"/Notations-and-Macros/Elaborators/#elabNotType-_LPAR_in-Avoiding-a-Type_RPAR_": {"display": "elabNotType", "context": ["The Lean Language Reference", "Notations and Macros", "Elaborators", "Term Elaborators", "Avoiding a Type"]}}, "address": "/Notations-and-Macros/Elaborators/"}], "e (in Duplicated Terms in Notation Expansion)": [{"id": "e-_LPAR_in-Duplicated-Terms-in-Notation-Expansion_RPAR_", "data": {"/Notations-and-Macros/Notations/#e-_LPAR_in-Duplicated-Terms-in-Notation-Expansion_RPAR_": {"display": "e", "context": ["The Lean Language Reference", "Notations and Macros", "Notations", "Duplicated Terms in Notation Expansion"]}}, "address": "/Notations-and-Macros/Notations/"}], "dup (in Duplicated Terms in Notation Expansion)": [{"id": "dup-_LPAR_in-Duplicated-Terms-in-Notation-Expansion_RPAR_", "data": {"/Notations-and-Macros/Notations/#dup-_LPAR_in-Duplicated-Terms-in-Notation-Expansion_RPAR_": {"display": "dup", "context": ["The Lean Language Reference", "Notations and Macros", "Notations", "Duplicated Terms in Notation Expansion"]}}, "address": "/Notations-and-Macros/Notations/"}], "double_spec (in Schematic Variables)": [{"id": "double_spec-_LPAR_in-Schematic-Variables_RPAR_", "data": {"/The--mvcgen--tactic/Predicate-Transformers/#double_spec-_LPAR_in-Schematic-Variables_RPAR_": {"display": "double_spec", "context": ["The Lean Language Reference", "The mvcgen tactic", "Predicate Transformers", "Specification Lemmas", "Schematic Variables"]}}, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "double_spec (in Schematic Postconditions)": [{"id": "double_spec-_LPAR_in-Schematic-Postconditions_RPAR_", "data": {"/The--mvcgen--tactic/Enabling--mvcgen--For-Monads/#double_spec-_LPAR_in-Schematic-Postconditions_RPAR_": {"display": "double_spec", "context": ["The Lean Language Reference", "The mvcgen tactic", "Enabling mvcgen For Monads", "Schematic Postconditions"]}}, "address": "/The--mvcgen--tactic/Enabling--mvcgen--For-Monads/"}], "double_neg_elim (in Using #print axioms with #guard_msgs)": [{"id": "double_neg_elim-_LPAR_in-Using--___print-axioms--with--___guard_msgs_RPAR_", "data": {"/Axioms/#double_neg_elim-_LPAR_in-Using--___print-axioms--with--___guard_msgs_RPAR_": {"display": "double_neg_elim", "context": ["The Lean Language Reference", "Axioms", "Displaying Axiom Dependencies", "Using #print axioms with #guard_msgs"]}}, "address": "/Axioms/"}], "double_inj (in Injectivity Patterns)": [{"id": "double_inj-_LPAR_in-Injectivity-Patterns_RPAR_", "data": {"/The--grind--tactic/E___matching/#double_inj-_LPAR_in-Injectivity-Patterns_RPAR_": {"display": "double_inj", "context": ["The Lean Language Reference", "The grind tactic", "E‑matching", "Patterns", "Injectivity Patterns"]}}, "address": "/The--grind--tactic/E___matching/"}], "double (in Schematic Variables)": [{"id": "double-_LPAR_in-Schematic-Variables_RPAR_", "data": {"/The--mvcgen--tactic/Predicate-Transformers/#double-_LPAR_in-Schematic-Variables_RPAR_": {"display": "double", "context": ["The Lean Language Reference", "The mvcgen tactic", "Predicate Transformers", "Specification Lemmas", "Schematic Variables"]}}, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "double (in Schematic Postconditions)": [{"id": "double-_LPAR_in-Schematic-Postconditions_RPAR_", "data": {"/The--mvcgen--tactic/Enabling--mvcgen--For-Monads/#double-_LPAR_in-Schematic-Postconditions_RPAR_": {"display": "double", "context": ["The Lean Language Reference", "The mvcgen tactic", "Enabling mvcgen For Monads", "Schematic Postconditions"]}}, "address": "/The--mvcgen--tactic/Enabling--mvcgen--For-Monads/"}], "double (in Injectivity Patterns)": [{"id": "double-_LPAR_in-Injectivity-Patterns_RPAR_", "data": {"/The--grind--tactic/E___matching/#double-_LPAR_in-Injectivity-Patterns_RPAR_": {"display": "double", "context": ["The Lean Language Reference", "The grind tactic", "E‑matching", "Patterns", "Injectivity Patterns"]}}, "address": "/The--grind--tactic/E___matching/"}], "div_trans (in Inspecting Patterns)": [{"id": "div_trans-_LPAR_in-Inspecting-Patterns_RPAR_", "data": {"/The--grind--tactic/E___matching/#div_trans-_LPAR_in-Inspecting-Patterns_RPAR_": {"display": "div_trans", "context": ["The Lean Language Reference", "The grind tactic", "E‑matching", "Inspecting Patterns", "Inspecting Patterns"]}}, "address": "/The--grind--tactic/E___matching/"}], "div.eq2 (in Division by Iterated Subtraction: Termination Proof)": [{"id": "div___eq2-_LPAR_in-Division-by-Iterated-Subtraction___-Termination-Proof_RPAR_", "data": {"/Definitions/Recursive-Definitions/#div___eq2-_LPAR_in-Division-by-Iterated-Subtraction___-Termination-Proof_RPAR_": {"display": "div.eq2", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Well-Founded Recursion", "Theory and Construction", "Division by Iterated Subtraction: Termination Proof"]}}, "address": "/Definitions/Recursive-Definitions/"}], "div.eq1 (in Division by Iterated Subtraction: Termination Proof)": [{"id": "div___eq1-_LPAR_in-Division-by-Iterated-Subtraction___-Termination-Proof_RPAR_", "data": {"/Definitions/Recursive-Definitions/#div___eq1-_LPAR_in-Division-by-Iterated-Subtraction___-Termination-Proof_RPAR_": {"display": "div.eq1", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Well-Founded Recursion", "Theory and Construction", "Division by Iterated Subtraction: Termination Proof"]}}, "address": "/Definitions/Recursive-Definitions/"}], "div.eq0 (in Division by Iterated Subtraction: Termination Proof)": [{"id": "div___eq0-_LPAR_in-Division-by-Iterated-Subtraction___-Termination-Proof_RPAR_-next", "data": {"/Definitions/Recursive-Definitions/#div___eq0-_LPAR_in-Division-by-Iterated-Subtraction___-Termination-Proof_RPAR_-next": {"display": "div.eq0", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Well-Founded Recursion", "Theory and Construction", "Division by Iterated Subtraction: Termination Proof"]}, "/Definitions/Recursive-Definitions/#div___eq0-_LPAR_in-Division-by-Iterated-Subtraction___-Termination-Proof_RPAR_": {"display": "div.eq0", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Well-Founded Recursion", "Theory and Construction", "Division by Iterated Subtraction: Termination Proof"]}}, "address": "/Definitions/Recursive-Definitions/"}, {"id": "div___eq0-_LPAR_in-Division-by-Iterated-Subtraction___-Termination-Proof_RPAR_", "data": {"/Definitions/Recursive-Definitions/#div___eq0-_LPAR_in-Division-by-Iterated-Subtraction___-Termination-Proof_RPAR_-next": {"display": "div.eq0", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Well-Founded Recursion", "Theory and Construction", "Division by Iterated Subtraction: Termination Proof"]}, "/Definitions/Recursive-Definitions/#div___eq0-_LPAR_in-Division-by-Iterated-Subtraction___-Termination-Proof_RPAR_": {"display": "div.eq0", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Well-Founded Recursion", "Theory and Construction", "Division by Iterated Subtraction: Termination Proof"]}}, "address": "/Definitions/Recursive-Definitions/"}], "div (in Division by Iterated Subtraction: Termination Proof)": [{"id": "div-_LPAR_in-Division-by-Iterated-Subtraction___-Termination-Proof_RPAR_", "data": {"/Definitions/Recursive-Definitions/#div-_LPAR_in-Division-by-Iterated-Subtraction___-Termination-Proof_RPAR_": {"display": "div", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Well-Founded Recursion", "Theory and Construction", "Division by Iterated Subtraction: Termination Proof"]}}, "address": "/Definitions/Recursive-Definitions/"}], "div (in Division by Iterated Subtraction)": [{"id": "div-_LPAR_in-Division-by-Iterated-Subtraction_RPAR_", "data": {"/Definitions/Recursive-Definitions/#div-_LPAR_in-Division-by-Iterated-Subtraction_RPAR_": {"display": "div", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Well-Founded Recursion", "Division by Iterated Subtraction"]}}, "address": "/Definitions/Recursive-Definitions/"}], "discardElems (in Memory Re-Use in IR)": [{"id": "discardElems-_LPAR_in-Memory-Re-Use-in-IR_RPAR_", "data": {"/Run-Time-Code/Reference-Counting/#discardElems-_LPAR_in-Memory-Re-Use-in-IR_RPAR_": {"display": "discardElems", "context": ["The Lean Language Reference", "Run-Time Code", "Reference Counting", "Compiler IR", "Memory Re-Use in IR"]}}, "address": "/Run-Time-Code/Reference-Counting/"}], "deriveIsEnum (in Deriving Handlers)": [{"id": "deriveIsEnum-_LPAR_in-Deriving-Handlers_RPAR_", "data": {"/Type-Classes/Deriving-Instances/#deriveIsEnum-_LPAR_in-Deriving-Handlers_RPAR_": {"display": "deriveIsEnum", "context": ["The Lean Language Reference", "Type Classes", "Deriving Instances", "Deriving Handlers", "Deriving Handlers"]}}, "address": "/Type-Classes/Deriving-Instances/"}], "decreasingCorrect'' (in Patterns for Constructors)": [{"id": "decreasingCorrect______-_LPAR_in-Patterns-for-Constructors_RPAR_", "data": {"/The--grind--tactic/E___matching/#decreasingCorrect______-_LPAR_in-Patterns-for-Constructors_RPAR_": {"display": "decreasingCorrect''", "context": ["The Lean Language Reference", "The grind tactic", "E‑matching", "Patterns", "Patterns for Constructors"]}}, "address": "/The--grind--tactic/E___matching/"}], "decreasingCorrect' (in Patterns for Constructors)": [{"id": "decreasingCorrect___-_LPAR_in-Patterns-for-Constructors_RPAR_", "data": {"/The--grind--tactic/E___matching/#decreasingCorrect___-_LPAR_in-Patterns-for-Constructors_RPAR_": {"display": "decreasingCorrect'", "context": ["The Lean Language Reference", "The grind tactic", "E‑matching", "Patterns", "Patterns for Constructors"]}}, "address": "/The--grind--tactic/E___matching/"}], "decreasingCorrect (in Patterns for Constructors)": [{"id": "decreasingCorrect-_LPAR_in-Patterns-for-Constructors_RPAR_", "data": {"/The--grind--tactic/E___matching/#decreasingCorrect-_LPAR_in-Patterns-for-Constructors_RPAR_": {"display": "decreasingCorrect", "context": ["The Lean Language Reference", "The grind tactic", "E‑matching", "Patterns", "Patterns for Constructors"]}}, "address": "/The--grind--tactic/E___matching/"}], "decreasing (in Patterns for Constructors)": [{"id": "decreasing-_LPAR_in-Patterns-for-Constructors_RPAR_", "data": {"/The--grind--tactic/E___matching/#decreasing-_LPAR_in-Patterns-for-Constructors_RPAR_": {"display": "decreasing", "context": ["The Lean Language Reference", "The grind tactic", "E‑matching", "Patterns", "Patterns for Constructors"]}}, "address": "/The--grind--tactic/E___matching/"}], "countdown.go (in Consuming Iterators Directly)": [{"id": "countdown___go-_LPAR_in-Consuming-Iterators-Directly_RPAR_", "data": {"/Iterators/Consuming-Iterators/#countdown___go-_LPAR_in-Consuming-Iterators-Directly_RPAR_": {"display": "go", "context": ["The Lean Language Reference", "Iterators", "Consuming Iterators", "Consuming Iterators Directly"]}}, "address": "/Iterators/Consuming-Iterators/"}], "countdown' (in Structural Recursion vs Subtraction)": [{"id": "countdown___-_LPAR_in-Structural-Recursion-vs-Subtraction_RPAR_", "data": {"/Definitions/Recursive-Definitions/#countdown___-_LPAR_in-Structural-Recursion-vs-Subtraction_RPAR_-next": {"display": "countdown'", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Structural Recursion", "Structural Recursion vs Subtraction"]}, "/Definitions/Recursive-Definitions/#countdown___-_LPAR_in-Structural-Recursion-vs-Subtraction_RPAR_": {"display": "countdown'", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Structural Recursion", "Structural Recursion vs Subtraction"]}}, "address": "/Definitions/Recursive-Definitions/"}, {"id": "countdown___-_LPAR_in-Structural-Recursion-vs-Subtraction_RPAR_-next", "data": {"/Definitions/Recursive-Definitions/#countdown___-_LPAR_in-Structural-Recursion-vs-Subtraction_RPAR_-next": {"display": "countdown'", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Structural Recursion", "Structural Recursion vs Subtraction"]}, "/Definitions/Recursive-Definitions/#countdown___-_LPAR_in-Structural-Recursion-vs-Subtraction_RPAR_": {"display": "countdown'", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Structural Recursion", "Structural Recursion vs Subtraction"]}}, "address": "/Definitions/Recursive-Definitions/"}], "countdown' (in Structural Recursion and Definitional Equality)": [{"id": "countdown___-_LPAR_in-Structural-Recursion-and-Definitional-Equality_RPAR_", "data": {"/Definitions/Recursive-Definitions/#countdown___-_LPAR_in-Structural-Recursion-and-Definitional-Equality_RPAR_": {"display": "countdown'", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Structural Recursion", "Explicit Structural Recursion", "Structural Recursion and Definitional Equality"]}}, "address": "/Definitions/Recursive-Definitions/"}], "countdown (in Structural Recursion vs Subtraction)": [{"id": "countdown-_LPAR_in-Structural-Recursion-vs-Subtraction_RPAR_", "data": {"/Definitions/Recursive-Definitions/#countdown-_LPAR_in-Structural-Recursion-vs-Subtraction_RPAR_": {"display": "countdown", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Structural Recursion", "Structural Recursion vs Subtraction"]}}, "address": "/Definitions/Recursive-Definitions/"}], "countdown (in Structural Recursion and Definitional Equality)": [{"id": "countdown-_LPAR_in-Structural-Recursion-and-Definitional-Equality_RPAR_", "data": {"/Definitions/Recursive-Definitions/#countdown-_LPAR_in-Structural-Recursion-and-Definitional-Equality_RPAR_": {"display": "countdown", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Structural Recursion", "Explicit Structural Recursion", "Structural Recursion and Definitional Equality"]}}, "address": "/Definitions/Recursive-Definitions/"}], "countdown (in Redirecting Standard I/O to Strings)": [{"id": "countdown-_LPAR_in-Redirecting-Standard-I___O-to-Strings_RPAR_", "data": {"/IO/Files___-File-Handles___-and-Streams/#countdown-_LPAR_in-Redirecting-Standard-I___O-to-Strings_RPAR_": {"display": "countdown", "context": ["The Lean Language Reference", "IO", "Files, File Handles, and Streams", "Standard I/O", "Redirecting Standard I/O to Strings"]}}, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "countdown (in Converting Iterators to Lists)": [{"id": "countdown-_LPAR_in-Converting-Iterators-to-Lists_RPAR_", "data": {"/Iterators/Consuming-Iterators/#countdown-_LPAR_in-Converting-Iterators-to-Lists_RPAR_": {"display": "countdown", "context": ["The Lean Language Reference", "Iterators", "Consuming Iterators", "Converting Iterators to Lists"]}}, "address": "/Iterators/Consuming-Iterators/"}], "countdown (in Consuming Iterators in Loops)": [{"id": "countdown-_LPAR_in-Consuming-Iterators-in-Loops_RPAR_", "data": {"/Iterators/Consuming-Iterators/#countdown-_LPAR_in-Consuming-Iterators-in-Loops_RPAR_": {"display": "countdown", "context": ["The Lean Language Reference", "Iterators", "Consuming Iterators", "Consuming Iterators in Loops"]}}, "address": "/Iterators/Consuming-Iterators/"}], "countdown (in Consuming Iterators Directly)": [{"id": "countdown-_LPAR_in-Consuming-Iterators-Directly_RPAR_", "data": {"/Iterators/Consuming-Iterators/#countdown-_LPAR_in-Consuming-Iterators-Directly_RPAR_": {"display": "countdown", "context": ["The Lean Language Reference", "Iterators", "Consuming Iterators", "Consuming Iterators Directly"]}}, "address": "/Iterators/Consuming-Iterators/"}], "count (in Universe monomorphism in auto-bound implicit parameters)": [{"id": "count-_LPAR_in-Universe-monomorphism-in-auto-bound-implicit-parameters_RPAR_", "data": {"/The-Type-System/Universes/#count-_LPAR_in-Universe-monomorphism-in-auto-bound-implicit-parameters_RPAR_": {"display": "count", "context": ["The Lean Language Reference", "The Type System", "Universes", "Polymorphism", "Universe monomorphism in auto-bound implicit parameters"]}}, "address": "/The-Type-System/Universes/"}], "cos": [{"id": "cos", "data": {"/The--grind--tactic/Bigger-Examples/#cos": {"display": "cos", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "Integrating grind 's Features"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}], "coords (in Field Indices and Structure Inheritance)": [{"id": "coords-_LPAR_in-Field-Indices-and-Structure-Inheritance_RPAR_", "data": {"/The-Type-System/Inductive-Types/#coords-_LPAR_in-Field-Indices-and-Structure-Inheritance_RPAR_": {"display": "coords", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Structure Declarations", "Structure Inheritance", "Field Indices and Structure Inheritance"]}}, "address": "/The-Type-System/Inductive-Types/"}], "constantIndex (in Ineligible decreasing parameters)": [{"id": "constantIndex-_LPAR_in-Ineligible-decreasing-parameters_RPAR_", "data": {"/Definitions/Recursive-Definitions/#constantIndex-_LPAR_in-Ineligible-decreasing-parameters_RPAR_": {"display": "constantIndex", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Structural Recursion", "Explicit Structural Recursion", "Ineligible decreasing parameters"]}}, "address": "/Definitions/Recursive-Definitions/"}], "colors (in Mixing Collections)": [{"id": "colors-_LPAR_in-Mixing-Collections_RPAR_", "data": {"/Iterators/#colors-_LPAR_in-Mixing-Collections_RPAR_": {"display": "colors", "context": ["The Lean Language Reference", "Iterators", "Mixing Collections"]}}, "address": "/Iterators/"}], "colors (in Cross-Phase Code Re-Use)": [{"id": "colors-_LPAR_in-Cross-Phase-Code-Re-Use_RPAR_", "data": {"/Source-Files-and-Modules/#colors-_LPAR_in-Cross-Phase-Code-Re-Use_RPAR_": {"display": "colors", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "The Meta Phase", "Cross-Phase Code Re-Use"]}}, "address": "/Source-Files-and-Modules/"}], "colors (in Avoiding Intermediate Structures)": [{"id": "colors-_LPAR_in-Avoiding-Intermediate-Structures_RPAR_", "data": {"/Iterators/#colors-_LPAR_in-Avoiding-Intermediate-Structures_RPAR_": {"display": "colors", "context": ["The Lean Language Reference", "Iterators", "Avoiding Intermediate Structures"]}}, "address": "/Iterators/"}], "color (in Explicit Root Namespace)": [{"id": "color-_LPAR_in-Explicit-Root-Namespace_RPAR_", "data": {"/Namespaces-and-Sections/#color-_LPAR_in-Explicit-Root-Namespace_RPAR_": {"display": "color", "context": ["The Lean Language Reference", "Namespaces and Sections", "Namespaces", "Explicit Root Namespace"]}}, "address": "/Namespaces-and-Sections/"}], "codes (in Mixing Collections)": [{"id": "codes-_LPAR_in-Mixing-Collections_RPAR_", "data": {"/Iterators/#codes-_LPAR_in-Mixing-Collections_RPAR_": {"display": "codes", "context": ["The Lean Language Reference", "Iterators", "Mixing Collections"]}}, "address": "/Iterators/"}], "codes (in Avoiding Intermediate Structures)": [{"id": "codes-_LPAR_in-Avoiding-Intermediate-Structures_RPAR_", "data": {"/Iterators/#codes-_LPAR_in-Avoiding-Intermediate-Structures_RPAR_": {"display": "codes", "context": ["The Lean Language Reference", "Iterators", "Avoiding Intermediate Structures"]}}, "address": "/Iterators/"}], "bump_correct' (in Stateful Proofs)": [{"id": "bump_correct___-_LPAR_in-Stateful-Proofs_RPAR_", "data": {"/The--mvcgen--tactic/Proof-Mode/#bump_correct___-_LPAR_in-Stateful-Proofs_RPAR_": {"display": "bump_correct'", "context": ["The Lean Language Reference", "The mvcgen tactic", "Proof Mode", "Stateful Proofs"]}}, "address": "/The--mvcgen--tactic/Proof-Mode/"}], "bump_correct (in Stateful Proofs)": [{"id": "bump_correct-_LPAR_in-Stateful-Proofs_RPAR_", "data": {"/The--mvcgen--tactic/Proof-Mode/#bump_correct-_LPAR_in-Stateful-Proofs_RPAR_": {"display": "bump_correct", "context": ["The Lean Language Reference", "The mvcgen tactic", "Proof Mode", "Stateful Proofs"]}}, "address": "/The--mvcgen--tactic/Proof-Mode/"}], "bump (in Stateful Proofs)": [{"id": "bump-_LPAR_in-Stateful-Proofs_RPAR_", "data": {"/The--mvcgen--tactic/Proof-Mode/#bump-_LPAR_in-Stateful-Proofs_RPAR_": {"display": "bump", "context": ["The Lean Language Reference", "The mvcgen tactic", "Proof Mode", "Stateful Proofs"]}}, "address": "/The--mvcgen--tactic/Proof-Mode/"}], "broccoli (in Using Ord Instances for LT and LE Instances)": [{"id": "broccoli-_LPAR_in-Using--Ord--Instances-for--LT--and--LE--Instances_RPAR_", "data": {"/Type-Classes/Basic-Classes/#broccoli-_LPAR_in-Using--Ord--Instances-for--LT--and--LE--Instances_RPAR_": {"display": "broccoli", "context": ["The Lean Language Reference", "Type Classes", "Basic Classes", "Ordering", "Using Ord Instances for LT and LE Instances"]}}, "address": "/Type-Classes/Basic-Classes/"}], "boolCases (in Matching, With and Without Generalization)": [{"id": "boolCases-_LPAR_in-Matching___-With-and-Without-Generalization_RPAR_-next", "data": {"/Terms/Pattern-Matching/#boolCases-_LPAR_in-Matching___-With-and-Without-Generalization_RPAR_-next": {"display": "boolCases", "context": ["The Lean Language Reference", "Terms", "Pattern Matching", "Types", "Generalization", "Matching, With and Without Generalization"]}, "/Terms/Pattern-Matching/#boolCases-_LPAR_in-Matching___-With-and-Without-Generalization_RPAR_": {"display": "boolCases", "context": ["The Lean Language Reference", "Terms", "Pattern Matching", "Types", "Generalization", "Matching, With and Without Generalization"]}}, "address": "/Terms/Pattern-Matching/"}, {"id": "boolCases-_LPAR_in-Matching___-With-and-Without-Generalization_RPAR_", "data": {"/Terms/Pattern-Matching/#boolCases-_LPAR_in-Matching___-With-and-Without-Generalization_RPAR_-next": {"display": "boolCases", "context": ["The Lean Language Reference", "Terms", "Pattern Matching", "Types", "Generalization", "Matching, With and Without Generalization"]}, "/Terms/Pattern-Matching/#boolCases-_LPAR_in-Matching___-With-and-Without-Generalization_RPAR_": {"display": "boolCases", "context": ["The Lean Language Reference", "Terms", "Pattern Matching", "Types", "Generalization", "Matching, With and Without Generalization"]}}, "address": "/Terms/Pattern-Matching/"}], "bogus": [{"id": "bogus", "data": {"/Introduction/#bogus": {"display": "bogus", "context": ["The Lean Language Reference", "Introduction", "Typographical Conventions", "Lean Code"]}}, "address": "/Introduction/"}], "binarySearch.go (in Array Indexing)": [{"id": "binarySearch___go-_LPAR_in-Array-Indexing_RPAR_", "data": {"/Definitions/Recursive-Definitions/#binarySearch___go-_LPAR_in-Array-Indexing_RPAR_": {"display": "go", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Well-Founded Recursion", "Inferring Well-Founded Recursion", "Array Indexing"]}}, "address": "/Definitions/Recursive-Definitions/"}], "binarySearch (in Array Indexing)": [{"id": "binarySearch-_LPAR_in-Array-Indexing_RPAR_", "data": {"/Definitions/Recursive-Definitions/#binarySearch-_LPAR_in-Array-Indexing_RPAR_": {"display": "binarySearch", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Well-Founded Recursion", "Inferring Well-Founded Recursion", "Array Indexing"]}}, "address": "/Definitions/Recursive-Definitions/"}], "bigSum (in Creating and Tracking Proofs That Trust the Compiler)": [{"id": "bigSum-_LPAR_in-Creating-and-Tracking-Proofs-That-Trust-the-Compiler_RPAR_", "data": {"/Axioms/#bigSum-_LPAR_in-Creating-and-Tracking-Proofs-That-Trust-the-Compiler_RPAR_": {"display": "bigSum", "context": ["The Lean Language Reference", "Axioms", "Standard Axioms", "Creating and Tracking Proofs That Trust the Compiler"]}}, "address": "/Axioms/"}], "better_double_spec (in Schematic Postconditions)": [{"id": "better_double_spec-_LPAR_in-Schematic-Postconditions_RPAR_", "data": {"/The--mvcgen--tactic/Enabling--mvcgen--For-Monads/#better_double_spec-_LPAR_in-Schematic-Postconditions_RPAR_": {"display": "better_double_spec", "context": ["The Lean Language Reference", "The mvcgen tactic", "Enabling mvcgen For Monads", "Schematic Postconditions"]}}, "address": "/The--mvcgen--tactic/Enabling--mvcgen--For-Monads/"}], "asString (in Coercing Decorated Functions to Function Types)": [{"id": "asString-_LPAR_in-Coercing-Decorated-Functions-to-Function-Types_RPAR_", "data": {"/Coercions/Coercing-to-Function-Types/#asString-_LPAR_in-Coercing-Decorated-Functions-to-Function-Types_RPAR_": {"display": "asString", "context": ["The Lean Language Reference", "Coercions", "Coercing to Function Types", "Coercing Decorated Functions to Function Types"]}}, "address": "/Coercions/Coercing-to-Function-Types/"}], "arbitrary! (in One vs. Two Sets of Macro Rules)": [{"id": "arbitrary___-_LPAR_in-One-vs___-Two-Sets-of-Macro-Rules_RPAR_", "data": {"/Notations-and-Macros/Macros/#arbitrary___-_LPAR_in-One-vs___-Two-Sets-of-Macro-Rules_RPAR_": {"display": "arbitrary!", "context": ["The Lean Language Reference", "Notations and Macros", "Macros", "Defining Macros", "The macro_rules Command", "One vs. Two Sets of Macro Rules"]}}, "address": "/Notations-and-Macros/Macros/"}], "append (in Coercing Decorated Functions to Function Types)": [{"id": "append-_LPAR_in-Coercing-Decorated-Functions-to-Function-Types_RPAR_", "data": {"/Coercions/Coercing-to-Function-Types/#append-_LPAR_in-Coercing-Decorated-Functions-to-Function-Types_RPAR_": {"display": "append", "context": ["The Lean Language Reference", "Coercions", "Coercing to Function Types", "Coercing Decorated Functions to Function Types"]}}, "address": "/Coercions/Coercing-to-Function-Types/"}], "answer_eq_other (in Partial Functions in Proofs)": [{"id": "answer_eq_other-_LPAR_in-Partial-Functions-in-Proofs_RPAR_", "data": {"/Definitions/Recursive-Definitions/#answer_eq_other-_LPAR_in-Partial-Functions-in-Proofs_RPAR_": {"display": "answer_eq_other", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Partial and Unsafe Definitions", "Partial Functions", "Partial Functions in Proofs"]}}, "address": "/Definitions/Recursive-Definitions/"}], "answerUser (in Partial Functions in Proofs)": [{"id": "answerUser-_LPAR_in-Partial-Functions-in-Proofs_RPAR_", "data": {"/Definitions/Recursive-Definitions/#answerUser-_LPAR_in-Partial-Functions-in-Proofs_RPAR_": {"display": "answerUser", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Partial and Unsafe Definitions", "Partial Functions", "Partial Functions in Proofs"]}}, "address": "/Definitions/Recursive-Definitions/"}], "answerOtherUser (in Partial Functions in Proofs)": [{"id": "answerOtherUser-_LPAR_in-Partial-Functions-in-Proofs_RPAR_", "data": {"/Definitions/Recursive-Definitions/#answerOtherUser-_LPAR_in-Partial-Functions-in-Proofs_RPAR_": {"display": "answerOtherUser", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Partial and Unsafe Definitions", "Partial Functions", "Partial Functions in Proofs"]}}, "address": "/Definitions/Recursive-Definitions/"}], "allWeekdays' (in Implementing Ranges)": [{"id": "allWeekdays___-_LPAR_in-Implementing-Ranges_RPAR_", "data": {"/Basic-Types/Ranges/#allWeekdays___-_LPAR_in-Implementing-Ranges_RPAR_": {"display": "allWeekdays'", "context": ["The Lean Language Reference", "Basic Types", "Ranges", "Implementing Ranges", "Implementing Ranges"]}}, "address": "/Basic-Types/Ranges/"}], "allWeekdays (in Implementing Ranges)": [{"id": "allWeekdays-_LPAR_in-Implementing-Ranges_RPAR_", "data": {"/Basic-Types/Ranges/#allWeekdays-_LPAR_in-Implementing-Ranges_RPAR_": {"display": "allWeekdays", "context": ["The Lean Language Reference", "Basic Types", "Ranges", "Implementing Ranges", "Implementing Ranges"]}}, "address": "/Basic-Types/Ranges/"}], "allNats (in Converting Infinite Iterators to Lists)": [{"id": "allNats-_LPAR_in-Converting-Infinite-Iterators-to-Lists_RPAR_-next", "data": {"/Iterators/Consuming-Iterators/#allNats-_LPAR_in-Converting-Infinite-Iterators-to-Lists_RPAR_-next": {"display": "allNats", "context": ["The Lean Language Reference", "Iterators", "Consuming Iterators", "Converting Infinite Iterators to Lists"]}, "/Iterators/Consuming-Iterators/#allNats-_LPAR_in-Converting-Infinite-Iterators-to-Lists_RPAR_": {"display": "allNats", "context": ["The Lean Language Reference", "Iterators", "Consuming Iterators", "Converting Infinite Iterators to Lists"]}}, "address": "/Iterators/Consuming-Iterators/"}, {"id": "allNats-_LPAR_in-Converting-Infinite-Iterators-to-Lists_RPAR_", "data": {"/Iterators/Consuming-Iterators/#allNats-_LPAR_in-Converting-Infinite-Iterators-to-Lists_RPAR_-next": {"display": "allNats", "context": ["The Lean Language Reference", "Iterators", "Consuming Iterators", "Converting Infinite Iterators to Lists"]}, "/Iterators/Consuming-Iterators/#allNats-_LPAR_in-Converting-Infinite-Iterators-to-Lists_RPAR_": {"display": "allNats", "context": ["The Lean Language Reference", "Iterators", "Consuming Iterators", "Converting Infinite Iterators to Lists"]}}, "address": "/Iterators/Consuming-Iterators/"}], "afterVarying (in Ineligible decreasing parameters)": [{"id": "afterVarying-_LPAR_in-Ineligible-decreasing-parameters_RPAR_", "data": {"/Definitions/Recursive-Definitions/#afterVarying-_LPAR_in-Ineligible-decreasing-parameters_RPAR_": {"display": "afterVarying", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Structural Recursion", "Explicit Structural Recursion", "Ineligible decreasing parameters"]}}, "address": "/Definitions/Recursive-Definitions/"}], "adminUser (in Generalized Field Notation)": [{"id": "adminUser-_LPAR_in-Generalized-Field-Notation_RPAR_", "data": {"/Terms/Function-Application/#adminUser-_LPAR_in-Generalized-Field-Notation_RPAR_": {"display": "adminUser", "context": ["The Lean Language Reference", "Terms", "Function Application", "Generalized Field Notation", "Generalized Field Notation"]}}, "address": "/Terms/Function-Application/"}], "add_spec_pre": [{"id": "add_spec_pre", "data": {"/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/#add_spec_pre": {"display": "add_spec_pre", "context": ["The Lean Language Reference", "The mvcgen tactic", "Tutorial: Verifying Imperative Programs Using mvcgen", "Compositional Reasoning About Effectful Programs Using Hoare Triples", "An Advanced Note About Pure Preconditions and a Notion of Frame Rule"]}}, "address": "/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/"}], "add_spec_hyp": [{"id": "add_spec_hyp", "data": {"/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/#add_spec_hyp": {"display": "add_spec_hyp", "context": ["The Lean Language Reference", "The mvcgen tactic", "Tutorial: Verifying Imperative Programs Using mvcgen", "Compositional Reasoning About Effectful Programs Using Hoare Triples", "An Advanced Note About Pure Preconditions and a Notion of Frame Rule"]}}, "address": "/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/"}], "addThree (in Printing Axioms of Simple Definitions)": [{"id": "addThree-_LPAR_in-Printing-Axioms-of-Simple-Definitions_RPAR_", "data": {"/Axioms/#addThree-_LPAR_in-Printing-Axioms-of-Simple-Definitions_RPAR_": {"display": "addThree", "context": ["The Lean Language Reference", "Axioms", "Displaying Axiom Dependencies", "Printing Axioms of Simple Definitions"]}}, "address": "/Axioms/"}], "addPairs (in Local Instances)": [{"id": "addPairs-_LPAR_in-Local-Instances_RPAR_", "data": {"/Type-Classes/Instance-Synthesis/#addPairs-_LPAR_in-Local-Instances_RPAR_": {"display": "addPairs", "context": ["The Lean Language Reference", "Type Classes", "Instance Synthesis", "Candidate Instances", "Local Instances"]}}, "address": "/Type-Classes/Instance-Synthesis/"}], "addPairs (in Local Instances Have Priority)": [{"id": "addPairs-_LPAR_in-Local-Instances-Have-Priority_RPAR_", "data": {"/Type-Classes/Instance-Synthesis/#addPairs-_LPAR_in-Local-Instances-Have-Priority_RPAR_": {"display": "addPairs", "context": ["The Lean Language Reference", "Type Classes", "Instance Synthesis", "Candidate Instances", "Local Instances Have Priority"]}}, "address": "/Type-Classes/Instance-Synthesis/"}], "addOp_ok_spec": [{"id": "addOp_ok_spec", "data": {"/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/#addOp_ok_spec": {"display": "addOp_ok_spec", "context": ["The Lean Language Reference", "The mvcgen tactic", "Tutorial: Verifying Imperative Programs Using mvcgen", "Extending mvcgen With Support for Custom Monads"]}}, "address": "/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/"}], "addOp": [{"id": "addOp", "data": {"/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/#addOp": {"display": "addOp", "context": ["The Lean Language Reference", "The mvcgen tactic", "Tutorial: Verifying Imperative Programs Using mvcgen", "Extending mvcgen With Support for Custom Monads"]}}, "address": "/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/"}], "addFirstThird (in Idiom Brackets)": [{"id": "addFirstThird-_LPAR_in-Idiom-Brackets_RPAR_", "data": {"/Notations-and-Macros/Macros/#addFirstThird-_LPAR_in-Idiom-Brackets_RPAR_": {"display": "addFirstThird", "context": ["The Lean Language Reference", "Notations and Macros", "Macros", "Defining Macros", "The macro_rules Command", "Idiom Brackets"]}}, "address": "/Notations-and-Macros/Macros/"}], "addAll (in Section Variables)": [{"id": "addAll-_LPAR_in-Section-Variables_RPAR_-next", "data": {"/Namespaces-and-Sections/#addAll-_LPAR_in-Section-Variables_RPAR_-next": {"display": "addAll", "context": ["The Lean Language Reference", "Namespaces and Sections", "Section Scopes", "Section Variables", "Section Variables"]}, "/Namespaces-and-Sections/#addAll-_LPAR_in-Section-Variables_RPAR_": {"display": "addAll", "context": ["The Lean Language Reference", "Namespaces and Sections", "Section Scopes", "Section Variables", "Section Variables"]}}, "address": "/Namespaces-and-Sections/"}, {"id": "addAll-_LPAR_in-Section-Variables_RPAR_", "data": {"/Namespaces-and-Sections/#addAll-_LPAR_in-Section-Variables_RPAR_-next": {"display": "addAll", "context": ["The Lean Language Reference", "Namespaces and Sections", "Section Scopes", "Section Variables", "Section Variables"]}, "/Namespaces-and-Sections/#addAll-_LPAR_in-Section-Variables_RPAR_": {"display": "addAll", "context": ["The Lean Language Reference", "Namespaces and Sections", "Section Scopes", "Section Variables", "Section Variables"]}}, "address": "/Namespaces-and-Sections/"}], "addAlias'' (in Modifying Values in Maps)": [{"id": "addAlias______-_LPAR_in-Modifying-Values-in-Maps_RPAR_", "data": {"/Basic-Types/Maps-and-Sets/#addAlias______-_LPAR_in-Modifying-Values-in-Maps_RPAR_": {"display": "addAlias''", "context": ["The Lean Language Reference", "Basic Types", "Maps and Sets", "Library Design", "Suitable Operators for Uniqueness", "Modifying Values in Maps"]}}, "address": "/Basic-Types/Maps-and-Sets/"}], "addAlias' (in Modifying Values in Maps)": [{"id": "addAlias___-_LPAR_in-Modifying-Values-in-Maps_RPAR_", "data": {"/Basic-Types/Maps-and-Sets/#addAlias___-_LPAR_in-Modifying-Values-in-Maps_RPAR_": {"display": "addAlias'", "context": ["The Lean Language Reference", "Basic Types", "Maps and Sets", "Library Design", "Suitable Operators for Uniqueness", "Modifying Values in Maps"]}}, "address": "/Basic-Types/Maps-and-Sets/"}], "addAlias (in Modifying Values in Maps)": [{"id": "addAlias-_LPAR_in-Modifying-Values-in-Maps_RPAR_", "data": {"/Basic-Types/Maps-and-Sets/#addAlias-_LPAR_in-Modifying-Values-in-Maps_RPAR_": {"display": "addAlias", "context": ["The Lean Language Reference", "Basic Types", "Maps and Sets", "Library Design", "Suitable Operators for Uniqueness", "Modifying Values in Maps"]}}, "address": "/Basic-Types/Maps-and-Sets/"}], "add' (in Recursion vs Recursors)": [{"id": "add___-_LPAR_in-Recursion-vs-Recursors_RPAR_", "data": {"/Definitions/Recursive-Definitions/#add___-_LPAR_in-Recursion-vs-Recursors_RPAR_": {"display": "add'", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Structural Recursion", "Elaboration Using Course-of-Values Recursion", "Recursion vs Recursors"]}}, "address": "/Definitions/Recursive-Definitions/"}], "add' (in Integer Negation and Addition)": [{"id": "add___-_LPAR_in-Integer-Negation-and-Addition_RPAR_", "data": {"/The-Type-System/Quotients/#add___-_LPAR_in-Integer-Negation-and-Addition_RPAR_": {"display": "add'", "context": ["The Lean Language Reference", "The Type System", "Quotients", "Quotient API", "Eliminating Quotients", "Integer Negation and Addition"]}}, "address": "/The-Type-System/Quotients/"}], "add (in Recursion vs Recursors)": [{"id": "add-_LPAR_in-Recursion-vs-Recursors_RPAR_", "data": {"/Definitions/Recursive-Definitions/#add-_LPAR_in-Recursion-vs-Recursors_RPAR_": {"display": "add", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Structural Recursion", "Elaboration Using Course-of-Values Recursion", "Recursion vs Recursors"]}}, "address": "/Definitions/Recursive-Definitions/"}], "add (in Parameter Scope)": [{"id": "add-_LPAR_in-Parameter-Scope_RPAR_", "data": {"/Definitions/Headers-and-Signatures/#add-_LPAR_in-Parameter-Scope_RPAR_": {"display": "add", "context": ["The Lean Language Reference", "Definitions", "Headers and Signatures", "Bracketed Parameter Bindings", "Parameter Scope"]}}, "address": "/Definitions/Headers-and-Signatures/"}], "add (in Match Patterns Follow Reduction)": [{"id": "add-_LPAR_in-Match-Patterns-Follow-Reduction_RPAR_", "data": {"/Terms/Pattern-Matching/#add-_LPAR_in-Match-Patterns-Follow-Reduction_RPAR_": {"display": "add", "context": ["The Lean Language Reference", "Terms", "Pattern Matching", "Custom Pattern Functions", "Match Patterns Follow Reduction"]}}, "address": "/Terms/Pattern-Matching/"}], "ack (in Termination Proof Tactics During Inference)": [{"id": "ack-_LPAR_in-Termination-Proof-Tactics-During-Inference_RPAR_", "data": {"/Definitions/Recursive-Definitions/#ack-_LPAR_in-Termination-Proof-Tactics-During-Inference_RPAR_": {"display": "ack", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Well-Founded Recursion", "Inferring Well-Founded Recursion", "Termination Proof Tactics During Inference"]}}, "address": "/Definitions/Recursive-Definitions/"}], "ack (in No Backtracking of Lexicographic Order)": [{"id": "ack-_LPAR_in-No-Backtracking-of-Lexicographic-Order_RPAR_", "data": {"/Definitions/Recursive-Definitions/#ack-_LPAR_in-No-Backtracking-of-Lexicographic-Order_RPAR_": {"display": "ack", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Well-Founded Recursion", "Default Termination Proof Tactic", "No Backtracking of Lexicographic Order"]}}, "address": "/Definitions/Recursive-Definitions/"}], "ack (in Monadic functions)": [{"id": "ack-_LPAR_in-Monadic-functions_RPAR_", "data": {"/Definitions/Recursive-Definitions/#ack-_LPAR_in-Monadic-functions_RPAR_": {"display": "ack", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Partial Fixpoint Recursion", "Monadic functions", "Monadic functions"]}}, "address": "/Definitions/Recursive-Definitions/"}], "accessControl (in Throwing and Catching Errors)": [{"id": "accessControl-_LPAR_in-Throwing-and-Catching-Errors_RPAR_", "data": {"/IO/Logical-Model/#accessControl-_LPAR_in-Throwing-and-Catching-Errors_RPAR_": {"display": "accessControl", "context": ["The Lean Language Reference", "IO", "Logical Model", "Errors and Error Handling in IO", "Throwing and Catching Errors"]}}, "address": "/IO/Logical-Model/"}], "acc_thd (in Iterating Over Triples)": [{"id": "acc_thd-_LPAR_in-Iterating-Over-Triples_RPAR_", "data": {"/Iterators/Iterator-Definitions/#acc_thd-_LPAR_in-Iterating-Over-Triples_RPAR_": {"display": "acc_thd", "context": ["The Lean Language Reference", "Iterators", "Iterator Definitions", "Finite and Productive Iterators", "Iterating Over Triples"]}}, "address": "/Iterators/Iterator-Definitions/"}], "acc_snd (in Iterating Over Triples)": [{"id": "acc_snd-_LPAR_in-Iterating-Over-Triples_RPAR_", "data": {"/Iterators/Iterator-Definitions/#acc_snd-_LPAR_in-Iterating-Over-Triples_RPAR_": {"display": "acc_snd", "context": ["The Lean Language Reference", "Iterators", "Iterator Definitions", "Finite and Productive Iterators", "Iterating Over Triples"]}}, "address": "/Iterators/Iterator-Definitions/"}], "acc_fst (in Iterating Over Triples)": [{"id": "acc_fst-_LPAR_in-Iterating-Over-Triples_RPAR_", "data": {"/Iterators/Iterator-Definitions/#acc_fst-_LPAR_in-Iterating-Over-Triples_RPAR_": {"display": "acc_fst", "context": ["The Lean Language Reference", "Iterators", "Iterator Definitions", "Finite and Productive Iterators", "Iterating Over Triples"]}}, "address": "/Iterators/Iterator-Definitions/"}], "acc_done (in Iterating Over Triples)": [{"id": "acc_done-_LPAR_in-Iterating-Over-Triples_RPAR_", "data": {"/Iterators/Iterator-Definitions/#acc_done-_LPAR_in-Iterating-Over-Triples_RPAR_": {"display": "acc_done", "context": ["The Lean Language Reference", "Iterators", "Iterator Definitions", "Finite and Productive Iterators", "Iterating Over Triples"]}}, "address": "/Iterators/Iterator-Definitions/"}], "abcs (in Atomic Types and Repr)": [{"id": "abcs-_LPAR_in-Atomic-Types-and--Repr_RPAR_", "data": {"/Interacting-with-Lean/#abcs-_LPAR_in-Atomic-Types-and--Repr_RPAR_": {"display": "abcs", "context": ["The Lean Language Reference", "Interacting with Lean", "Formatted Output", "Repr", "Atomic Types", "Atomic Types and Repr"]}}, "address": "/Interacting-with-Lean/"}], "abc (in Iterating Over Triples)": [{"id": "abc-_LPAR_in-Iterating-Over-Triples_RPAR_", "data": {"/Iterators/Iterator-Definitions/#abc-_LPAR_in-Iterating-Over-Triples_RPAR_": {"display": "abc", "context": ["The Lean Language Reference", "Iterators", "Iterator Definitions", "Finite and Productive Iterators", "Iterating Over Triples"]}}, "address": "/Iterators/Iterator-Definitions/"}], "abc (in Custom Slices)": [{"id": "abc-_LPAR_in-Custom-Slices_RPAR_", "data": {"/Basic-Types/Ranges/#abc-_LPAR_in-Custom-Slices_RPAR_": {"display": "abc", "context": ["The Lean Language Reference", "Basic Types", "Ranges", "Ranges and Slices", "Custom Slices"]}}, "address": "/Basic-Types/Ranges/"}], "abc (in Atomic Types and Repr)": [{"id": "abc-_LPAR_in-Atomic-Types-and--Repr_RPAR_", "data": {"/Interacting-with-Lean/#abc-_LPAR_in-Atomic-Types-and--Repr_RPAR_": {"display": "abc", "context": ["The Lean Language Reference", "Interacting with Lean", "Formatted Output", "Repr", "Atomic Types", "Atomic Types and Repr"]}}, "address": "/Interacting-with-Lean/"}], "aNonemptySumInstance (in Implicit and Explicit Parameters to Instances)": [{"id": "aNonemptySumInstance-_LPAR_in-Implicit-and-Explicit-Parameters-to-Instances_RPAR_", "data": {"/Type-Classes/Instance-Synthesis/#aNonemptySumInstance-_LPAR_in-Implicit-and-Explicit-Parameters-to-Instances_RPAR_": {"display": "aNonemptySumInstance", "context": ["The Lean Language Reference", "Type Classes", "Instance Synthesis", "Instance Parameters and Synthesis", "Implicit and Explicit Parameters to Instances"]}}, "address": "/Type-Classes/Instance-Synthesis/"}], "_private.Manual.Language.InductiveTypes.Structures.0.NatStringBimap.mk (in Modifiers on structure constructor)": [{"id": "_private___Manual___Language___InductiveTypes___Structures___0___NatStringBimap___mk-_LPAR_in-Modifiers-on-structure-constructor_RPAR_", "data": {"/The-Type-System/Inductive-Types/#_private___Manual___Language___InductiveTypes___Structures___0___NatStringBimap___mk-_LPAR_in-Modifiers-on-structure-constructor_RPAR_": {"display": "mk", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Structure Declarations", "Structure Constructors", "Modifiers on structure constructor"]}}, "address": "/The-Type-System/Inductive-Types/"}], "_private.Manual.Grind.ExtendedExamples.IndexMap.0.IndexMap.values": [{"id": "_private___Manual___Grind___ExtendedExamples___IndexMap___0___IndexMap___values", "data": {"/The--grind--tactic/Bigger-Examples/#_private___Manual___Grind___ExtendedExamples___IndexMap___0___IndexMap___values": {"display": "values", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}], "_private.Manual.Grind.ExtendedExamples.IndexMap.0.IndexMap.size_keys'": [{"id": "_private___Manual___Grind___ExtendedExamples___IndexMap___0___IndexMap___size_keys___", "data": {"/The--grind--tactic/Bigger-Examples/#_private___Manual___Grind___ExtendedExamples___IndexMap___0___IndexMap___size_keys___": {"display": "size_keys'", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}], "_private.Manual.Grind.ExtendedExamples.IndexMap.0.IndexMap.size_keys": [{"id": "_private___Manual___Grind___ExtendedExamples___IndexMap___0___IndexMap___size_keys", "data": {"/The--grind--tactic/Bigger-Examples/#_private___Manual___Grind___ExtendedExamples___IndexMap___0___IndexMap___size_keys": {"display": "size_keys", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}], "_private.Manual.Grind.ExtendedExamples.IndexMap.0.IndexMap.mem_indices_of_mem": [{"id": "_private___Manual___Grind___ExtendedExamples___IndexMap___0___IndexMap___mem_indices_of_mem", "data": {"/The--grind--tactic/Bigger-Examples/#_private___Manual___Grind___ExtendedExamples___IndexMap___0___IndexMap___mem_indices_of_mem": {"display": "mem_indices_of_mem", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}], "_private.Manual.Grind.ExtendedExamples.IndexMap.0.IndexMap.keys": [{"id": "_private___Manual___Grind___ExtendedExamples___IndexMap___0___IndexMap___keys", "data": {"/The--grind--tactic/Bigger-Examples/#_private___Manual___Grind___ExtendedExamples___IndexMap___0___IndexMap___keys": {"display": "keys", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}], "_private.Manual.Grind.ExtendedExamples.IndexMap.0.IndexMap.indices": [{"id": "_private___Manual___Grind___ExtendedExamples___IndexMap___0___IndexMap___indices", "data": {"/The--grind--tactic/Bigger-Examples/#_private___Manual___Grind___ExtendedExamples___IndexMap___0___IndexMap___indices": {"display": "indices", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}], "_private.Manual.Grind.ExtendedExamples.IndexMap.0.IndexMap.getElem_indices_lt": [{"id": "_private___Manual___Grind___ExtendedExamples___IndexMap___0___IndexMap___getElem_indices_lt", "data": {"/The--grind--tactic/Bigger-Examples/#_private___Manual___Grind___ExtendedExamples___IndexMap___0___IndexMap___getElem_indices_lt": {"display": "getElem_indices_lt", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}], "_private.Manual.Grind.ExtendedExamples.IndexMap.0.IndexMap.getElem_def": [{"id": "_private___Manual___Grind___ExtendedExamples___IndexMap___0___IndexMap___getElem_def", "data": {"/The--grind--tactic/Bigger-Examples/#_private___Manual___Grind___ExtendedExamples___IndexMap___0___IndexMap___getElem_def": {"display": "getElem_def", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}], "_private.Manual.Grind.ExtendedExamples.IndexMap.0.IndexMap.getElem?_def": [{"id": "_private___Manual___Grind___ExtendedExamples___IndexMap___0___IndexMap___getElem____def", "data": {"/The--grind--tactic/Bigger-Examples/#_private___Manual___Grind___ExtendedExamples___IndexMap___0___IndexMap___getElem____def": {"display": "getElem?_def", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}], "_private.Manual.Grind.ExtendedExamples.IndexMap.0.IndexMap.getElem!_def": [{"id": "_private___Manual___Grind___ExtendedExamples___IndexMap___0___IndexMap___getElem____def-next", "data": {"/The--grind--tactic/Bigger-Examples/#_private___Manual___Grind___ExtendedExamples___IndexMap___0___IndexMap___getElem____def-next": {"display": "getElem!_def", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}], "_private.Manual.Grind.ExtendedExamples.IndexMap.0.IndexMap.WF'": [{"id": "_private___Manual___Grind___ExtendedExamples___IndexMap___0___IndexMap___WF___", "data": {"/The--grind--tactic/Bigger-Examples/#_private___Manual___Grind___ExtendedExamples___IndexMap___0___IndexMap___WF___": {"display": "WF'", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}], "_private.Manual.Grind.ExtendedExamples.IndexMap.0.IndexMap.WF": [{"id": "_private___Manual___Grind___ExtendedExamples___IndexMap___0___IndexMap___WF", "data": {"/The--grind--tactic/Bigger-Examples/#_private___Manual___Grind___ExtendedExamples___IndexMap___0___IndexMap___WF": {"display": "WF", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}], "_private.0.xs (in Exporting Private Definitions)": [{"id": "_private___0___xs-_LPAR_in-Exporting-Private-Definitions_RPAR_", "data": {"/Source-Files-and-Modules/#_private___0___xs-_LPAR_in-Exporting-Private-Definitions_RPAR_": {"display": "xs", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Exporting Private Definitions"]}}, "address": "/Source-Files-and-Modules/"}], "_private.0.toPalindrome (in Cross-Phase Code Re-Use)": [{"id": "_private___0___toPalindrome-_LPAR_in-Cross-Phase-Code-Re-Use_RPAR_", "data": {"/Source-Files-and-Modules/#_private___0___toPalindrome-_LPAR_in-Cross-Phase-Code-Re-Use_RPAR_": {"display": "toPalindrome", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "The Meta Phase", "Cross-Phase Code Re-Use"]}}, "address": "/Source-Files-and-Modules/"}], "_private.0.secret (in Private Field Values)": [{"id": "_private___0___secret-_LPAR_in-Private-Field-Values_RPAR_", "data": {"/The-Type-System/Inductive-Types/#_private___0___secret-_LPAR_in-Private-Field-Values_RPAR_": {"display": "secret", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Structure Declarations", "Structure Constructors", "Private Field Values"]}}, "address": "/The-Type-System/Inductive-Types/"}], "_private.0.revArrays (in Meta Definitions)": [{"id": "_private___0___revArrays-_LPAR_in-Meta-Definitions_RPAR_", "data": {"/Source-Files-and-Modules/#_private___0___revArrays-_LPAR_in-Meta-Definitions_RPAR_-next": {"display": "revArrays", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "The Meta Phase", "Meta Definitions"]}, "/Source-Files-and-Modules/#_private___0___revArrays-_LPAR_in-Meta-Definitions_RPAR_": {"display": "revArrays", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "The Meta Phase", "Meta Definitions"]}}, "address": "/Source-Files-and-Modules/"}, {"id": "_private___0___revArrays-_LPAR_in-Meta-Definitions_RPAR_-next", "data": {"/Source-Files-and-Modules/#_private___0___revArrays-_LPAR_in-Meta-Definitions_RPAR_-next": {"display": "revArrays", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "The Meta Phase", "Meta Definitions"]}, "/Source-Files-and-Modules/#_private___0___revArrays-_LPAR_in-Meta-Definitions_RPAR_": {"display": "revArrays", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "The Meta Phase", "Meta Definitions"]}}, "address": "/Source-Files-and-Modules/"}], "_private.0.palArrays (in Cross-Phase Code Re-Use)": [{"id": "_private___0___palArrays-_LPAR_in-Cross-Phase-Code-Re-Use_RPAR_", "data": {"/Source-Files-and-Modules/#_private___0___palArrays-_LPAR_in-Cross-Phase-Code-Re-Use_RPAR_-next": {"display": "palArrays", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "The Meta Phase", "Cross-Phase Code Re-Use"]}, "/Source-Files-and-Modules/#_private___0___palArrays-_LPAR_in-Cross-Phase-Code-Re-Use_RPAR_": {"display": "palArrays", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "The Meta Phase", "Cross-Phase Code Re-Use"]}}, "address": "/Source-Files-and-Modules/"}, {"id": "_private___0___palArrays-_LPAR_in-Cross-Phase-Code-Re-Use_RPAR_-next", "data": {"/Source-Files-and-Modules/#_private___0___palArrays-_LPAR_in-Cross-Phase-Code-Re-Use_RPAR_-next": {"display": "palArrays", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "The Meta Phase", "Cross-Phase Code Re-Use"]}, "/Source-Files-and-Modules/#_private___0___palArrays-_LPAR_in-Cross-Phase-Code-Re-Use_RPAR_": {"display": "palArrays", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "The Meta Phase", "Cross-Phase Code Re-Use"]}}, "address": "/Source-Files-and-Modules/"}], "_private.0.greeting (in Private and Public Definitions)": [{"id": "_private___0___greeting-_LPAR_in-Private-and-Public-Definitions_RPAR_", "data": {"/Source-Files-and-Modules/#_private___0___greeting-_LPAR_in-Private-and-Public-Definitions_RPAR_": {"display": "greeting", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Private and Public Definitions"]}}, "address": "/Source-Files-and-Modules/"}], "_private.0.greetTwice_is_greet_twice (in Exposed and Unexposed Definitions)": [{"id": "_private___0___greetTwice_is_greet_twice-_LPAR_in-Exposed-and-Unexposed-Definitions_RPAR_-next", "data": {"/Source-Files-and-Modules/#_private___0___greetTwice_is_greet_twice-_LPAR_in-Exposed-and-Unexposed-Definitions_RPAR_-next": {"display": "greetTwice_is_greet_twice", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Exposed and Unexposed Definitions"]}, "/Source-Files-and-Modules/#_private___0___greetTwice_is_greet_twice-_LPAR_in-Exposed-and-Unexposed-Definitions_RPAR_": {"display": "greetTwice_is_greet_twice", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Exposed and Unexposed Definitions"]}}, "address": "/Source-Files-and-Modules/"}, {"id": "_private___0___greetTwice_is_greet_twice-_LPAR_in-Exposed-and-Unexposed-Definitions_RPAR_", "data": {"/Source-Files-and-Modules/#_private___0___greetTwice_is_greet_twice-_LPAR_in-Exposed-and-Unexposed-Definitions_RPAR_-next": {"display": "greetTwice_is_greet_twice", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Exposed and Unexposed Definitions"]}, "/Source-Files-and-Modules/#_private___0___greetTwice_is_greet_twice-_LPAR_in-Exposed-and-Unexposed-Definitions_RPAR_": {"display": "greetTwice_is_greet_twice", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Exposed and Unexposed Definitions"]}}, "address": "/Source-Files-and-Modules/"}], "_private.0.greetTwice (in Private and Public Definitions)": [{"id": "_private___0___greetTwice-_LPAR_in-Private-and-Public-Definitions_RPAR_", "data": {"/Source-Files-and-Modules/#_private___0___greetTwice-_LPAR_in-Private-and-Public-Definitions_RPAR_-next": {"display": "greetTwice", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Private and Public Definitions"]}, "/Source-Files-and-Modules/#_private___0___greetTwice-_LPAR_in-Private-and-Public-Definitions_RPAR_": {"display": "greetTwice", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Private and Public Definitions"]}}, "address": "/Source-Files-and-Modules/"}, {"id": "_private___0___greetTwice-_LPAR_in-Private-and-Public-Definitions_RPAR_-next", "data": {"/Source-Files-and-Modules/#_private___0___greetTwice-_LPAR_in-Private-and-Public-Definitions_RPAR_-next": {"display": "greetTwice", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Private and Public Definitions"]}, "/Source-Files-and-Modules/#_private___0___greetTwice-_LPAR_in-Private-and-Public-Definitions_RPAR_": {"display": "greetTwice", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Private and Public Definitions"]}}, "address": "/Source-Files-and-Modules/"}], "_private.0.greetTwice (in Exposed and Unexposed Definitions)": [{"id": "_private___0___greetTwice-_LPAR_in-Exposed-and-Unexposed-Definitions_RPAR_", "data": {"/Source-Files-and-Modules/#_private___0___greetTwice-_LPAR_in-Exposed-and-Unexposed-Definitions_RPAR_-next": {"display": "greetTwice", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Exposed and Unexposed Definitions"]}, "/Source-Files-and-Modules/#_private___0___greetTwice-_LPAR_in-Exposed-and-Unexposed-Definitions_RPAR_": {"display": "greetTwice", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Exposed and Unexposed Definitions"]}}, "address": "/Source-Files-and-Modules/"}, {"id": "_private___0___greetTwice-_LPAR_in-Exposed-and-Unexposed-Definitions_RPAR_-next", "data": {"/Source-Files-and-Modules/#_private___0___greetTwice-_LPAR_in-Exposed-and-Unexposed-Definitions_RPAR_-next": {"display": "greetTwice", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Exposed and Unexposed Definitions"]}, "/Source-Files-and-Modules/#_private___0___greetTwice-_LPAR_in-Exposed-and-Unexposed-Definitions_RPAR_": {"display": "greetTwice", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Exposed and Unexposed Definitions"]}}, "address": "/Source-Files-and-Modules/"}], "_private.0.drop2 (in Exporting Private Definitions)": [{"id": "_private___0___drop2-_LPAR_in-Exporting-Private-Definitions_RPAR_", "data": {"/Source-Files-and-Modules/#_private___0___drop2-_LPAR_in-Exporting-Private-Definitions_RPAR_": {"display": "drop2", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Exporting Private Definitions"]}}, "address": "/Source-Files-and-Modules/"}], "_private.0.Tree.count_leaf_eq_zero (in Importing Private Information)": [{"id": "_private___0___Tree___count_leaf_eq_zero-_LPAR_in-Importing-Private-Information_RPAR_-next", "data": {"/Source-Files-and-Modules/#_private___0___Tree___count_leaf_eq_zero-_LPAR_in-Importing-Private-Information_RPAR_-next": {"display": "Tree.count_leaf_eq_zero", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Importing Private Information"]}, "/Source-Files-and-Modules/#_private___0___Tree___count_leaf_eq_zero-_LPAR_in-Importing-Private-Information_RPAR_": {"display": "Tree.count_leaf_eq_zero", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Importing Private Information"]}}, "address": "/Source-Files-and-Modules/"}, {"id": "_private___0___Tree___count_leaf_eq_zero-_LPAR_in-Importing-Private-Information_RPAR_", "data": {"/Source-Files-and-Modules/#_private___0___Tree___count_leaf_eq_zero-_LPAR_in-Importing-Private-Information_RPAR_-next": {"display": "Tree.count_leaf_eq_zero", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Importing Private Information"]}, "/Source-Files-and-Modules/#_private___0___Tree___count_leaf_eq_zero-_LPAR_in-Importing-Private-Information_RPAR_": {"display": "Tree.count_leaf_eq_zero", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Importing Private Information"]}}, "address": "/Source-Files-and-Modules/"}], "_private.0.State.toString (in Private Methods)": [{"id": "_private___0___State___toString-_LPAR_in-Private-Methods_RPAR_-next", "data": {"/The-Type-System/Inductive-Types/#_private___0___State___toString-_LPAR_in-Private-Methods_RPAR_-next": {"display": "State.toString", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Structure Declarations", "Structure Constructors", "Private Methods"]}, "/The-Type-System/Inductive-Types/#_private___0___State___toString-_LPAR_in-Private-Methods_RPAR_": {"display": "State.toString", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Structure Declarations", "Structure Constructors", "Private Methods"]}}, "address": "/The-Type-System/Inductive-Types/"}, {"id": "_private___0___State___toString-_LPAR_in-Private-Methods_RPAR_", "data": {"/The-Type-System/Inductive-Types/#_private___0___State___toString-_LPAR_in-Private-Methods_RPAR_-next": {"display": "State.toString", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Structure Declarations", "Structure Constructors", "Private Methods"]}, "/The-Type-System/Inductive-Types/#_private___0___State___toString-_LPAR_in-Private-Methods_RPAR_": {"display": "State.toString", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Structure Declarations", "Structure Constructors", "Private Methods"]}}, "address": "/The-Type-System/Inductive-Types/"}], "_private.0.State.mk (in Private Methods)": [{"id": "_private___0___State___mk-_LPAR_in-Private-Methods_RPAR_", "data": {"/The-Type-System/Inductive-Types/#_private___0___State___mk-_LPAR_in-Private-Methods_RPAR_-next": {"display": "mk", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Structure Declarations", "Structure Constructors", "Private Methods"]}, "/The-Type-System/Inductive-Types/#_private___0___State___mk-_LPAR_in-Private-Methods_RPAR_": {"display": "mk", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Structure Declarations", "Structure Constructors", "Private Methods"]}}, "address": "/The-Type-System/Inductive-Types/"}, {"id": "_private___0___State___mk-_LPAR_in-Private-Methods_RPAR_-next", "data": {"/The-Type-System/Inductive-Types/#_private___0___State___mk-_LPAR_in-Private-Methods_RPAR_-next": {"display": "mk", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Structure Declarations", "Structure Constructors", "Private Methods"]}, "/The-Type-System/Inductive-Types/#_private___0___State___mk-_LPAR_in-Private-Methods_RPAR_": {"display": "mk", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Structure Declarations", "Structure Constructors", "Private Methods"]}}, "address": "/The-Type-System/Inductive-Types/"}], "_private.0.IndexMap.values": [{"id": "_private___0___IndexMap___values", "data": {"/The--grind--tactic/Bigger-Examples/#_private___0___IndexMap___values": {"display": "values", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}], "_private.0.IndexMap.size_keys'": [{"id": "_private___0___IndexMap___size_keys___", "data": {"/The--grind--tactic/Bigger-Examples/#_private___0___IndexMap___size_keys___-next": {"display": "size_keys'", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#_private___0___IndexMap___size_keys___": {"display": "size_keys'", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}, {"id": "_private___0___IndexMap___size_keys___-next", "data": {"/The--grind--tactic/Bigger-Examples/#_private___0___IndexMap___size_keys___-next": {"display": "size_keys'", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#_private___0___IndexMap___size_keys___": {"display": "size_keys'", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}], "_private.0.IndexMap.size_keys": [{"id": "_private___0___IndexMap___size_keys-next-next", "data": {"/The--grind--tactic/Bigger-Examples/#_private___0___IndexMap___size_keys-next-next": {"display": "size_keys", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#_private___0___IndexMap___size_keys-next": {"display": "size_keys", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#_private___0___IndexMap___size_keys": {"display": "size_keys", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}, {"id": "_private___0___IndexMap___size_keys-next", "data": {"/The--grind--tactic/Bigger-Examples/#_private___0___IndexMap___size_keys-next-next": {"display": "size_keys", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#_private___0___IndexMap___size_keys-next": {"display": "size_keys", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#_private___0___IndexMap___size_keys": {"display": "size_keys", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}, {"id": "_private___0___IndexMap___size_keys", "data": {"/The--grind--tactic/Bigger-Examples/#_private___0___IndexMap___size_keys-next-next": {"display": "size_keys", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#_private___0___IndexMap___size_keys-next": {"display": "size_keys", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#_private___0___IndexMap___size_keys": {"display": "size_keys", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}], "_private.0.IndexMap.mem_indices_of_mem": [{"id": "_private___0___IndexMap___mem_indices_of_mem", "data": {"/The--grind--tactic/Bigger-Examples/#_private___0___IndexMap___mem_indices_of_mem": {"display": "mem_indices_of_mem", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}], "_private.0.IndexMap.keys": [{"id": "_private___0___IndexMap___keys-next", "data": {"/The--grind--tactic/Bigger-Examples/#_private___0___IndexMap___keys-next-next": {"display": "keys", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#_private___0___IndexMap___keys-next": {"display": "keys", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#_private___0___IndexMap___keys": {"display": "keys", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}, {"id": "_private___0___IndexMap___keys", "data": {"/The--grind--tactic/Bigger-Examples/#_private___0___IndexMap___keys-next-next": {"display": "keys", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#_private___0___IndexMap___keys-next": {"display": "keys", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#_private___0___IndexMap___keys": {"display": "keys", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}, {"id": "_private___0___IndexMap___keys-next-next", "data": {"/The--grind--tactic/Bigger-Examples/#_private___0___IndexMap___keys-next-next": {"display": "keys", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#_private___0___IndexMap___keys-next": {"display": "keys", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#_private___0___IndexMap___keys": {"display": "keys", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}], "_private.0.IndexMap.indices": [{"id": "_private___0___IndexMap___indices", "data": {"/The--grind--tactic/Bigger-Examples/#_private___0___IndexMap___indices": {"display": "indices", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}], "_private.0.IndexMap.getElem_indices_lt": [{"id": "_private___0___IndexMap___getElem_indices_lt", "data": {"/The--grind--tactic/Bigger-Examples/#_private___0___IndexMap___getElem_indices_lt": {"display": "getElem_indices_lt", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}], "_private.0.IndexMap.getElem_def": [{"id": "_private___0___IndexMap___getElem_def", "data": {"/The--grind--tactic/Bigger-Examples/#_private___0___IndexMap___getElem_def": {"display": "getElem_def", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}], "_private.0.IndexMap.getElem?_def": [{"id": "_private___0___IndexMap___getElem____def", "data": {"/The--grind--tactic/Bigger-Examples/#_private___0___IndexMap___getElem____def": {"display": "getElem?_def", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}], "_private.0.IndexMap.getElem!_def": [{"id": "_private___0___IndexMap___getElem____def-next", "data": {"/The--grind--tactic/Bigger-Examples/#_private___0___IndexMap___getElem____def-next": {"display": "getElem!_def", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}], "_private.0.IndexMap.WF'": [{"id": "_private___0___IndexMap___WF___", "data": {"/The--grind--tactic/Bigger-Examples/#_private___0___IndexMap___WF___": {"display": "WF'", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}], "_private.0.IndexMap.WF": [{"id": "_private___0___IndexMap___WF", "data": {"/The--grind--tactic/Bigger-Examples/#_private___0___IndexMap___WF-next-next-next": {"display": "WF", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#_private___0___IndexMap___WF-next-next": {"display": "WF", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#_private___0___IndexMap___WF-next": {"display": "WF", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#_private___0___IndexMap___WF": {"display": "WF", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}, {"id": "_private___0___IndexMap___WF-next", "data": {"/The--grind--tactic/Bigger-Examples/#_private___0___IndexMap___WF-next-next-next": {"display": "WF", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#_private___0___IndexMap___WF-next-next": {"display": "WF", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#_private___0___IndexMap___WF-next": {"display": "WF", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#_private___0___IndexMap___WF": {"display": "WF", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}, {"id": "_private___0___IndexMap___WF-next-next-next", "data": {"/The--grind--tactic/Bigger-Examples/#_private___0___IndexMap___WF-next-next-next": {"display": "WF", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#_private___0___IndexMap___WF-next-next": {"display": "WF", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#_private___0___IndexMap___WF-next": {"display": "WF", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#_private___0___IndexMap___WF": {"display": "WF", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}, {"id": "_private___0___IndexMap___WF-next-next", "data": {"/The--grind--tactic/Bigger-Examples/#_private___0___IndexMap___WF-next-next-next": {"display": "WF", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#_private___0___IndexMap___WF-next-next": {"display": "WF", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#_private___0___IndexMap___WF-next": {"display": "WF", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#_private___0___IndexMap___WF": {"display": "WF", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}], "Z_mk'_respects_eq (in Manually Quotiented Integers)": [{"id": "Z_mk____respects_eq-_LPAR_in-Manually-Quotiented-Integers_RPAR_", "data": {"/The-Type-System/Quotients/#Z_mk____respects_eq-_LPAR_in-Manually-Quotiented-Integers_RPAR_": {"display": "Z_mk'_respects_eq", "context": ["The Lean Language Reference", "The Type System", "Quotients", "Alternatives to Quotient Types", "Manually Quotiented Integers"]}}, "address": "/The-Type-System/Quotients/"}], "Z.mk' (in Manually Quotiented Integers)": [{"id": "Z___mk___-_LPAR_in-Manually-Quotiented-Integers_RPAR_", "data": {"/The-Type-System/Quotients/#Z___mk___-_LPAR_in-Manually-Quotiented-Integers_RPAR_": {"display": "Z.mk'", "context": ["The Lean Language Reference", "The Type System", "Quotients", "Alternatives to Quotient Types", "Manually Quotiented Integers"]}}, "address": "/The-Type-System/Quotients/"}], "Z.mk (in The Integers as a Quotient Type)": [{"id": "Z___mk-_LPAR_in-The-Integers-as-a-Quotient-Type_RPAR_", "data": {"/The-Type-System/Quotients/#Z___mk-_LPAR_in-The-Integers-as-a-Quotient-Type_RPAR_": {"display": "Z.mk", "context": ["The Lean Language Reference", "The Type System", "Quotients", "Quotient API", "Introducing Quotients", "The Integers as a Quotient Type"]}}, "address": "/The-Type-System/Quotients/"}], "Z.instSetoid (in The Integers as a Quotient Type)": [{"id": "Z___instSetoid-_LPAR_in-The-Integers-as-a-Quotient-Type_RPAR_", "data": {"/The-Type-System/Quotients/#Z___instSetoid-_LPAR_in-The-Integers-as-a-Quotient-Type_RPAR_": {"display": "Z.instSetoid", "context": ["The Lean Language Reference", "The Type System", "Quotients", "Quotient API", "Introducing Quotients", "The Integers as a Quotient Type"]}}, "address": "/The-Type-System/Quotients/"}], "Z.eq.eqv (in The Integers as a Quotient Type)": [{"id": "Z___eq___eqv-_LPAR_in-The-Integers-as-a-Quotient-Type_RPAR_", "data": {"/The-Type-System/Quotients/#Z___eq___eqv-_LPAR_in-The-Integers-as-a-Quotient-Type_RPAR_": {"display": "Z.eq.eqv", "context": ["The Lean Language Reference", "The Type System", "Quotients", "Quotient API", "Introducing Quotients", "The Integers as a Quotient Type"]}}, "address": "/The-Type-System/Quotients/"}], "Z.eq (in The Integers as a Quotient Type)": [{"id": "Z___eq-_LPAR_in-The-Integers-as-a-Quotient-Type_RPAR_", "data": {"/The-Type-System/Quotients/#Z___eq-_LPAR_in-The-Integers-as-a-Quotient-Type_RPAR_": {"display": "Z.eq", "context": ["The Lean Language Reference", "The Type System", "Quotients", "Quotient API", "Introducing Quotients", "The Integers as a Quotient Type"]}}, "address": "/The-Type-System/Quotients/"}], "Z.canonical (in Manually Quotiented Integers)": [{"id": "Z___canonical-_LPAR_in-Manually-Quotiented-Integers_RPAR_", "data": {"/The-Type-System/Quotients/#Z___canonical-_LPAR_in-Manually-Quotiented-Integers_RPAR_": {"display": "canonical", "context": ["The Lean Language Reference", "The Type System", "Quotients", "Alternatives to Quotient Types", "Manually Quotiented Integers"]}}, "address": "/The-Type-System/Quotients/"}], "Z.b (in Manually Quotiented Integers)": [{"id": "Z___b-_LPAR_in-Manually-Quotiented-Integers_RPAR_", "data": {"/The-Type-System/Quotients/#Z___b-_LPAR_in-Manually-Quotiented-Integers_RPAR_": {"display": "b", "context": ["The Lean Language Reference", "The Type System", "Quotients", "Alternatives to Quotient Types", "Manually Quotiented Integers"]}}, "address": "/The-Type-System/Quotients/"}], "Z.add_neg_inverse (in Proofs About Quotients)": [{"id": "Z___add_neg_inverse-_LPAR_in-Proofs-About-Quotients_RPAR_", "data": {"/The-Type-System/Quotients/#Z___add_neg_inverse-_LPAR_in-Proofs-About-Quotients_RPAR_": {"display": "Z.add_neg_inverse", "context": ["The Lean Language Reference", "The Type System", "Quotients", "Quotient API", "Proofs About Quotients", "Proofs About Quotients"]}}, "address": "/The-Type-System/Quotients/"}], "Z.a (in Manually Quotiented Integers)": [{"id": "Z___a-_LPAR_in-Manually-Quotiented-Integers_RPAR_", "data": {"/The-Type-System/Quotients/#Z___a-_LPAR_in-Manually-Quotiented-Integers_RPAR_": {"display": "a", "context": ["The Lean Language Reference", "The Type System", "Quotients", "Alternatives to Quotient Types", "Manually Quotiented Integers"]}}, "address": "/The-Type-System/Quotients/"}], "Z' (in The Integers as a Quotient Type)": [{"id": "Z___-_LPAR_in-The-Integers-as-a-Quotient-Type_RPAR_", "data": {"/The-Type-System/Quotients/#Z___-_LPAR_in-The-Integers-as-a-Quotient-Type_RPAR_": {"display": "Z'", "context": ["The Lean Language Reference", "The Type System", "Quotients", "Quotient API", "Introducing Quotients", "The Integers as a Quotient Type"]}}, "address": "/The-Type-System/Quotients/"}], "Z (in The Integers as a Quotient Type)": [{"id": "Z-_LPAR_in-The-Integers-as-a-Quotient-Type_RPAR_", "data": {"/The-Type-System/Quotients/#Z-_LPAR_in-The-Integers-as-a-Quotient-Type_RPAR_": {"display": "Z", "context": ["The Lean Language Reference", "The Type System", "Quotients", "Quotient API", "Introducing Quotients", "The Integers as a Quotient Type"]}}, "address": "/The-Type-System/Quotients/"}], "Z (in Manually Quotiented Integers)": [{"id": "Z-_LPAR_in-Manually-Quotiented-Integers_RPAR_", "data": {"/The-Type-System/Quotients/#Z-_LPAR_in-Manually-Quotiented-Integers_RPAR_": {"display": "Z", "context": ["The Lean Language Reference", "The Type System", "Quotients", "Alternatives to Quotient Types", "Manually Quotiented Integers"]}}, "address": "/The-Type-System/Quotients/"}], "Yes.intro (in A true proposition)": [{"id": "Yes___intro-_LPAR_in-A-true-proposition_RPAR_", "data": {"/The-Type-System/Inductive-Types/#Yes___intro-_LPAR_in-A-true-proposition_RPAR_": {"display": "intro", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Inductive Type Declarations", "Example Inductive Types", "A true proposition"]}}, "address": "/The-Type-System/Inductive-Types/"}], "Yes (in A true proposition)": [{"id": "Yes-_LPAR_in-A-true-proposition_RPAR_", "data": {"/The-Type-System/Inductive-Types/#Yes-_LPAR_in-A-true-proposition_RPAR_": {"display": "Yes", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Inductive Type Declarations", "Example Inductive Types", "A true proposition"]}}, "address": "/The-Type-System/Inductive-Types/"}], "Writer.write (in Dependent Coercion to Functions)": [{"id": "Writer___write-_LPAR_in-Dependent-Coercion-to-Functions_RPAR_", "data": {"/Coercions/Coercing-to-Function-Types/#Writer___write-_LPAR_in-Dependent-Coercion-to-Functions_RPAR_": {"display": "write", "context": ["The Lean Language Reference", "Coercions", "Coercing to Function Types", "Dependent Coercion to Functions"]}}, "address": "/Coercions/Coercing-to-Function-Types/"}], "Writer.Writes (in Dependent Coercion to Functions)": [{"id": "Writer___Writes-_LPAR_in-Dependent-Coercion-to-Functions_RPAR_", "data": {"/Coercions/Coercing-to-Function-Types/#Writer___Writes-_LPAR_in-Dependent-Coercion-to-Functions_RPAR_": {"display": "Writes", "context": ["The Lean Language Reference", "Coercions", "Coercing to Function Types", "Dependent Coercion to Functions"]}}, "address": "/Coercions/Coercing-to-Function-Types/"}], "Writer (in Dependent Coercion to Functions)": [{"id": "Writer-_LPAR_in-Dependent-Coercion-to-Functions_RPAR_", "data": {"/Coercions/Coercing-to-Function-Types/#Writer-_LPAR_in-Dependent-Coercion-to-Functions_RPAR_": {"display": "Writer", "context": ["The Lean Language Reference", "Coercions", "Coercing to Function Types", "Dependent Coercion to Functions"]}}, "address": "/Coercions/Coercing-to-Function-Types/"}], "WithParam.mk (in Definitional Equality of Unit-Like Types)": [{"id": "WithParam___mk-_LPAR_in-Definitional-Equality-of-Unit-Like-Types_RPAR_", "data": {"/Basic-Types/The-Unit-Type/#WithParam___mk-_LPAR_in-Definitional-Equality-of-Unit-Like-Types_RPAR_": {"display": "mk", "context": ["The Lean Language Reference", "Basic Types", "The Unit Type", "Definitional Equality", "Definitional Equality of Unit-Like Types"]}}, "address": "/Basic-Types/The-Unit-Type/"}], "WithParam'.zero (in Ineligible decreasing parameters)": [{"id": "WithParam______zero-_LPAR_in-Ineligible-decreasing-parameters_RPAR_", "data": {"/Definitions/Recursive-Definitions/#WithParam______zero-_LPAR_in-Ineligible-decreasing-parameters_RPAR_": {"display": "zero", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Structural Recursion", "Explicit Structural Recursion", "Ineligible decreasing parameters"]}}, "address": "/Definitions/Recursive-Definitions/"}], "WithParam'.succ (in Ineligible decreasing parameters)": [{"id": "WithParam______succ-_LPAR_in-Ineligible-decreasing-parameters_RPAR_", "data": {"/Definitions/Recursive-Definitions/#WithParam______succ-_LPAR_in-Ineligible-decreasing-parameters_RPAR_": {"display": "succ", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Structural Recursion", "Explicit Structural Recursion", "Ineligible decreasing parameters"]}}, "address": "/Definitions/Recursive-Definitions/"}], "WithParam' (in Ineligible decreasing parameters)": [{"id": "WithParam___-_LPAR_in-Ineligible-decreasing-parameters_RPAR_", "data": {"/Definitions/Recursive-Definitions/#WithParam___-_LPAR_in-Ineligible-decreasing-parameters_RPAR_": {"display": "WithParam'", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Structural Recursion", "Explicit Structural Recursion", "Ineligible decreasing parameters"]}}, "address": "/Definitions/Recursive-Definitions/"}], "WithParam (in Definitional Equality of Unit-Like Types)": [{"id": "WithParam-_LPAR_in-Definitional-Equality-of-Unit-Like-Types_RPAR_", "data": {"/Basic-Types/The-Unit-Type/#WithParam-_LPAR_in-Definitional-Equality-of-Unit-Like-Types_RPAR_": {"display": "WithParam", "context": ["The Lean Language Reference", "Basic Types", "The Unit Type", "Definitional Equality", "Definitional Equality of Unit-Like Types"]}}, "address": "/Basic-Types/The-Unit-Type/"}], "WithCheck (in Invalid Nested Inductive Types)": [{"id": "WithCheck-_LPAR_in-Invalid-Nested-Inductive-Types_RPAR_", "data": {"/The-Type-System/Inductive-Types/#WithCheck-_LPAR_in-Invalid-Nested-Inductive-Types_RPAR_": {"display": "WithCheck", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Mutual Inductive Types", "Nested Inductive Types", "Invalid Nested Inductive Types"]}}, "address": "/The-Type-System/Inductive-Types/"}], "Weekday.we (in Implementing Coercions)": [{"id": "Weekday___we-_LPAR_in-Implementing-Coercions_RPAR_", "data": {"/Coercions/Coercing-Between-Types/#Weekday___we-_LPAR_in-Implementing-Coercions_RPAR_": {"display": "we", "context": ["The Lean Language Reference", "Coercions", "Coercing Between Types", "Implementing Coercions", "Implementing Coercions"]}}, "address": "/Coercions/Coercing-Between-Types/"}], "Weekday.tu (in Implementing Coercions)": [{"id": "Weekday___tu-_LPAR_in-Implementing-Coercions_RPAR_", "data": {"/Coercions/Coercing-Between-Types/#Weekday___tu-_LPAR_in-Implementing-Coercions_RPAR_": {"display": "tu", "context": ["The Lean Language Reference", "Coercions", "Coercing Between Types", "Implementing Coercions", "Implementing Coercions"]}}, "address": "/Coercions/Coercing-Between-Types/"}], "Weekday.toFin (in Implementing Coercions)": [{"id": "Weekday___toFin-_LPAR_in-Implementing-Coercions_RPAR_", "data": {"/Coercions/Coercing-Between-Types/#Weekday___toFin-_LPAR_in-Implementing-Coercions_RPAR_": {"display": "Weekday.toFin", "context": ["The Lean Language Reference", "Coercions", "Coercing Between Types", "Implementing Coercions", "Implementing Coercions"]}}, "address": "/Coercions/Coercing-Between-Types/"}], "Weekday.th (in Implementing Coercions)": [{"id": "Weekday___th-_LPAR_in-Implementing-Coercions_RPAR_", "data": {"/Coercions/Coercing-Between-Types/#Weekday___th-_LPAR_in-Implementing-Coercions_RPAR_": {"display": "th", "context": ["The Lean Language Reference", "Coercions", "Coercing Between Types", "Implementing Coercions", "Implementing Coercions"]}}, "address": "/Coercions/Coercing-Between-Types/"}], "Weekday.su (in Implementing Coercions)": [{"id": "Weekday___su-_LPAR_in-Implementing-Coercions_RPAR_", "data": {"/Coercions/Coercing-Between-Types/#Weekday___su-_LPAR_in-Implementing-Coercions_RPAR_": {"display": "su", "context": ["The Lean Language Reference", "Coercions", "Coercing Between Types", "Implementing Coercions", "Implementing Coercions"]}}, "address": "/Coercions/Coercing-Between-Types/"}], "Weekday.sa (in Implementing Coercions)": [{"id": "Weekday___sa-_LPAR_in-Implementing-Coercions_RPAR_", "data": {"/Coercions/Coercing-Between-Types/#Weekday___sa-_LPAR_in-Implementing-Coercions_RPAR_": {"display": "sa", "context": ["The Lean Language Reference", "Coercions", "Coercing Between Types", "Implementing Coercions", "Implementing Coercions"]}}, "address": "/Coercions/Coercing-Between-Types/"}], "Weekday.mo (in Implementing Coercions)": [{"id": "Weekday___mo-_LPAR_in-Implementing-Coercions_RPAR_", "data": {"/Coercions/Coercing-Between-Types/#Weekday___mo-_LPAR_in-Implementing-Coercions_RPAR_": {"display": "mo", "context": ["The Lean Language Reference", "Coercions", "Coercing Between Types", "Implementing Coercions", "Implementing Coercions"]}}, "address": "/Coercions/Coercing-Between-Types/"}], "Weekday.fromFin (in Implementing Coercions)": [{"id": "Weekday___fromFin-_LPAR_in-Implementing-Coercions_RPAR_", "data": {"/Coercions/Coercing-Between-Types/#Weekday___fromFin-_LPAR_in-Implementing-Coercions_RPAR_": {"display": "Weekday.fromFin", "context": ["The Lean Language Reference", "Coercions", "Coercing Between Types", "Implementing Coercions", "Implementing Coercions"]}}, "address": "/Coercions/Coercing-Between-Types/"}], "Weekday.fr (in Implementing Coercions)": [{"id": "Weekday___fr-_LPAR_in-Implementing-Coercions_RPAR_", "data": {"/Coercions/Coercing-Between-Types/#Weekday___fr-_LPAR_in-Implementing-Coercions_RPAR_": {"display": "fr", "context": ["The Lean Language Reference", "Coercions", "Coercing Between Types", "Implementing Coercions", "Implementing Coercions"]}}, "address": "/Coercions/Coercing-Between-Types/"}], "Weekday (in Implementing Coercions)": [{"id": "Weekday-_LPAR_in-Implementing-Coercions_RPAR_", "data": {"/Coercions/Coercing-Between-Types/#Weekday-_LPAR_in-Implementing-Coercions_RPAR_": {"display": "Weekday", "context": ["The Lean Language Reference", "Coercions", "Coercing Between Types", "Implementing Coercions", "Implementing Coercions"]}}, "address": "/Coercions/Coercing-Between-Types/"}], "Vehicle.wheels (in #print and Structure Types)": [{"id": "Vehicle___wheels-_LPAR_in-___print--and-Structure-Types_RPAR_", "data": {"/The-Type-System/Inductive-Types/#Vehicle___wheels-_LPAR_in-___print--and-Structure-Types_RPAR_": {"display": "wheels", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Structure Declarations", "Structure Inheritance", "#print and Structure Types"]}}, "address": "/The-Type-System/Inductive-Types/"}], "Vehicle (in #print and Structure Types)": [{"id": "Vehicle-_LPAR_in-___print--and-Structure-Types_RPAR_", "data": {"/The-Type-System/Inductive-Types/#Vehicle-_LPAR_in-___print--and-Structure-Types_RPAR_": {"display": "Vehicle", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Structure Declarations", "Structure Inheritance", "#print and Structure Types"]}}, "address": "/The-Type-System/Inductive-Types/"}], "Vegetable.size (in Using Ord Instances for LT and LE Instances)": [{"id": "Vegetable___size-_LPAR_in-Using--Ord--Instances-for--LT--and--LE--Instances_RPAR_", "data": {"/Type-Classes/Basic-Classes/#Vegetable___size-_LPAR_in-Using--Ord--Instances-for--LT--and--LE--Instances_RPAR_": {"display": "size", "context": ["The Lean Language Reference", "Type Classes", "Basic Classes", "Ordering", "Using Ord Instances for LT and LE Instances"]}}, "address": "/Type-Classes/Basic-Classes/"}], "Vegetable.color (in Using Ord Instances for LT and LE Instances)": [{"id": "Vegetable___color-_LPAR_in-Using--Ord--Instances-for--LT--and--LE--Instances_RPAR_", "data": {"/Type-Classes/Basic-Classes/#Vegetable___color-_LPAR_in-Using--Ord--Instances-for--LT--and--LE--Instances_RPAR_": {"display": "color", "context": ["The Lean Language Reference", "Type Classes", "Basic Classes", "Ordering", "Using Ord Instances for LT and LE Instances"]}}, "address": "/Type-Classes/Basic-Classes/"}], "Vegetable (in Using Ord Instances for LT and LE Instances)": [{"id": "Vegetable-_LPAR_in-Using--Ord--Instances-for--LT--and--LE--Instances_RPAR_", "data": {"/Type-Classes/Basic-Classes/#Vegetable-_LPAR_in-Using--Ord--Instances-for--LT--and--LE--Instances_RPAR_": {"display": "Vegetable", "context": ["The Lean Language Reference", "Type Classes", "Basic Classes", "Ordering", "Using Ord Instances for LT and LE Instances"]}}, "address": "/Type-Classes/Basic-Classes/"}], "Veg.Leafy.spinach (in Exported Names)": [{"id": "Veg___Leafy___spinach-_LPAR_in-Exported-Names_RPAR_", "data": {"/Namespaces-and-Sections/#Veg___Leafy___spinach-_LPAR_in-Exported-Names_RPAR_": {"display": "spinach", "context": ["The Lean Language Reference", "Namespaces and Sections", "Namespaces", "Exporting Names", "Exported Names"]}}, "address": "/Namespaces-and-Sections/"}], "Veg.Leafy.cabbage (in Exported Names)": [{"id": "Veg___Leafy___cabbage-_LPAR_in-Exported-Names_RPAR_", "data": {"/Namespaces-and-Sections/#Veg___Leafy___cabbage-_LPAR_in-Exported-Names_RPAR_": {"display": "cabbage", "context": ["The Lean Language Reference", "Namespaces and Sections", "Namespaces", "Exporting Names", "Exported Names"]}}, "address": "/Namespaces-and-Sections/"}], "Veg.Leafy (in Exported Names)": [{"id": "Veg___Leafy-_LPAR_in-Exported-Names_RPAR_", "data": {"/Namespaces-and-Sections/#Veg___Leafy-_LPAR_in-Exported-Names_RPAR_": {"display": "Leafy", "context": ["The Lean Language Reference", "Namespaces and Sections", "Namespaces", "Exporting Names", "Exported Names"]}}, "address": "/Namespaces-and-Sections/"}], "Vector.append_associative' (in Heterogeneous Equality)": [{"id": "Vector___append_associative___-_LPAR_in-Heterogeneous-Equality_RPAR_", "data": {"/Basic-Propositions/Propositional-Equality/#Vector___append_associative___-_LPAR_in-Heterogeneous-Equality_RPAR_": {"display": "Vector.append_associative'", "context": ["The Lean Language Reference", "Basic Propositions", "Propositional Equality", "Heterogeneous Equality", "Heterogeneous Equality"]}}, "address": "/Basic-Propositions/Propositional-Equality/"}], "Vector.append_associative (in Heterogeneous Equality)": [{"id": "Vector___append_associative-_LPAR_in-Heterogeneous-Equality_RPAR_-next", "data": {"/Basic-Propositions/Propositional-Equality/#Vector___append_associative-_LPAR_in-Heterogeneous-Equality_RPAR_-next": {"display": "Vector.append_associative", "context": ["The Lean Language Reference", "Basic Propositions", "Propositional Equality", "Heterogeneous Equality", "Heterogeneous Equality"]}, "/Basic-Propositions/Propositional-Equality/#Vector___append_associative-_LPAR_in-Heterogeneous-Equality_RPAR_": {"display": "Vector.append_associative", "context": ["The Lean Language Reference", "Basic Propositions", "Propositional Equality", "Heterogeneous Equality", "Heterogeneous Equality"]}}, "address": "/Basic-Propositions/Propositional-Equality/"}, {"id": "Vector___append_associative-_LPAR_in-Heterogeneous-Equality_RPAR_", "data": {"/Basic-Propositions/Propositional-Equality/#Vector___append_associative-_LPAR_in-Heterogeneous-Equality_RPAR_-next": {"display": "Vector.append_associative", "context": ["The Lean Language Reference", "Basic Propositions", "Propositional Equality", "Heterogeneous Equality", "Heterogeneous Equality"]}, "/Basic-Propositions/Propositional-Equality/#Vector___append_associative-_LPAR_in-Heterogeneous-Equality_RPAR_": {"display": "Vector.append_associative", "context": ["The Lean Language Reference", "Basic Propositions", "Propositional Equality", "Heterogeneous Equality", "Heterogeneous Equality"]}}, "address": "/Basic-Propositions/Propositional-Equality/"}], "Vacant (in A constructorless type)": [{"id": "Vacant-_LPAR_in-A-constructorless-type_RPAR_", "data": {"/The-Type-System/Inductive-Types/#Vacant-_LPAR_in-A-constructorless-type_RPAR_": {"display": "Vacant", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Inductive Type Declarations", "Example Inductive Types", "A constructorless type"]}}, "address": "/The-Type-System/Inductive-Types/"}], "Utterance (in Reducibility and Instance Synthesis)": [{"id": "Utterance-_LPAR_in-Reducibility-and-Instance-Synthesis_RPAR_", "data": {"/Definitions/Recursive-Definitions/#Utterance-_LPAR_in-Reducibility-and-Instance-Synthesis_RPAR_": {"display": "Utterance", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Controlling Reduction", "Reducibility and Instance Synthesis"]}}, "address": "/Definitions/Recursive-Definitions/"}], "Username.validate.notOk (in Generalized Field Notation)": [{"id": "Username___validate___notOk-_LPAR_in-Generalized-Field-Notation_RPAR_", "data": {"/Terms/Function-Application/#Username___validate___notOk-_LPAR_in-Generalized-Field-Notation_RPAR_": {"display": "notOk", "context": ["The Lean Language Reference", "Terms", "Function Application", "Generalized Field Notation", "Generalized Field Notation"]}}, "address": "/Terms/Function-Application/"}], "Username.validate (in Generalized Field Notation)": [{"id": "Username___validate-_LPAR_in-Generalized-Field-Notation_RPAR_", "data": {"/Terms/Function-Application/#Username___validate-_LPAR_in-Generalized-Field-Notation_RPAR_": {"display": "Username.validate", "context": ["The Lean Language Reference", "Terms", "Function Application", "Generalized Field Notation", "Generalized Field Notation"]}}, "address": "/Terms/Function-Application/"}], "Username (in Generalized Field Notation)": [{"id": "Username-_LPAR_in-Generalized-Field-Notation_RPAR_", "data": {"/Terms/Function-Application/#Username-_LPAR_in-Generalized-Field-Notation_RPAR_": {"display": "Username", "context": ["The Lean Language Reference", "Terms", "Function Application", "Generalized Field Notation", "Generalized Field Notation"]}}, "address": "/Terms/Function-Application/"}], "User.name (in Infix Functor and Applicative Operators)": [{"id": "User___name-_LPAR_in-Infix--Functor--and--Applicative--Operators_RPAR_", "data": {"/Functors___-Monads-and--do--Notation/Syntax/#User___name-_LPAR_in-Infix--Functor--and--Applicative--Operators_RPAR_": {"display": "name", "context": ["The Lean Language Reference", "Functors, Monads and do -Notation", "Syntax", "Infix Operators", "Applicative Functors", "Infix Functor and Applicative Operators"]}}, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}], "User.name": [{"id": "User___name", "data": {"/Functors___-Monads-and--do--Notation/Syntax/#User___name": {"display": "name", "context": ["The Lean Language Reference", "Functors, Monads and do -Notation", "Syntax", "Infix Operators", "Applicative Functors"]}}, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}], "User.favoriteNat (in Infix Functor and Applicative Operators)": [{"id": "User___favoriteNat-_LPAR_in-Infix--Functor--and--Applicative--Operators_RPAR_", "data": {"/Functors___-Monads-and--do--Notation/Syntax/#User___favoriteNat-_LPAR_in-Infix--Functor--and--Applicative--Operators_RPAR_": {"display": "favoriteNat", "context": ["The Lean Language Reference", "Functors, Monads and do -Notation", "Syntax", "Infix Operators", "Applicative Functors", "Infix Functor and Applicative Operators"]}}, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}], "User.favoriteNat": [{"id": "User___favoriteNat", "data": {"/Functors___-Monads-and--do--Notation/Syntax/#User___favoriteNat": {"display": "favoriteNat", "context": ["The Lean Language Reference", "Functors, Monads and do -Notation", "Syntax", "Infix Operators", "Applicative Functors"]}}, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}], "User (in Infix Functor and Applicative Operators)": [{"id": "User-_LPAR_in-Infix--Functor--and--Applicative--Operators_RPAR_", "data": {"/Functors___-Monads-and--do--Notation/Syntax/#User-_LPAR_in-Infix--Functor--and--Applicative--Operators_RPAR_": {"display": "User", "context": ["The Lean Language Reference", "Functors, Monads and do -Notation", "Syntax", "Infix Operators", "Applicative Functors", "Infix Functor and Applicative Operators"]}}, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}], "User": [{"id": "User", "data": {"/Functors___-Monads-and--do--Notation/Syntax/#User": {"display": "User", "context": ["The Lean Language Reference", "Functors, Monads and do -Notation", "Syntax", "Infix Operators", "Applicative Functors"]}}, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}], "Ty.nat (in Coercing to Function Types)": [{"id": "Ty___nat-_LPAR_in-Coercing-to-Function-Types_RPAR_", "data": {"/Coercions/Coercing-to-Function-Types/#Ty___nat-_LPAR_in-Coercing-to-Function-Types_RPAR_": {"display": "nat", "context": ["The Lean Language Reference", "Coercions", "Coercing to Function Types", "Coercing to Function Types"]}}, "address": "/Coercions/Coercing-to-Function-Types/"}], "Ty.interp (in Coercing to Function Types)": [{"id": "Ty___interp-_LPAR_in-Coercing-to-Function-Types_RPAR_", "data": {"/Coercions/Coercing-to-Function-Types/#Ty___interp-_LPAR_in-Coercing-to-Function-Types_RPAR_": {"display": "Ty.interp", "context": ["The Lean Language Reference", "Coercions", "Coercing to Function Types", "Coercing to Function Types"]}}, "address": "/Coercions/Coercing-to-Function-Types/"}], "Ty.arr (in Coercing to Function Types)": [{"id": "Ty___arr-_LPAR_in-Coercing-to-Function-Types_RPAR_", "data": {"/Coercions/Coercing-to-Function-Types/#Ty___arr-_LPAR_in-Coercing-to-Function-Types_RPAR_": {"display": "arr", "context": ["The Lean Language Reference", "Coercions", "Coercing to Function Types", "Coercing to Function Types"]}}, "address": "/Coercions/Coercing-to-Function-Types/"}], "Ty (in Coercing to Function Types)": [{"id": "Ty-_LPAR_in-Coercing-to-Function-Types_RPAR_", "data": {"/Coercions/Coercing-to-Function-Types/#Ty-_LPAR_in-Coercing-to-Function-Types_RPAR_": {"display": "Ty", "context": ["The Lean Language Reference", "Coercions", "Coercing to Function Types", "Coercing to Function Types"]}}, "address": "/Coercions/Coercing-to-Function-Types/"}], "Two.mk (in Spuriously mutual types)": [{"id": "Two___mk-_LPAR_in-Spuriously-mutual-types_RPAR_", "data": {"/The-Type-System/Inductive-Types/#Two___mk-_LPAR_in-Spuriously-mutual-types_RPAR_": {"display": "mk", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Mutual Inductive Types", "Recursors", "Spuriously mutual types"]}}, "address": "/The-Type-System/Inductive-Types/"}], "Two (in Spuriously mutual types)": [{"id": "Two-_LPAR_in-Spuriously-mutual-types_RPAR_", "data": {"/The-Type-System/Inductive-Types/#Two-_LPAR_in-Spuriously-mutual-types_RPAR_": {"display": "Two", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Mutual Inductive Types", "Recursors", "Spuriously mutual types"]}}, "address": "/The-Type-System/Inductive-Types/"}], "Twice.second (in Duplicate Evaluation in Coercions)": [{"id": "Twice___second-_LPAR_in-Duplicate-Evaluation-in-Coercions_RPAR_", "data": {"/Coercions/Coercion-Insertion/#Twice___second-_LPAR_in-Duplicate-Evaluation-in-Coercions_RPAR_": {"display": "second", "context": ["The Lean Language Reference", "Coercions", "Coercion Insertion", "Duplicate Evaluation in Coercions"]}}, "address": "/Coercions/Coercion-Insertion/"}], "Twice.first_eq_second (in Duplicate Evaluation in Coercions)": [{"id": "Twice___first_eq_second-_LPAR_in-Duplicate-Evaluation-in-Coercions_RPAR_", "data": {"/Coercions/Coercion-Insertion/#Twice___first_eq_second-_LPAR_in-Duplicate-Evaluation-in-Coercions_RPAR_": {"display": "first_eq_second", "context": ["The Lean Language Reference", "Coercions", "Coercion Insertion", "Duplicate Evaluation in Coercions"]}}, "address": "/Coercions/Coercion-Insertion/"}], "Twice.first (in Duplicate Evaluation in Coercions)": [{"id": "Twice___first-_LPAR_in-Duplicate-Evaluation-in-Coercions_RPAR_", "data": {"/Coercions/Coercion-Insertion/#Twice___first-_LPAR_in-Duplicate-Evaluation-in-Coercions_RPAR_": {"display": "first", "context": ["The Lean Language Reference", "Coercions", "Coercion Insertion", "Duplicate Evaluation in Coercions"]}}, "address": "/Coercions/Coercion-Insertion/"}], "Twice (in Duplicate Evaluation in Coercions)": [{"id": "Twice-_LPAR_in-Duplicate-Evaluation-in-Coercions_RPAR_", "data": {"/Coercions/Coercion-Insertion/#Twice-_LPAR_in-Duplicate-Evaluation-in-Coercions_RPAR_": {"display": "Twice", "context": ["The Lean Language Reference", "Coercions", "Coercion Insertion", "Duplicate Evaluation in Coercions"]}}, "address": "/Coercions/Coercion-Insertion/"}], "Truthy.val (in CoeOut vs Coe instances)": [{"id": "Truthy___val-_LPAR_in-CoeOut--vs--Coe--instances_RPAR_", "data": {"/Coercions/Coercing-Between-Types/#Truthy___val-_LPAR_in-CoeOut--vs--Coe--instances_RPAR_": {"display": "val", "context": ["The Lean Language Reference", "Coercions", "Coercing Between Types", "CoeOut vs Coe instances"]}}, "address": "/Coercions/Coercing-Between-Types/"}], "Truthy.toBool (in CoeOut vs Coe instances)": [{"id": "Truthy___toBool-_LPAR_in-CoeOut--vs--Coe--instances_RPAR_", "data": {"/Coercions/Coercing-Between-Types/#Truthy___toBool-_LPAR_in-CoeOut--vs--Coe--instances_RPAR_": {"display": "Truthy.toBool", "context": ["The Lean Language Reference", "Coercions", "Coercing Between Types", "CoeOut vs Coe instances"]}}, "address": "/Coercions/Coercing-Between-Types/"}], "Truthy.isTrue (in CoeOut vs Coe instances)": [{"id": "Truthy___isTrue-_LPAR_in-CoeOut--vs--Coe--instances_RPAR_", "data": {"/Coercions/Coercing-Between-Types/#Truthy___isTrue-_LPAR_in-CoeOut--vs--Coe--instances_RPAR_": {"display": "isTrue", "context": ["The Lean Language Reference", "Coercions", "Coercing Between Types", "CoeOut vs Coe instances"]}}, "address": "/Coercions/Coercing-Between-Types/"}], "Truthy (in CoeOut vs Coe instances)": [{"id": "Truthy-_LPAR_in-CoeOut--vs--Coe--instances_RPAR_", "data": {"/Coercions/Coercing-Between-Types/#Truthy-_LPAR_in-CoeOut--vs--Coe--instances_RPAR_": {"display": "Truthy", "context": ["The Lean Language Reference", "Coercions", "Coercing Between Types", "CoeOut vs Coe instances"]}}, "address": "/Coercions/Coercing-Between-Types/"}], "TripleSlice.triple (in Custom Slices)": [{"id": "TripleSlice___triple-_LPAR_in-Custom-Slices_RPAR_", "data": {"/Basic-Types/Ranges/#TripleSlice___triple-_LPAR_in-Custom-Slices_RPAR_": {"display": "triple", "context": ["The Lean Language Reference", "Basic Types", "Ranges", "Ranges and Slices", "Custom Slices"]}}, "address": "/Basic-Types/Ranges/"}], "TripleSlice.stop (in Custom Slices)": [{"id": "TripleSlice___stop-_LPAR_in-Custom-Slices_RPAR_", "data": {"/Basic-Types/Ranges/#TripleSlice___stop-_LPAR_in-Custom-Slices_RPAR_": {"display": "stop", "context": ["The Lean Language Reference", "Basic Types", "Ranges", "Ranges and Slices", "Custom Slices"]}}, "address": "/Basic-Types/Ranges/"}], "TripleSlice.start (in Custom Slices)": [{"id": "TripleSlice___start-_LPAR_in-Custom-Slices_RPAR_", "data": {"/Basic-Types/Ranges/#TripleSlice___start-_LPAR_in-Custom-Slices_RPAR_": {"display": "start", "context": ["The Lean Language Reference", "Basic Types", "Ranges", "Ranges and Slices", "Custom Slices"]}}, "address": "/Basic-Types/Ranges/"}], "TripleSlice (in Custom Slices)": [{"id": "TripleSlice-_LPAR_in-Custom-Slices_RPAR_", "data": {"/Basic-Types/Ranges/#TripleSlice-_LPAR_in-Custom-Slices_RPAR_": {"display": "TripleSlice", "context": ["The Lean Language Reference", "Basic Types", "Ranges", "Ranges and Slices", "Custom Slices"]}}, "address": "/Basic-Types/Ranges/"}], "TriplePos.thd (in Iterating Over Triples)": [{"id": "TriplePos___thd-_LPAR_in-Iterating-Over-Triples_RPAR_", "data": {"/Iterators/Iterator-Definitions/#TriplePos___thd-_LPAR_in-Iterating-Over-Triples_RPAR_": {"display": "thd", "context": ["The Lean Language Reference", "Iterators", "Iterator Definitions", "Finite and Productive Iterators", "Iterating Over Triples"]}}, "address": "/Iterators/Iterator-Definitions/"}], "TriplePos.thd (in Custom Slices)": [{"id": "TriplePos___thd-_LPAR_in-Custom-Slices_RPAR_", "data": {"/Basic-Types/Ranges/#TriplePos___thd-_LPAR_in-Custom-Slices_RPAR_": {"display": "thd", "context": ["The Lean Language Reference", "Basic Types", "Ranges", "Ranges and Slices", "Custom Slices"]}}, "address": "/Basic-Types/Ranges/"}], "TriplePos.snd (in Iterating Over Triples)": [{"id": "TriplePos___snd-_LPAR_in-Iterating-Over-Triples_RPAR_", "data": {"/Iterators/Iterator-Definitions/#TriplePos___snd-_LPAR_in-Iterating-Over-Triples_RPAR_": {"display": "snd", "context": ["The Lean Language Reference", "Iterators", "Iterator Definitions", "Finite and Productive Iterators", "Iterating Over Triples"]}}, "address": "/Iterators/Iterator-Definitions/"}], "TriplePos.snd (in Custom Slices)": [{"id": "TriplePos___snd-_LPAR_in-Custom-Slices_RPAR_", "data": {"/Basic-Types/Ranges/#TriplePos___snd-_LPAR_in-Custom-Slices_RPAR_": {"display": "snd", "context": ["The Lean Language Reference", "Basic Types", "Ranges", "Ranges and Slices", "Custom Slices"]}}, "address": "/Basic-Types/Ranges/"}], "TriplePos.fst (in Iterating Over Triples)": [{"id": "TriplePos___fst-_LPAR_in-Iterating-Over-Triples_RPAR_", "data": {"/Iterators/Iterator-Definitions/#TriplePos___fst-_LPAR_in-Iterating-Over-Triples_RPAR_": {"display": "fst", "context": ["The Lean Language Reference", "Iterators", "Iterator Definitions", "Finite and Productive Iterators", "Iterating Over Triples"]}}, "address": "/Iterators/Iterator-Definitions/"}], "TriplePos.fst (in Custom Slices)": [{"id": "TriplePos___fst-_LPAR_in-Custom-Slices_RPAR_", "data": {"/Basic-Types/Ranges/#TriplePos___fst-_LPAR_in-Custom-Slices_RPAR_": {"display": "fst", "context": ["The Lean Language Reference", "Basic Types", "Ranges", "Ranges and Slices", "Custom Slices"]}}, "address": "/Basic-Types/Ranges/"}], "TriplePos.done (in Iterating Over Triples)": [{"id": "TriplePos___done-_LPAR_in-Iterating-Over-Triples_RPAR_", "data": {"/Iterators/Iterator-Definitions/#TriplePos___done-_LPAR_in-Iterating-Over-Triples_RPAR_": {"display": "done", "context": ["The Lean Language Reference", "Iterators", "Iterator Definitions", "Finite and Productive Iterators", "Iterating Over Triples"]}}, "address": "/Iterators/Iterator-Definitions/"}], "TriplePos.done (in Custom Slices)": [{"id": "TriplePos___done-_LPAR_in-Custom-Slices_RPAR_", "data": {"/Basic-Types/Ranges/#TriplePos___done-_LPAR_in-Custom-Slices_RPAR_": {"display": "done", "context": ["The Lean Language Reference", "Basic Types", "Ranges", "Ranges and Slices", "Custom Slices"]}}, "address": "/Basic-Types/Ranges/"}], "TriplePos.Succ.thd (in Iterating Over Triples)": [{"id": "TriplePos___Succ___thd-_LPAR_in-Iterating-Over-Triples_RPAR_", "data": {"/Iterators/Iterator-Definitions/#TriplePos___Succ___thd-_LPAR_in-Iterating-Over-Triples_RPAR_": {"display": "thd", "context": ["The Lean Language Reference", "Iterators", "Iterator Definitions", "Finite and Productive Iterators", "Iterating Over Triples"]}}, "address": "/Iterators/Iterator-Definitions/"}], "TriplePos.Succ.snd (in Iterating Over Triples)": [{"id": "TriplePos___Succ___snd-_LPAR_in-Iterating-Over-Triples_RPAR_", "data": {"/Iterators/Iterator-Definitions/#TriplePos___Succ___snd-_LPAR_in-Iterating-Over-Triples_RPAR_": {"display": "snd", "context": ["The Lean Language Reference", "Iterators", "Iterator Definitions", "Finite and Productive Iterators", "Iterating Over Triples"]}}, "address": "/Iterators/Iterator-Definitions/"}], "TriplePos.Succ.fst (in Iterating Over Triples)": [{"id": "TriplePos___Succ___fst-_LPAR_in-Iterating-Over-Triples_RPAR_", "data": {"/Iterators/Iterator-Definitions/#TriplePos___Succ___fst-_LPAR_in-Iterating-Over-Triples_RPAR_": {"display": "fst", "context": ["The Lean Language Reference", "Iterators", "Iterator Definitions", "Finite and Productive Iterators", "Iterating Over Triples"]}}, "address": "/Iterators/Iterator-Definitions/"}], "TriplePos.Succ (in Iterating Over Triples)": [{"id": "TriplePos___Succ-_LPAR_in-Iterating-Over-Triples_RPAR_", "data": {"/Iterators/Iterator-Definitions/#TriplePos___Succ-_LPAR_in-Iterating-Over-Triples_RPAR_": {"display": "TriplePos.Succ", "context": ["The Lean Language Reference", "Iterators", "Iterator Definitions", "Finite and Productive Iterators", "Iterating Over Triples"]}}, "address": "/Iterators/Iterator-Definitions/"}], "TriplePos (in Iterating Over Triples)": [{"id": "TriplePos-_LPAR_in-Iterating-Over-Triples_RPAR_", "data": {"/Iterators/Iterator-Definitions/#TriplePos-_LPAR_in-Iterating-Over-Triples_RPAR_": {"display": "TriplePos", "context": ["The Lean Language Reference", "Iterators", "Iterator Definitions", "Finite and Productive Iterators", "Iterating Over Triples"]}}, "address": "/Iterators/Iterator-Definitions/"}], "TriplePos (in Custom Slices)": [{"id": "TriplePos-_LPAR_in-Custom-Slices_RPAR_", "data": {"/Basic-Types/Ranges/#TriplePos-_LPAR_in-Custom-Slices_RPAR_": {"display": "TriplePos", "context": ["The Lean Language Reference", "Basic Types", "Ranges", "Ranges and Slices", "Custom Slices"]}}, "address": "/Basic-Types/Ranges/"}], "TripleIterator.triple (in Iterating Over Triples)": [{"id": "TripleIterator___triple-_LPAR_in-Iterating-Over-Triples_RPAR_", "data": {"/Iterators/Iterator-Definitions/#TripleIterator___triple-_LPAR_in-Iterating-Over-Triples_RPAR_": {"display": "triple", "context": ["The Lean Language Reference", "Iterators", "Iterator Definitions", "Finite and Productive Iterators", "Iterating Over Triples"]}}, "address": "/Iterators/Iterator-Definitions/"}], "TripleIterator.pos (in Iterating Over Triples)": [{"id": "TripleIterator___pos-_LPAR_in-Iterating-Over-Triples_RPAR_", "data": {"/Iterators/Iterator-Definitions/#TripleIterator___pos-_LPAR_in-Iterating-Over-Triples_RPAR_": {"display": "pos", "context": ["The Lean Language Reference", "Iterators", "Iterator Definitions", "Finite and Productive Iterators", "Iterating Over Triples"]}}, "address": "/Iterators/Iterator-Definitions/"}], "TripleIterator.IsPlausibleStep.yield (in Iterating Over Triples)": [{"id": "TripleIterator___IsPlausibleStep___yield-_LPAR_in-Iterating-Over-Triples_RPAR_", "data": {"/Iterators/Iterator-Definitions/#TripleIterator___IsPlausibleStep___yield-_LPAR_in-Iterating-Over-Triples_RPAR_": {"display": "yield", "context": ["The Lean Language Reference", "Iterators", "Iterator Definitions", "Finite and Productive Iterators", "Iterating Over Triples"]}}, "address": "/Iterators/Iterator-Definitions/"}], "TripleIterator.IsPlausibleStep.done (in Iterating Over Triples)": [{"id": "TripleIterator___IsPlausibleStep___done-_LPAR_in-Iterating-Over-Triples_RPAR_", "data": {"/Iterators/Iterator-Definitions/#TripleIterator___IsPlausibleStep___done-_LPAR_in-Iterating-Over-Triples_RPAR_": {"display": "done", "context": ["The Lean Language Reference", "Iterators", "Iterator Definitions", "Finite and Productive Iterators", "Iterating Over Triples"]}}, "address": "/Iterators/Iterator-Definitions/"}], "TripleIterator.IsPlausibleStep (in Iterating Over Triples)": [{"id": "TripleIterator___IsPlausibleStep-_LPAR_in-Iterating-Over-Triples_RPAR_", "data": {"/Iterators/Iterator-Definitions/#TripleIterator___IsPlausibleStep-_LPAR_in-Iterating-Over-Triples_RPAR_": {"display": "TripleIterator.IsPlausibleStep", "context": ["The Lean Language Reference", "Iterators", "Iterator Definitions", "Finite and Productive Iterators", "Iterating Over Triples"]}}, "address": "/Iterators/Iterator-Definitions/"}], "TripleIterator (in Iterating Over Triples)": [{"id": "TripleIterator-_LPAR_in-Iterating-Over-Triples_RPAR_", "data": {"/Iterators/Iterator-Definitions/#TripleIterator-_LPAR_in-Iterating-Over-Triples_RPAR_": {"display": "TripleIterator", "context": ["The Lean Language Reference", "Iterators", "Iterator Definitions", "Finite and Productive Iterators", "Iterating Over Triples"]}}, "address": "/Iterators/Iterator-Definitions/"}], "Triple.thd (in Iterating Over Triples)": [{"id": "Triple___thd-_LPAR_in-Iterating-Over-Triples_RPAR_", "data": {"/Iterators/Iterator-Definitions/#Triple___thd-_LPAR_in-Iterating-Over-Triples_RPAR_": {"display": "thd", "context": ["The Lean Language Reference", "Iterators", "Iterator Definitions", "Finite and Productive Iterators", "Iterating Over Triples"]}}, "address": "/Iterators/Iterator-Definitions/"}], "Triple.thd (in Field Indices and Structure Inheritance)": [{"id": "Triple___thd-_LPAR_in-Field-Indices-and-Structure-Inheritance_RPAR_", "data": {"/The-Type-System/Inductive-Types/#Triple___thd-_LPAR_in-Field-Indices-and-Structure-Inheritance_RPAR_": {"display": "thd", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Structure Declarations", "Structure Inheritance", "Field Indices and Structure Inheritance"]}}, "address": "/The-Type-System/Inductive-Types/"}], "Triple.thd (in Custom Slices)": [{"id": "Triple___thd-_LPAR_in-Custom-Slices_RPAR_", "data": {"/Basic-Types/Ranges/#Triple___thd-_LPAR_in-Custom-Slices_RPAR_": {"display": "thd", "context": ["The Lean Language Reference", "Basic Types", "Ranges", "Ranges and Slices", "Custom Slices"]}}, "address": "/Basic-Types/Ranges/"}], "Triple.snd (in Iterating Over Triples)": [{"id": "Triple___snd-_LPAR_in-Iterating-Over-Triples_RPAR_", "data": {"/Iterators/Iterator-Definitions/#Triple___snd-_LPAR_in-Iterating-Over-Triples_RPAR_": {"display": "snd", "context": ["The Lean Language Reference", "Iterators", "Iterator Definitions", "Finite and Productive Iterators", "Iterating Over Triples"]}}, "address": "/Iterators/Iterator-Definitions/"}], "Triple.snd (in Custom Slices)": [{"id": "Triple___snd-_LPAR_in-Custom-Slices_RPAR_", "data": {"/Basic-Types/Ranges/#Triple___snd-_LPAR_in-Custom-Slices_RPAR_": {"display": "snd", "context": ["The Lean Language Reference", "Basic Types", "Ranges", "Ranges and Slices", "Custom Slices"]}}, "address": "/Basic-Types/Ranges/"}], "Triple.iter (in Iterating Over Triples)": [{"id": "Triple___iter-_LPAR_in-Iterating-Over-Triples_RPAR_", "data": {"/Iterators/Iterator-Definitions/#Triple___iter-_LPAR_in-Iterating-Over-Triples_RPAR_": {"display": "Triple.iter", "context": ["The Lean Language Reference", "Iterators", "Iterator Definitions", "Finite and Productive Iterators", "Iterating Over Triples"]}}, "address": "/Iterators/Iterator-Definitions/"}], "Triple.get? (in Iterating Over Triples)": [{"id": "Triple___get___-_LPAR_in-Iterating-Over-Triples_RPAR_", "data": {"/Iterators/Iterator-Definitions/#Triple___get___-_LPAR_in-Iterating-Over-Triples_RPAR_": {"display": "Triple.get?", "context": ["The Lean Language Reference", "Iterators", "Iterator Definitions", "Finite and Productive Iterators", "Iterating Over Triples"]}}, "address": "/Iterators/Iterator-Definitions/"}], "Triple.fst (in Iterating Over Triples)": [{"id": "Triple___fst-_LPAR_in-Iterating-Over-Triples_RPAR_", "data": {"/Iterators/Iterator-Definitions/#Triple___fst-_LPAR_in-Iterating-Over-Triples_RPAR_": {"display": "fst", "context": ["The Lean Language Reference", "Iterators", "Iterator Definitions", "Finite and Productive Iterators", "Iterating Over Triples"]}}, "address": "/Iterators/Iterator-Definitions/"}], "Triple.fst (in Custom Slices)": [{"id": "Triple___fst-_LPAR_in-Custom-Slices_RPAR_", "data": {"/Basic-Types/Ranges/#Triple___fst-_LPAR_in-Custom-Slices_RPAR_": {"display": "fst", "context": ["The Lean Language Reference", "Basic Types", "Ranges", "Ranges and Slices", "Custom Slices"]}}, "address": "/Basic-Types/Ranges/"}], "Triple (in Iterating Over Triples)": [{"id": "Triple-_LPAR_in-Iterating-Over-Triples_RPAR_", "data": {"/Iterators/Iterator-Definitions/#Triple-_LPAR_in-Iterating-Over-Triples_RPAR_": {"display": "Triple", "context": ["The Lean Language Reference", "Iterators", "Iterator Definitions", "Finite and Productive Iterators", "Iterating Over Triples"]}}, "address": "/Iterators/Iterator-Definitions/"}], "Triple (in Field Indices and Structure Inheritance)": [{"id": "Triple-_LPAR_in-Field-Indices-and-Structure-Inheritance_RPAR_", "data": {"/The-Type-System/Inductive-Types/#Triple-_LPAR_in-Field-Indices-and-Structure-Inheritance_RPAR_": {"display": "Triple", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Structure Declarations", "Structure Inheritance", "Field Indices and Structure Inheritance"]}}, "address": "/The-Type-System/Inductive-Types/"}], "Triple (in Custom Slices)": [{"id": "Triple-_LPAR_in-Custom-Slices_RPAR_", "data": {"/Basic-Types/Ranges/#Triple-_LPAR_in-Custom-Slices_RPAR_": {"display": "Triple", "context": ["The Lean Language Reference", "Basic Types", "Ranges", "Ranges and Slices", "Custom Slices"]}}, "address": "/Basic-Types/Ranges/"}], "Triple": [{"id": "Triple", "data": {"/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/#Triple": {"display": "Triple", "context": ["The Lean Language Reference", "The mvcgen tactic", "Tutorial: Verifying Imperative Programs Using mvcgen", "Compositional Reasoning About Effectful Programs Using Hoare Triples", "Hoare Triples"]}}, "address": "/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/"}], "Tree.val (in Displaying Differences)": [{"id": "Tree___val-_LPAR_in-Displaying-Differences_RPAR_", "data": {"/Interacting-with-Lean/#Tree___val-_LPAR_in-Displaying-Differences_RPAR_": {"display": "val", "context": ["The Lean Language Reference", "Interacting with Lean", "Testing Output with #guard_msgs", "Displaying Differences"]}}, "address": "/Interacting-with-Lean/"}], "Tree.rev' (in Monadic functions)": [{"id": "Tree___rev___-_LPAR_in-Monadic-functions_RPAR_", "data": {"/Definitions/Recursive-Definitions/#Tree___rev___-_LPAR_in-Monadic-functions_RPAR_": {"display": "Tree.rev'", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Partial Fixpoint Recursion", "Monadic functions", "Monadic functions"]}}, "address": "/Definitions/Recursive-Definitions/"}], "Tree.rev (in Monadic functions)": [{"id": "Tree___rev-_LPAR_in-Monadic-functions_RPAR_", "data": {"/Definitions/Recursive-Definitions/#Tree___rev-_LPAR_in-Monadic-functions_RPAR_": {"display": "Tree.rev", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Partial Fixpoint Recursion", "Monadic functions", "Monadic functions"]}}, "address": "/Definitions/Recursive-Definitions/"}], "Tree.node (in Preprocessing for a custom data type)": [{"id": "Tree___node-_LPAR_in-Preprocessing-for-a-custom-data-type_RPAR_", "data": {"/Definitions/Recursive-Definitions/#Tree___node-_LPAR_in-Preprocessing-for-a-custom-data-type_RPAR_": {"display": "node", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Well-Founded Recursion", "Preprocessing Function Definitions", "Preprocessing for a custom data type"]}}, "address": "/Definitions/Recursive-Definitions/"}], "Tree.map (in Preprocessing for a custom data type)": [{"id": "Tree___map-_LPAR_in-Preprocessing-for-a-custom-data-type_RPAR_-next", "data": {"/Definitions/Recursive-Definitions/#Tree___map-_LPAR_in-Preprocessing-for-a-custom-data-type_RPAR_-next-next-next": {"display": "Tree.map", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Well-Founded Recursion", "Preprocessing Function Definitions", "Preprocessing for a custom data type"]}, "/Definitions/Recursive-Definitions/#Tree___map-_LPAR_in-Preprocessing-for-a-custom-data-type_RPAR_-next-next": {"display": "Tree.map", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Well-Founded Recursion", "Preprocessing Function Definitions", "Preprocessing for a custom data type"]}, "/Definitions/Recursive-Definitions/#Tree___map-_LPAR_in-Preprocessing-for-a-custom-data-type_RPAR_-next": {"display": "Tree.map", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Well-Founded Recursion", "Preprocessing Function Definitions", "Preprocessing for a custom data type"]}, "/Definitions/Recursive-Definitions/#Tree___map-_LPAR_in-Preprocessing-for-a-custom-data-type_RPAR_": {"display": "Tree.map", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Well-Founded Recursion", "Preprocessing Function Definitions", "Preprocessing for a custom data type"]}}, "address": "/Definitions/Recursive-Definitions/"}, {"id": "Tree___map-_LPAR_in-Preprocessing-for-a-custom-data-type_RPAR_", "data": {"/Definitions/Recursive-Definitions/#Tree___map-_LPAR_in-Preprocessing-for-a-custom-data-type_RPAR_-next-next-next": {"display": "Tree.map", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Well-Founded Recursion", "Preprocessing Function Definitions", "Preprocessing for a custom data type"]}, "/Definitions/Recursive-Definitions/#Tree___map-_LPAR_in-Preprocessing-for-a-custom-data-type_RPAR_-next-next": {"display": "Tree.map", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Well-Founded Recursion", "Preprocessing Function Definitions", "Preprocessing for a custom data type"]}, "/Definitions/Recursive-Definitions/#Tree___map-_LPAR_in-Preprocessing-for-a-custom-data-type_RPAR_-next": {"display": "Tree.map", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Well-Founded Recursion", "Preprocessing Function Definitions", "Preprocessing for a custom data type"]}, "/Definitions/Recursive-Definitions/#Tree___map-_LPAR_in-Preprocessing-for-a-custom-data-type_RPAR_": {"display": "Tree.map", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Well-Founded Recursion", "Preprocessing Function Definitions", "Preprocessing for a custom data type"]}}, "address": "/Definitions/Recursive-Definitions/"}, {"id": "Tree___map-_LPAR_in-Preprocessing-for-a-custom-data-type_RPAR_-next-next", "data": {"/Definitions/Recursive-Definitions/#Tree___map-_LPAR_in-Preprocessing-for-a-custom-data-type_RPAR_-next-next-next": {"display": "Tree.map", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Well-Founded Recursion", "Preprocessing Function Definitions", "Preprocessing for a custom data type"]}, "/Definitions/Recursive-Definitions/#Tree___map-_LPAR_in-Preprocessing-for-a-custom-data-type_RPAR_-next-next": {"display": "Tree.map", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Well-Founded Recursion", "Preprocessing Function Definitions", "Preprocessing for a custom data type"]}, "/Definitions/Recursive-Definitions/#Tree___map-_LPAR_in-Preprocessing-for-a-custom-data-type_RPAR_-next": {"display": "Tree.map", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Well-Founded Recursion", "Preprocessing Function Definitions", "Preprocessing for a custom data type"]}, "/Definitions/Recursive-Definitions/#Tree___map-_LPAR_in-Preprocessing-for-a-custom-data-type_RPAR_": {"display": "Tree.map", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Well-Founded Recursion", "Preprocessing Function Definitions", "Preprocessing for a custom data type"]}}, "address": "/Definitions/Recursive-Definitions/"}, {"id": "Tree___map-_LPAR_in-Preprocessing-for-a-custom-data-type_RPAR_-next-next-next", "data": {"/Definitions/Recursive-Definitions/#Tree___map-_LPAR_in-Preprocessing-for-a-custom-data-type_RPAR_-next-next-next": {"display": "Tree.map", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Well-Founded Recursion", "Preprocessing Function Definitions", "Preprocessing for a custom data type"]}, "/Definitions/Recursive-Definitions/#Tree___map-_LPAR_in-Preprocessing-for-a-custom-data-type_RPAR_-next-next": {"display": "Tree.map", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Well-Founded Recursion", "Preprocessing Function Definitions", "Preprocessing for a custom data type"]}, "/Definitions/Recursive-Definitions/#Tree___map-_LPAR_in-Preprocessing-for-a-custom-data-type_RPAR_-next": {"display": "Tree.map", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Well-Founded Recursion", "Preprocessing Function Definitions", "Preprocessing for a custom data type"]}, "/Definitions/Recursive-Definitions/#Tree___map-_LPAR_in-Preprocessing-for-a-custom-data-type_RPAR_": {"display": "Tree.map", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Well-Founded Recursion", "Preprocessing Function Definitions", "Preprocessing for a custom data type"]}}, "address": "/Definitions/Recursive-Definitions/"}], "Tree.leaf (in Preprocessing for a custom data type)": [{"id": "Tree___leaf-_LPAR_in-Preprocessing-for-a-custom-data-type_RPAR_", "data": {"/Definitions/Recursive-Definitions/#Tree___leaf-_LPAR_in-Preprocessing-for-a-custom-data-type_RPAR_": {"display": "leaf", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Well-Founded Recursion", "Preprocessing Function Definitions", "Preprocessing for a custom data type"]}}, "address": "/Definitions/Recursive-Definitions/"}], "Tree.leaf (in Importing Private Information)": [{"id": "Tree___leaf-_LPAR_in-Importing-Private-Information_RPAR_", "data": {"/Source-Files-and-Modules/#Tree___leaf-_LPAR_in-Importing-Private-Information_RPAR_-next": {"display": "leaf", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Importing Private Information"]}, "/Source-Files-and-Modules/#Tree___leaf-_LPAR_in-Importing-Private-Information_RPAR_": {"display": "leaf", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Importing Private Information"]}}, "address": "/Source-Files-and-Modules/"}, {"id": "Tree___leaf-_LPAR_in-Importing-Private-Information_RPAR_-next", "data": {"/Source-Files-and-Modules/#Tree___leaf-_LPAR_in-Importing-Private-Information_RPAR_-next": {"display": "leaf", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Importing Private Information"]}, "/Source-Files-and-Modules/#Tree___leaf-_LPAR_in-Importing-Private-Information_RPAR_": {"display": "leaf", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Importing Private Information"]}}, "address": "/Source-Files-and-Modules/"}], "Tree.leaf (in Course-of-Values Tables)": [{"id": "Tree___leaf-_LPAR_in-Course-of-Values-Tables_RPAR_", "data": {"/Definitions/Recursive-Definitions/#Tree___leaf-_LPAR_in-Course-of-Values-Tables_RPAR_": {"display": "leaf", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Structural Recursion", "Elaboration Using Course-of-Values Recursion", "Course-of-Values Tables"]}}, "address": "/Definitions/Recursive-Definitions/"}], "Tree.fastBEq (in Checking Equality with Pointers)": [{"id": "Tree___fastBEq-_LPAR_in-Checking-Equality-with-Pointers_RPAR_", "data": {"/Definitions/Recursive-Definitions/#Tree___fastBEq-_LPAR_in-Checking-Equality-with-Pointers_RPAR_": {"display": "Tree.fastBEq", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Partial and Unsafe Definitions", "Unsafe Definitions", "Checking Equality with Pointers"]}}, "address": "/Definitions/Recursive-Definitions/"}], "Tree.empty (in Checking Equality with Pointers)": [{"id": "Tree___empty-_LPAR_in-Checking-Equality-with-Pointers_RPAR_", "data": {"/Definitions/Recursive-Definitions/#Tree___empty-_LPAR_in-Checking-Equality-with-Pointers_RPAR_": {"display": "empty", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Partial and Unsafe Definitions", "Unsafe Definitions", "Checking Equality with Pointers"]}}, "address": "/Definitions/Recursive-Definitions/"}], "Tree.cs (in Monadic functions)": [{"id": "Tree___cs-_LPAR_in-Monadic-functions_RPAR_", "data": {"/Definitions/Recursive-Definitions/#Tree___cs-_LPAR_in-Monadic-functions_RPAR_": {"display": "cs", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Partial Fixpoint Recursion", "Monadic functions", "Monadic functions"]}}, "address": "/Definitions/Recursive-Definitions/"}], "Tree.count (in Importing Private Information)": [{"id": "Tree___count-_LPAR_in-Importing-Private-Information_RPAR_", "data": {"/Source-Files-and-Modules/#Tree___count-_LPAR_in-Importing-Private-Information_RPAR_-next": {"display": "Tree.count", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Importing Private Information"]}, "/Source-Files-and-Modules/#Tree___count-_LPAR_in-Importing-Private-Information_RPAR_": {"display": "Tree.count", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Importing Private Information"]}}, "address": "/Source-Files-and-Modules/"}, {"id": "Tree___count-_LPAR_in-Importing-Private-Information_RPAR_-next", "data": {"/Source-Files-and-Modules/#Tree___count-_LPAR_in-Importing-Private-Information_RPAR_-next": {"display": "Tree.count", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Importing Private Information"]}, "/Source-Files-and-Modules/#Tree___count-_LPAR_in-Importing-Private-Information_RPAR_": {"display": "Tree.count", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Importing Private Information"]}}, "address": "/Source-Files-and-Modules/"}], "Tree.brecOnTable (in Course-of-Values Tables)": [{"id": "Tree___brecOnTable-_LPAR_in-Course-of-Values-Tables_RPAR_", "data": {"/Definitions/Recursive-Definitions/#Tree___brecOnTable-_LPAR_in-Course-of-Values-Tables_RPAR_": {"display": "Tree.brecOnTable", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Structural Recursion", "Elaboration Using Course-of-Values Recursion", "Course-of-Values Tables"]}}, "address": "/Definitions/Recursive-Definitions/"}], "Tree.brecOn' (in Course-of-Values Tables)": [{"id": "Tree___brecOn___-_LPAR_in-Course-of-Values-Tables_RPAR_", "data": {"/Definitions/Recursive-Definitions/#Tree___brecOn___-_LPAR_in-Course-of-Values-Tables_RPAR_": {"display": "Tree.brecOn'", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Structural Recursion", "Elaboration Using Course-of-Values Recursion", "Course-of-Values Tables"]}}, "address": "/Definitions/Recursive-Definitions/"}], "Tree.branches (in Displaying Differences)": [{"id": "Tree___branches-_LPAR_in-Displaying-Differences_RPAR_", "data": {"/Interacting-with-Lean/#Tree___branches-_LPAR_in-Displaying-Differences_RPAR_": {"display": "branches", "context": ["The Lean Language Reference", "Interacting with Lean", "Testing Output with #guard_msgs", "Displaying Differences"]}}, "address": "/Interacting-with-Lean/"}], "Tree.branch (in Course-of-Values Tables)": [{"id": "Tree___branch-_LPAR_in-Course-of-Values-Tables_RPAR_", "data": {"/Definitions/Recursive-Definitions/#Tree___branch-_LPAR_in-Course-of-Values-Tables_RPAR_": {"display": "branch", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Structural Recursion", "Elaboration Using Course-of-Values Recursion", "Course-of-Values Tables"]}}, "address": "/Definitions/Recursive-Definitions/"}], "Tree.branch (in Checking Equality with Pointers)": [{"id": "Tree___branch-_LPAR_in-Checking-Equality-with-Pointers_RPAR_", "data": {"/Definitions/Recursive-Definitions/#Tree___branch-_LPAR_in-Checking-Equality-with-Pointers_RPAR_": {"display": "branch", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Partial and Unsafe Definitions", "Unsafe Definitions", "Checking Equality with Pointers"]}}, "address": "/Definitions/Recursive-Definitions/"}], "Tree.big (in Displaying Differences)": [{"id": "Tree___big-_LPAR_in-Displaying-Differences_RPAR_", "data": {"/Interacting-with-Lean/#Tree___big-_LPAR_in-Displaying-Differences_RPAR_": {"display": "Tree.big", "context": ["The Lean Language Reference", "Interacting with Lean", "Testing Output with #guard_msgs", "Displaying Differences"]}}, "address": "/Interacting-with-Lean/"}], "Tree.beq (in Checking Equality with Pointers)": [{"id": "Tree___beq-_LPAR_in-Checking-Equality-with-Pointers_RPAR_", "data": {"/Definitions/Recursive-Definitions/#Tree___beq-_LPAR_in-Checking-Equality-with-Pointers_RPAR_": {"display": "Tree.beq", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Partial and Unsafe Definitions", "Unsafe Definitions", "Checking Equality with Pointers"]}}, "address": "/Definitions/Recursive-Definitions/"}], "Tree.below' (in Course-of-Values Tables)": [{"id": "Tree___below___-_LPAR_in-Course-of-Values-Tables_RPAR_", "data": {"/Definitions/Recursive-Definitions/#Tree___below___-_LPAR_in-Course-of-Values-Tables_RPAR_": {"display": "Tree.below'", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Structural Recursion", "Elaboration Using Course-of-Values Recursion", "Course-of-Values Tables"]}}, "address": "/Definitions/Recursive-Definitions/"}], "Tree (in Preprocessing for a custom data type)": [{"id": "Tree-_LPAR_in-Preprocessing-for-a-custom-data-type_RPAR_", "data": {"/Definitions/Recursive-Definitions/#Tree-_LPAR_in-Preprocessing-for-a-custom-data-type_RPAR_": {"display": "Tree", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Well-Founded Recursion", "Preprocessing Function Definitions", "Preprocessing for a custom data type"]}}, "address": "/Definitions/Recursive-Definitions/"}], "Tree (in Monadic functions)": [{"id": "Tree-_LPAR_in-Monadic-functions_RPAR_", "data": {"/Definitions/Recursive-Definitions/#Tree-_LPAR_in-Monadic-functions_RPAR_": {"display": "Tree", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Partial Fixpoint Recursion", "Monadic functions", "Monadic functions"]}}, "address": "/Definitions/Recursive-Definitions/"}], "Tree (in Importing Private Information)": [{"id": "Tree-_LPAR_in-Importing-Private-Information_RPAR_", "data": {"/Source-Files-and-Modules/#Tree-_LPAR_in-Importing-Private-Information_RPAR_-next": {"display": "Tree", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Importing Private Information"]}, "/Source-Files-and-Modules/#Tree-_LPAR_in-Importing-Private-Information_RPAR_": {"display": "Tree", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Importing Private Information"]}}, "address": "/Source-Files-and-Modules/"}, {"id": "Tree-_LPAR_in-Importing-Private-Information_RPAR_-next", "data": {"/Source-Files-and-Modules/#Tree-_LPAR_in-Importing-Private-Information_RPAR_-next": {"display": "Tree", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Importing Private Information"]}, "/Source-Files-and-Modules/#Tree-_LPAR_in-Importing-Private-Information_RPAR_": {"display": "Tree", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Importing Private Information"]}}, "address": "/Source-Files-and-Modules/"}], "Tree (in Displaying Differences)": [{"id": "Tree-_LPAR_in-Displaying-Differences_RPAR_", "data": {"/Interacting-with-Lean/#Tree-_LPAR_in-Displaying-Differences_RPAR_": {"display": "Tree", "context": ["The Lean Language Reference", "Interacting with Lean", "Testing Output with #guard_msgs", "Displaying Differences"]}}, "address": "/Interacting-with-Lean/"}], "Tree (in Course-of-Values Tables)": [{"id": "Tree-_LPAR_in-Course-of-Values-Tables_RPAR_", "data": {"/Definitions/Recursive-Definitions/#Tree-_LPAR_in-Course-of-Values-Tables_RPAR_": {"display": "Tree", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Structural Recursion", "Elaboration Using Course-of-Values Recursion", "Course-of-Values Tables"]}}, "address": "/Definitions/Recursive-Definitions/"}], "Tree (in Checking Equality with Pointers)": [{"id": "Tree-_LPAR_in-Checking-Equality-with-Pointers_RPAR_", "data": {"/Definitions/Recursive-Definitions/#Tree-_LPAR_in-Checking-Equality-with-Pointers_RPAR_": {"display": "Tree", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Partial and Unsafe Definitions", "Unsafe Definitions", "Checking Equality with Pointers"]}}, "address": "/Definitions/Recursive-Definitions/"}], "Transformers.mkFresh_spec": [{"id": "Transformers___mkFresh_spec", "data": {"/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/#Transformers___mkFresh_spec": {"display": "mkFresh_spec", "context": ["The Lean Language Reference", "The mvcgen tactic", "Tutorial: Verifying Imperative Programs Using mvcgen", "Monad Transformers and Lifting"]}}, "address": "/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/"}], "Transformers.mkFreshN_spec": [{"id": "Transformers___mkFreshN_spec", "data": {"/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/#Transformers___mkFreshN_spec": {"display": "mkFreshN_spec", "context": ["The Lean Language Reference", "The mvcgen tactic", "Tutorial: Verifying Imperative Programs Using mvcgen", "Monad Transformers and Lifting"]}}, "address": "/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/"}], "Transformers.mkFreshN": [{"id": "Transformers___mkFreshN", "data": {"/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/#Transformers___mkFreshN": {"display": "mkFreshN", "context": ["The Lean Language Reference", "The mvcgen tactic", "Tutorial: Verifying Imperative Programs Using mvcgen", "Monad Transformers and Lifting"]}}, "address": "/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/"}], "Transformers.mkFresh": [{"id": "Transformers___mkFresh", "data": {"/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/#Transformers___mkFresh": {"display": "mkFresh", "context": ["The Lean Language Reference", "The mvcgen tactic", "Tutorial: Verifying Imperative Programs Using mvcgen", "Monad Transformers and Lifting"]}}, "address": "/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/"}], "Transformers.CounterM": [{"id": "Transformers___CounterM", "data": {"/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/#Transformers___CounterM": {"display": "CounterM", "context": ["The Lean Language Reference", "The mvcgen tactic", "Tutorial: Verifying Imperative Programs Using mvcgen", "Monad Transformers and Lifting"]}}, "address": "/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/"}], "Transformers.AppM": [{"id": "Transformers___AppM", "data": {"/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/#Transformers___AppM": {"display": "AppM", "context": ["The Lean Language Reference", "The mvcgen tactic", "Tutorial: Verifying Imperative Programs Using mvcgen", "Monad Transformers and Lifting"]}}, "address": "/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/"}], "Tm.zero (in Coercing to Function Types)": [{"id": "Tm___zero-_LPAR_in-Coercing-to-Function-Types_RPAR_", "data": {"/Coercions/Coercing-to-Function-Types/#Tm___zero-_LPAR_in-Coercing-to-Function-Types_RPAR_": {"display": "zero", "context": ["The Lean Language Reference", "Coercions", "Coercing to Function Types", "Coercing to Function Types"]}}, "address": "/Coercions/Coercing-to-Function-Types/"}], "Tm.var (in Coercing to Function Types)": [{"id": "Tm___var-_LPAR_in-Coercing-to-Function-Types_RPAR_", "data": {"/Coercions/Coercing-to-Function-Types/#Tm___var-_LPAR_in-Coercing-to-Function-Types_RPAR_": {"display": "var", "context": ["The Lean Language Reference", "Coercions", "Coercing to Function Types", "Coercing to Function Types"]}}, "address": "/Coercions/Coercing-to-Function-Types/"}], "Tm.v (in Coercing to Function Types)": [{"id": "Tm___v-_LPAR_in-Coercing-to-Function-Types_RPAR_", "data": {"/Coercions/Coercing-to-Function-Types/#Tm___v-_LPAR_in-Coercing-to-Function-Types_RPAR_": {"display": "Tm.v", "context": ["The Lean Language Reference", "Coercions", "Coercing to Function Types", "Coercing to Function Types"]}}, "address": "/Coercions/Coercing-to-Function-Types/"}], "Tm.succ (in Coercing to Function Types)": [{"id": "Tm___succ-_LPAR_in-Coercing-to-Function-Types_RPAR_", "data": {"/Coercions/Coercing-to-Function-Types/#Tm___succ-_LPAR_in-Coercing-to-Function-Types_RPAR_": {"display": "succ", "context": ["The Lean Language Reference", "Coercions", "Coercing to Function Types", "Coercing to Function Types"]}}, "address": "/Coercions/Coercing-to-Function-Types/"}], "Tm.rep (in Coercing to Function Types)": [{"id": "Tm___rep-_LPAR_in-Coercing-to-Function-Types_RPAR_", "data": {"/Coercions/Coercing-to-Function-Types/#Tm___rep-_LPAR_in-Coercing-to-Function-Types_RPAR_": {"display": "rep", "context": ["The Lean Language Reference", "Coercions", "Coercing to Function Types", "Coercing to Function Types"]}}, "address": "/Coercions/Coercing-to-Function-Types/"}], "Tm.lam (in Coercing to Function Types)": [{"id": "Tm___lam-_LPAR_in-Coercing-to-Function-Types_RPAR_", "data": {"/Coercions/Coercing-to-Function-Types/#Tm___lam-_LPAR_in-Coercing-to-Function-Types_RPAR_": {"display": "lam", "context": ["The Lean Language Reference", "Coercions", "Coercing to Function Types", "Coercing to Function Types"]}}, "address": "/Coercions/Coercing-to-Function-Types/"}], "Tm.interp (in Coercing to Function Types)": [{"id": "Tm___interp-_LPAR_in-Coercing-to-Function-Types_RPAR_", "data": {"/Coercions/Coercing-to-Function-Types/#Tm___interp-_LPAR_in-Coercing-to-Function-Types_RPAR_": {"display": "Tm.interp", "context": ["The Lean Language Reference", "Coercions", "Coercing to Function Types", "Coercing to Function Types"]}}, "address": "/Coercions/Coercing-to-Function-Types/"}], "Tm.app (in Coercing to Function Types)": [{"id": "Tm___app-_LPAR_in-Coercing-to-Function-Types_RPAR_", "data": {"/Coercions/Coercing-to-Function-Types/#Tm___app-_LPAR_in-Coercing-to-Function-Types_RPAR_": {"display": "app", "context": ["The Lean Language Reference", "Coercions", "Coercing to Function Types", "Coercing to Function Types"]}}, "address": "/Coercions/Coercing-to-Function-Types/"}], "Tm (in Mutual strict positivity)": [{"id": "Tm-_LPAR_in-Mutual-strict-positivity_RPAR_", "data": {"/The-Type-System/Inductive-Types/#Tm-_LPAR_in-Mutual-strict-positivity_RPAR_": {"display": "Tm", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Mutual Inductive Types", "Requirements", "Positivity", "Mutual strict positivity"]}}, "address": "/The-Type-System/Inductive-Types/"}], "Tm (in Coercing to Function Types)": [{"id": "Tm-_LPAR_in-Coercing-to-Function-Types_RPAR_", "data": {"/Coercions/Coercing-to-Function-Types/#Tm-_LPAR_in-Coercing-to-Function-Types_RPAR_": {"display": "Tm", "context": ["The Lean Language Reference", "Coercions", "Coercing to Function Types", "Coercing to Function Types"]}}, "address": "/Coercions/Coercing-to-Function-Types/"}], "ThreeChoices.yes (in An instance for a sum class)": [{"id": "ThreeChoices___yes-_LPAR_in-An-instance-for-a-sum-class_RPAR_", "data": {"/Type-Classes/Instance-Declarations/#ThreeChoices___yes-_LPAR_in-An-instance-for-a-sum-class_RPAR_": {"display": "yes", "context": ["The Lean Language Reference", "Type Classes", "Instance Declarations", "Instances of class inductive s", "An instance for a sum class"]}}, "address": "/Type-Classes/Instance-Declarations/"}], "ThreeChoices.no (in An instance for a sum class)": [{"id": "ThreeChoices___no-_LPAR_in-An-instance-for-a-sum-class_RPAR_", "data": {"/Type-Classes/Instance-Declarations/#ThreeChoices___no-_LPAR_in-An-instance-for-a-sum-class_RPAR_": {"display": "no", "context": ["The Lean Language Reference", "Type Classes", "Instance Declarations", "Instances of class inductive s", "An instance for a sum class"]}}, "address": "/Type-Classes/Instance-Declarations/"}], "ThreeChoices.maybe (in An instance for a sum class)": [{"id": "ThreeChoices___maybe-_LPAR_in-An-instance-for-a-sum-class_RPAR_", "data": {"/Type-Classes/Instance-Declarations/#ThreeChoices___maybe-_LPAR_in-An-instance-for-a-sum-class_RPAR_": {"display": "maybe", "context": ["The Lean Language Reference", "Type Classes", "Instance Declarations", "Instances of class inductive s", "An instance for a sum class"]}}, "address": "/Type-Classes/Instance-Declarations/"}], "ThreeChoices (in An instance for a sum class)": [{"id": "ThreeChoices-_LPAR_in-An-instance-for-a-sum-class_RPAR_", "data": {"/Type-Classes/Instance-Declarations/#ThreeChoices-_LPAR_in-An-instance-for-a-sum-class_RPAR_": {"display": "ThreeChoices", "context": ["The Lean Language Reference", "Type Classes", "Instance Declarations", "Instances of class inductive s", "An instance for a sum class"]}}, "address": "/Type-Classes/Instance-Declarations/"}], "Three.mk (in Spuriously mutual types)": [{"id": "Three___mk-_LPAR_in-Spuriously-mutual-types_RPAR_", "data": {"/The-Type-System/Inductive-Types/#Three___mk-_LPAR_in-Spuriously-mutual-types_RPAR_": {"display": "mk", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Mutual Inductive Types", "Recursors", "Spuriously mutual types"]}}, "address": "/The-Type-System/Inductive-Types/"}], "Three (in Spuriously mutual types)": [{"id": "Three-_LPAR_in-Spuriously-mutual-types_RPAR_", "data": {"/The-Type-System/Inductive-Types/#Three-_LPAR_in-Spuriously-mutual-types_RPAR_": {"display": "Three", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Mutual Inductive Types", "Recursors", "Spuriously mutual types"]}}, "address": "/The-Type-System/Inductive-Types/"}], "Textbook (in Structure type inheritance with overlapping fields)": [{"id": "Textbook-_LPAR_in-Structure-type-inheritance-with-overlapping-fields_RPAR_", "data": {"/The-Type-System/Inductive-Types/#Textbook-_LPAR_in-Structure-type-inheritance-with-overlapping-fields_RPAR_": {"display": "Textbook", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Structure Declarations", "Structure Inheritance", "Structure type inheritance with overlapping fields"]}}, "address": "/The-Type-System/Inductive-Types/"}], "T (in Universe polymorphism and definitional equality)": [{"id": "T-_LPAR_in-Universe-polymorphism-and-definitional-equality_RPAR_", "data": {"/The-Type-System/Universes/#T-_LPAR_in-Universe-polymorphism-and-definitional-equality_RPAR_": {"display": "T", "context": ["The Lean Language Reference", "The Type System", "Universes", "Polymorphism", "Universe polymorphism and definitional equality"]}}, "address": "/The-Type-System/Universes/"}], "Supply.counter": [{"id": "Supply___counter", "data": {"/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/#Supply___counter": {"display": "counter", "context": ["The Lean Language Reference", "The mvcgen tactic", "Tutorial: Verifying Imperative Programs Using mvcgen", "Compositional Reasoning About Effectful Programs Using Hoare Triples"]}}, "address": "/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/"}], "Supply": [{"id": "Supply", "data": {"/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/#Supply": {"display": "Supply", "context": ["The Lean Language Reference", "The mvcgen tactic", "Tutorial: Verifying Imperative Programs Using mvcgen", "Compositional Reasoning About Effectful Programs Using Hoare Triples"]}}, "address": "/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/"}], "Sum'.swap (in Dependent Pairs as Sums)": [{"id": "Sum______swap-_LPAR_in-Dependent-Pairs-as-Sums_RPAR_", "data": {"/Basic-Types/Tuples/#Sum______swap-_LPAR_in-Dependent-Pairs-as-Sums_RPAR_": {"display": "Sum'.swap", "context": ["The Lean Language Reference", "Basic Types", "Tuples", "Dependent Pairs", "Dependent Pairs as Sums"]}}, "address": "/Basic-Types/Tuples/"}], "Sum'.inr (in Dependent Pairs as Sums)": [{"id": "Sum______inr-_LPAR_in-Dependent-Pairs-as-Sums_RPAR_", "data": {"/Basic-Types/Tuples/#Sum______inr-_LPAR_in-Dependent-Pairs-as-Sums_RPAR_": {"display": "Sum'.inr", "context": ["The Lean Language Reference", "Basic Types", "Tuples", "Dependent Pairs", "Dependent Pairs as Sums"]}}, "address": "/Basic-Types/Tuples/"}], "Sum'.inl (in Dependent Pairs as Sums)": [{"id": "Sum______inl-_LPAR_in-Dependent-Pairs-as-Sums_RPAR_", "data": {"/Basic-Types/Tuples/#Sum______inl-_LPAR_in-Dependent-Pairs-as-Sums_RPAR_": {"display": "Sum'.inl", "context": ["The Lean Language Reference", "Basic Types", "Tuples", "Dependent Pairs", "Dependent Pairs as Sums"]}}, "address": "/Basic-Types/Tuples/"}], "Sum' (in Dependent Pairs as Sums)": [{"id": "Sum___-_LPAR_in-Dependent-Pairs-as-Sums_RPAR_", "data": {"/Basic-Types/Tuples/#Sum___-_LPAR_in-Dependent-Pairs-as-Sums_RPAR_": {"display": "Sum'", "context": ["The Lean Language Reference", "Basic Types", "Tuples", "Dependent Pairs", "Dependent Pairs as Sums"]}}, "address": "/Basic-Types/Tuples/"}], "Stx.node (in Nested positions)": [{"id": "Stx___node-_LPAR_in-Nested-positions_RPAR_", "data": {"/The-Type-System/Inductive-Types/#Stx___node-_LPAR_in-Nested-positions_RPAR_": {"display": "node", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Mutual Inductive Types", "Requirements", "Positivity", "Nested positions"]}}, "address": "/The-Type-System/Inductive-Types/"}], "Stx.atom (in Nested positions)": [{"id": "Stx___atom-_LPAR_in-Nested-positions_RPAR_", "data": {"/The-Type-System/Inductive-Types/#Stx___atom-_LPAR_in-Nested-positions_RPAR_": {"display": "atom", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Mutual Inductive Types", "Requirements", "Positivity", "Nested positions"]}}, "address": "/The-Type-System/Inductive-Types/"}], "Stx (in Nested positions)": [{"id": "Stx-_LPAR_in-Nested-positions_RPAR_", "data": {"/The-Type-System/Inductive-Types/#Stx-_LPAR_in-Nested-positions_RPAR_": {"display": "Stx", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Mutual Inductive Types", "Requirements", "Positivity", "Nested positions"]}}, "address": "/The-Type-System/Inductive-Types/"}], "StringMonoid (in Sort Coercions)": [{"id": "StringMonoid-_LPAR_in-Sort-Coercions_RPAR_", "data": {"/Coercions/Coercing-to-Sorts/#StringMonoid-_LPAR_in-Sort-Coercions_RPAR_": {"display": "StringMonoid", "context": ["The Lean Language Reference", "Coercions", "Coercing to Sorts", "Sort Coercions"]}}, "address": "/Coercions/Coercing-to-Sorts/"}], "StringList.nil (in A recursive instance for a sum class)": [{"id": "StringList___nil-_LPAR_in-A-recursive-instance-for-a-sum-class_RPAR_", "data": {"/Type-Classes/Instance-Declarations/#StringList___nil-_LPAR_in-A-recursive-instance-for-a-sum-class_RPAR_": {"display": "nil", "context": ["The Lean Language Reference", "Type Classes", "Instance Declarations", "Instances of class inductive s", "A recursive instance for a sum class"]}}, "address": "/Type-Classes/Instance-Declarations/"}], "StringList.cons (in A recursive instance for a sum class)": [{"id": "StringList___cons-_LPAR_in-A-recursive-instance-for-a-sum-class_RPAR_", "data": {"/Type-Classes/Instance-Declarations/#StringList___cons-_LPAR_in-A-recursive-instance-for-a-sum-class_RPAR_": {"display": "cons", "context": ["The Lean Language Reference", "Type Classes", "Instance Declarations", "Instances of class inductive s", "A recursive instance for a sum class"]}}, "address": "/Type-Classes/Instance-Declarations/"}], "StringList (in A recursive instance for a sum class)": [{"id": "StringList-_LPAR_in-A-recursive-instance-for-a-sum-class_RPAR_", "data": {"/Type-Classes/Instance-Declarations/#StringList-_LPAR_in-A-recursive-instance-for-a-sum-class_RPAR_": {"display": "StringList", "context": ["The Lean Language Reference", "Type Classes", "Instance Declarations", "Instances of class inductive s", "A recursive instance for a sum class"]}}, "address": "/Type-Classes/Instance-Declarations/"}], "StateMTriple": [{"id": "StateMTriple", "data": {"/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/#StateMTriple": {"display": "StateMTriple", "context": ["The Lean Language Reference", "The mvcgen tactic", "Tutorial: Verifying Imperative Programs Using mvcgen", "Compositional Reasoning About Effectful Programs Using Hoare Triples", "Hoare Triples"]}}, "address": "/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/"}], "State (in Private Methods)": [{"id": "State-_LPAR_in-Private-Methods_RPAR_", "data": {"/The-Type-System/Inductive-Types/#State-_LPAR_in-Private-Methods_RPAR_-next": {"display": "State", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Structure Declarations", "Structure Constructors", "Private Methods"]}, "/The-Type-System/Inductive-Types/#State-_LPAR_in-Private-Methods_RPAR_": {"display": "State", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Structure Declarations", "Structure Constructors", "Private Methods"]}}, "address": "/The-Type-System/Inductive-Types/"}, {"id": "State-_LPAR_in-Private-Methods_RPAR_-next", "data": {"/The-Type-System/Inductive-Types/#State-_LPAR_in-Private-Methods_RPAR_-next": {"display": "State", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Structure Declarations", "Structure Constructors", "Private Methods"]}, "/The-Type-System/Inductive-Types/#State-_LPAR_in-Private-Methods_RPAR_": {"display": "State", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Structure Declarations", "Structure Constructors", "Private Methods"]}}, "address": "/The-Type-System/Inductive-Types/"}], "Spurious (in Universes, constructors, and parameters)": [{"id": "Spurious-_LPAR_in-Universes___-constructors___-and-parameters_RPAR_", "data": {"/The-Type-System/Inductive-Types/#Spurious-_LPAR_in-Universes___-constructors___-and-parameters_RPAR_": {"display": "Spurious", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Logical Model", "Well-Formedness Requirements", "Universe Levels", "Universes, constructors, and parameters"]}}, "address": "/The-Type-System/Inductive-Types/"}], "Solo.solo (in A unit type)": [{"id": "Solo___solo-_LPAR_in-A-unit-type_RPAR_", "data": {"/The-Type-System/Inductive-Types/#Solo___solo-_LPAR_in-A-unit-type_RPAR_": {"display": "solo", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Inductive Type Declarations", "Example Inductive Types", "A unit type"]}}, "address": "/The-Type-System/Inductive-Types/"}], "Solo.mk (in Custom Unit Type)": [{"id": "Solo___mk-_LPAR_in-Custom-Unit-Type_RPAR_", "data": {"/Notations-and-Macros/Extending-Lean___s-Output/#Solo___mk-_LPAR_in-Custom-Unit-Type_RPAR_": {"display": "mk", "context": ["The Lean Language Reference", "Notations and Macros", "Extending Lean's Output", "Unexpanders", "Custom Unit Type"]}}, "address": "/Notations-and-Macros/Extending-Lean___s-Output/"}], "Solo (in Custom Unit Type)": [{"id": "Solo-_LPAR_in-Custom-Unit-Type_RPAR_", "data": {"/Notations-and-Macros/Extending-Lean___s-Output/#Solo-_LPAR_in-Custom-Unit-Type_RPAR_": {"display": "Solo", "context": ["The Lean Language Reference", "Notations and Macros", "Extending Lean's Output", "Unexpanders", "Custom Unit Type"]}}, "address": "/Notations-and-Macros/Extending-Lean___s-Output/"}], "Solo (in A unit type)": [{"id": "Solo-_LPAR_in-A-unit-type_RPAR_", "data": {"/The-Type-System/Inductive-Types/#Solo-_LPAR_in-A-unit-type_RPAR_": {"display": "Solo", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Inductive Type Declarations", "Example Inductive Types", "A unit type"]}}, "address": "/The-Type-System/Inductive-Types/"}], "SetTree (in Nested Inductive Types and Quotients)": [{"id": "SetTree-_LPAR_in-Nested-Inductive-Types-and-Quotients_RPAR_", "data": {"/The-Type-System/Quotients/#SetTree-_LPAR_in-Nested-Inductive-Types-and-Quotients_RPAR_": {"display": "SetTree", "context": ["The Lean Language Reference", "The Type System", "Quotients", "Logical Model", "Quotients and Inductive Types", "Nested Inductive Types and Quotients"]}}, "address": "/The-Type-System/Quotients/"}], "Serialize.ser (in Output Parameters and Stuck Search)": [{"id": "Serialize___ser-_LPAR_in-Output-Parameters-and-Stuck-Search_RPAR_", "data": {"/Type-Classes/Instance-Synthesis/#Serialize___ser-_LPAR_in-Output-Parameters-and-Stuck-Search_RPAR_-next": {"display": "ser", "context": ["The Lean Language Reference", "Type Classes", "Instance Synthesis", "Output Parameters", "Output Parameters and Stuck Search"]}, "/Type-Classes/Instance-Synthesis/#Serialize___ser-_LPAR_in-Output-Parameters-and-Stuck-Search_RPAR_": {"display": "ser", "context": ["The Lean Language Reference", "Type Classes", "Instance Synthesis", "Output Parameters", "Output Parameters and Stuck Search"]}}, "address": "/Type-Classes/Instance-Synthesis/"}, {"id": "Serialize___ser-_LPAR_in-Output-Parameters-and-Stuck-Search_RPAR_-next", "data": {"/Type-Classes/Instance-Synthesis/#Serialize___ser-_LPAR_in-Output-Parameters-and-Stuck-Search_RPAR_-next": {"display": "ser", "context": ["The Lean Language Reference", "Type Classes", "Instance Synthesis", "Output Parameters", "Output Parameters and Stuck Search"]}, "/Type-Classes/Instance-Synthesis/#Serialize___ser-_LPAR_in-Output-Parameters-and-Stuck-Search_RPAR_": {"display": "ser", "context": ["The Lean Language Reference", "Type Classes", "Instance Synthesis", "Output Parameters", "Output Parameters and Stuck Search"]}}, "address": "/Type-Classes/Instance-Synthesis/"}], "Serialize (in Output Parameters and Stuck Search)": [{"id": "Serialize-_LPAR_in-Output-Parameters-and-Stuck-Search_RPAR_-next", "data": {"/Type-Classes/Instance-Synthesis/#Serialize-_LPAR_in-Output-Parameters-and-Stuck-Search_RPAR_-next": {"display": "Serialize", "context": ["The Lean Language Reference", "Type Classes", "Instance Synthesis", "Output Parameters", "Output Parameters and Stuck Search"]}, "/Type-Classes/Instance-Synthesis/#Serialize-_LPAR_in-Output-Parameters-and-Stuck-Search_RPAR_": {"display": "Serialize", "context": ["The Lean Language Reference", "Type Classes", "Instance Synthesis", "Output Parameters", "Output Parameters and Stuck Search"]}}, "address": "/Type-Classes/Instance-Synthesis/"}, {"id": "Serialize-_LPAR_in-Output-Parameters-and-Stuck-Search_RPAR_", "data": {"/Type-Classes/Instance-Synthesis/#Serialize-_LPAR_in-Output-Parameters-and-Stuck-Search_RPAR_-next": {"display": "Serialize", "context": ["The Lean Language Reference", "Type Classes", "Instance Synthesis", "Output Parameters", "Output Parameters and Stuck Search"]}, "/Type-Classes/Instance-Synthesis/#Serialize-_LPAR_in-Output-Parameters-and-Stuck-Search_RPAR_": {"display": "Serialize", "context": ["The Lean Language Reference", "Type Classes", "Instance Synthesis", "Output Parameters", "Output Parameters and Stuck Search"]}}, "address": "/Type-Classes/Instance-Synthesis/"}], "Sequence.ofList (in Reducibility and Generalized Field Notation)": [{"id": "Sequence___ofList-_LPAR_in-Reducibility-and-Generalized-Field-Notation_RPAR_", "data": {"/Definitions/Recursive-Definitions/#Sequence___ofList-_LPAR_in-Reducibility-and-Generalized-Field-Notation_RPAR_": {"display": "Sequence.ofList", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Controlling Reduction", "Reducibility and Generalized Field Notation"]}}, "address": "/Definitions/Recursive-Definitions/"}], "Sequence (in Reducibility and Generalized Field Notation)": [{"id": "Sequence-_LPAR_in-Reducibility-and-Generalized-Field-Notation_RPAR_", "data": {"/Definitions/Recursive-Definitions/#Sequence-_LPAR_in-Reducibility-and-Generalized-Field-Notation_RPAR_": {"display": "Sequence", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Controlling Reduction", "Reducibility and Generalized Field Notation"]}}, "address": "/Definitions/Recursive-Definitions/"}], "S.usize_2": [{"id": "S___usize_2", "data": {"/The-Type-System/Inductive-Types/#S___usize_2": {"display": "usize_2", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Run-Time Representation", "Other Inductive Types", "FFI"]}}, "address": "/The-Type-System/Inductive-Types/"}], "S.usize_1": [{"id": "S___usize_1", "data": {"/The-Type-System/Inductive-Types/#S___usize_1": {"display": "usize_1", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Run-Time Representation", "Other Inductive Types", "FFI"]}}, "address": "/The-Type-System/Inductive-Types/"}], "S.sc8_2": [{"id": "S___sc8_2", "data": {"/The-Type-System/Inductive-Types/#S___sc8_2": {"display": "sc8_2", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Run-Time Representation", "Other Inductive Types", "FFI"]}}, "address": "/The-Type-System/Inductive-Types/"}], "S.sc8_1": [{"id": "S___sc8_1", "data": {"/The-Type-System/Inductive-Types/#S___sc8_1": {"display": "sc8_1", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Run-Time Representation", "Other Inductive Types", "FFI"]}}, "address": "/The-Type-System/Inductive-Types/"}], "S.sc64_3": [{"id": "S___sc64_3", "data": {"/The-Type-System/Inductive-Types/#S___sc64_3": {"display": "sc64_3", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Run-Time Representation", "Other Inductive Types", "FFI"]}}, "address": "/The-Type-System/Inductive-Types/"}], "S.sc64_2": [{"id": "S___sc64_2", "data": {"/The-Type-System/Inductive-Types/#S___sc64_2": {"display": "sc64_2", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Run-Time Representation", "Other Inductive Types", "FFI"]}}, "address": "/The-Type-System/Inductive-Types/"}], "S.sc64_1": [{"id": "S___sc64_1", "data": {"/The-Type-System/Inductive-Types/#S___sc64_1": {"display": "sc64_1", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Run-Time Representation", "Other Inductive Types", "FFI"]}}, "address": "/The-Type-System/Inductive-Types/"}], "S.sc32_1": [{"id": "S___sc32_1", "data": {"/The-Type-System/Inductive-Types/#S___sc32_1": {"display": "sc32_1", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Run-Time Representation", "Other Inductive Types", "FFI"]}}, "address": "/The-Type-System/Inductive-Types/"}], "S.sc16_2": [{"id": "S___sc16_2", "data": {"/The-Type-System/Inductive-Types/#S___sc16_2": {"display": "sc16_2", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Run-Time Representation", "Other Inductive Types", "FFI"]}}, "address": "/The-Type-System/Inductive-Types/"}], "S.sc16_1": [{"id": "S___sc16_1", "data": {"/The-Type-System/Inductive-Types/#S___sc16_1": {"display": "sc16_1", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Run-Time Representation", "Other Inductive Types", "FFI"]}}, "address": "/The-Type-System/Inductive-Types/"}], "S.ptr_3": [{"id": "S___ptr_3", "data": {"/The-Type-System/Inductive-Types/#S___ptr_3": {"display": "ptr_3", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Run-Time Representation", "Other Inductive Types", "FFI"]}}, "address": "/The-Type-System/Inductive-Types/"}], "S.ptr_2": [{"id": "S___ptr_2", "data": {"/The-Type-System/Inductive-Types/#S___ptr_2": {"display": "ptr_2", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Run-Time Representation", "Other Inductive Types", "FFI"]}}, "address": "/The-Type-System/Inductive-Types/"}], "S.ptr_1": [{"id": "S___ptr_1", "data": {"/The-Type-System/Inductive-Types/#S___ptr_1": {"display": "ptr_1", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Run-Time Representation", "Other Inductive Types", "FFI"]}}, "address": "/The-Type-System/Inductive-Types/"}], "S.Semigroup.op_assoc (in Class vs Structure Constructors)": [{"id": "S___Semigroup___op_assoc-_LPAR_in-Class-vs-Structure-Constructors_RPAR_", "data": {"/Type-Classes/Class-Declarations/#S___Semigroup___op_assoc-_LPAR_in-Class-vs-Structure-Constructors_RPAR_": {"display": "op_assoc", "context": ["The Lean Language Reference", "Type Classes", "Class Declarations", "Class vs Structure Constructors"]}}, "address": "/Type-Classes/Class-Declarations/"}], "S.Semigroup (in Class vs Structure Constructors)": [{"id": "S___Semigroup-_LPAR_in-Class-vs-Structure-Constructors_RPAR_", "data": {"/Type-Classes/Class-Declarations/#S___Semigroup-_LPAR_in-Class-vs-Structure-Constructors_RPAR_": {"display": "Semigroup", "context": ["The Lean Language Reference", "Type Classes", "Class Declarations", "Class vs Structure Constructors"]}}, "address": "/Type-Classes/Class-Declarations/"}], "S.Monoid.ident_right (in Class vs Structure Constructors)": [{"id": "S___Monoid___ident_right-_LPAR_in-Class-vs-Structure-Constructors_RPAR_", "data": {"/Type-Classes/Class-Declarations/#S___Monoid___ident_right-_LPAR_in-Class-vs-Structure-Constructors_RPAR_": {"display": "ident_right", "context": ["The Lean Language Reference", "Type Classes", "Class Declarations", "Class vs Structure Constructors"]}}, "address": "/Type-Classes/Class-Declarations/"}], "S.Monoid.ident_left (in Class vs Structure Constructors)": [{"id": "S___Monoid___ident_left-_LPAR_in-Class-vs-Structure-Constructors_RPAR_", "data": {"/Type-Classes/Class-Declarations/#S___Monoid___ident_left-_LPAR_in-Class-vs-Structure-Constructors_RPAR_": {"display": "ident_left", "context": ["The Lean Language Reference", "Type Classes", "Class Declarations", "Class vs Structure Constructors"]}}, "address": "/Type-Classes/Class-Declarations/"}], "S.Monoid.ident (in Class vs Structure Constructors)": [{"id": "S___Monoid___ident-_LPAR_in-Class-vs-Structure-Constructors_RPAR_", "data": {"/Type-Classes/Class-Declarations/#S___Monoid___ident-_LPAR_in-Class-vs-Structure-Constructors_RPAR_": {"display": "ident", "context": ["The Lean Language Reference", "Type Classes", "Class Declarations", "Class vs Structure Constructors"]}}, "address": "/Type-Classes/Class-Declarations/"}], "S.Monoid (in Class vs Structure Constructors)": [{"id": "S___Monoid-_LPAR_in-Class-vs-Structure-Constructors_RPAR_", "data": {"/Type-Classes/Class-Declarations/#S___Monoid-_LPAR_in-Class-vs-Structure-Constructors_RPAR_": {"display": "Monoid", "context": ["The Lean Language Reference", "Type Classes", "Class Declarations", "Class vs Structure Constructors"]}}, "address": "/Type-Classes/Class-Declarations/"}], "S.Magma.op (in Class vs Structure Constructors)": [{"id": "S___Magma___op-_LPAR_in-Class-vs-Structure-Constructors_RPAR_", "data": {"/Type-Classes/Class-Declarations/#S___Magma___op-_LPAR_in-Class-vs-Structure-Constructors_RPAR_": {"display": "op", "context": ["The Lean Language Reference", "Type Classes", "Class Declarations", "Class vs Structure Constructors"]}}, "address": "/Type-Classes/Class-Declarations/"}], "S.Magma (in Class vs Structure Constructors)": [{"id": "S___Magma-_LPAR_in-Class-vs-Structure-Constructors_RPAR_", "data": {"/Type-Classes/Class-Declarations/#S___Magma-_LPAR_in-Class-vs-Structure-Constructors_RPAR_": {"display": "Magma", "context": ["The Lean Language Reference", "Type Classes", "Class Declarations", "Class vs Structure Constructors"]}}, "address": "/Type-Classes/Class-Declarations/"}], "S": [{"id": "S", "data": {"/The-Type-System/Inductive-Types/#S": {"display": "S", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Run-Time Representation", "Other Inductive Types", "FFI"]}}, "address": "/The-Type-System/Inductive-Types/"}], "RunsMatch (in Universe mismatch)": [{"id": "RunsMatch-_LPAR_in-Universe-mismatch_RPAR_", "data": {"/The-Type-System/Inductive-Types/#RunsMatch-_LPAR_in-Universe-mismatch_RPAR_": {"display": "RunsMatch", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Mutual Inductive Types", "Requirements", "Universe Levels", "Universe mismatch"]}}, "address": "/The-Type-System/Inductive-Types/"}], "RunLengths (in Universe mismatch)": [{"id": "RunLengths-_LPAR_in-Universe-mismatch_RPAR_", "data": {"/The-Type-System/Inductive-Types/#RunLengths-_LPAR_in-Universe-mismatch_RPAR_": {"display": "RunLengths", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Mutual Inductive Types", "Requirements", "Universe Levels", "Universe mismatch"]}}, "address": "/The-Type-System/Inductive-Types/"}], "Rtrans (in Multi-Patterns)": [{"id": "Rtrans-_LPAR_in-Multi-Patterns_RPAR_", "data": {"/The--grind--tactic/E___matching/#Rtrans-_LPAR_in-Multi-Patterns_RPAR_": {"display": "Rtrans", "context": ["The Lean Language Reference", "The grind tactic", "E‑matching", "Patterns", "Multi-Patterns"]}}, "address": "/The--grind--tactic/E___matching/"}], "RoseTree.leaf (in Nested Inductive Types and Quotients)": [{"id": "RoseTree___leaf-_LPAR_in-Nested-Inductive-Types-and-Quotients_RPAR_", "data": {"/The-Type-System/Quotients/#RoseTree___leaf-_LPAR_in-Nested-Inductive-Types-and-Quotients_RPAR_": {"display": "leaf", "context": ["The Lean Language Reference", "The Type System", "Quotients", "Logical Model", "Quotients and Inductive Types", "Nested Inductive Types and Quotients"]}}, "address": "/The-Type-System/Quotients/"}], "RoseTree.branch (in Nested Inductive Types and Quotients)": [{"id": "RoseTree___branch-_LPAR_in-Nested-Inductive-Types-and-Quotients_RPAR_", "data": {"/The-Type-System/Quotients/#RoseTree___branch-_LPAR_in-Nested-Inductive-Types-and-Quotients_RPAR_": {"display": "branch", "context": ["The Lean Language Reference", "The Type System", "Quotients", "Logical Model", "Quotients and Inductive Types", "Nested Inductive Types and Quotients"]}}, "address": "/The-Type-System/Quotients/"}], "RoseTree (in Nested Inductive Types and Quotients)": [{"id": "RoseTree-_LPAR_in-Nested-Inductive-Types-and-Quotients_RPAR_", "data": {"/The-Type-System/Quotients/#RoseTree-_LPAR_in-Nested-Inductive-Types-and-Quotients_RPAR_": {"display": "RoseTree", "context": ["The Lean Language Reference", "The Type System", "Quotients", "Logical Model", "Quotients and Inductive Types", "Nested Inductive Types and Quotients"]}}, "address": "/The-Type-System/Quotients/"}], "Result.throw_spec": [{"id": "Result___throw_spec", "data": {"/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/#Result___throw_spec": {"display": "Result.throw_spec", "context": ["The Lean Language Reference", "The mvcgen tactic", "Tutorial: Verifying Imperative Programs Using mvcgen", "Extending mvcgen With Support for Custom Monads"]}}, "address": "/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/"}], "Result.ok": [{"id": "Result___ok", "data": {"/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/#Result___ok": {"display": "ok", "context": ["The Lean Language Reference", "The mvcgen tactic", "Tutorial: Verifying Imperative Programs Using mvcgen", "Extending mvcgen With Support for Custom Monads"]}}, "address": "/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/"}], "Result.of_wp": [{"id": "Result___of_wp", "data": {"/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/#Result___of_wp": {"display": "Result.of_wp", "context": ["The Lean Language Reference", "The mvcgen tactic", "Tutorial: Verifying Imperative Programs Using mvcgen", "Extending mvcgen With Support for Custom Monads"]}}, "address": "/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/"}], "Result.instWP": [{"id": "Result___instWP", "data": {"/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/#Result___instWP": {"display": "Result.instWP", "context": ["The Lean Language Reference", "The mvcgen tactic", "Tutorial: Verifying Imperative Programs Using mvcgen", "Extending mvcgen With Support for Custom Monads"]}}, "address": "/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/"}], "Result.fail": [{"id": "Result___fail", "data": {"/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/#Result___fail": {"display": "fail", "context": ["The Lean Language Reference", "The mvcgen tactic", "Tutorial: Verifying Imperative Programs Using mvcgen", "Extending mvcgen With Support for Custom Monads"]}}, "address": "/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/"}], "Result.div": [{"id": "Result___div", "data": {"/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/#Result___div": {"display": "div", "context": ["The Lean Language Reference", "The mvcgen tactic", "Tutorial: Verifying Imperative Programs Using mvcgen", "Extending mvcgen With Support for Custom Monads"]}}, "address": "/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/"}], "Result": [{"id": "Result", "data": {"/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/#Result": {"display": "Result", "context": ["The Lean Language Reference", "The mvcgen tactic", "Tutorial: Verifying Imperative Programs Using mvcgen", "Extending mvcgen With Support for Custom Monads"]}}, "address": "/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/"}], "RawMaze.passages (in Nested Inductive Types with Std.HashMap)": [{"id": "RawMaze___passages-_LPAR_in-Nested-Inductive-Types-with--Std___HashMap_RPAR_", "data": {"/Basic-Types/Maps-and-Sets/#RawMaze___passages-_LPAR_in-Nested-Inductive-Types-with--Std___HashMap_RPAR_": {"display": "passages", "context": ["The Lean Language Reference", "Basic Types", "Maps and Sets", "Library Design", "Raw Data and Invariants", "Nested Inductive Types with Std.HashMap"]}}, "address": "/Basic-Types/Maps-and-Sets/"}], "RawMaze.insert_wf (in Nested Inductive Types with Std.HashMap)": [{"id": "RawMaze___insert_wf-_LPAR_in-Nested-Inductive-Types-with--Std___HashMap_RPAR_", "data": {"/Basic-Types/Maps-and-Sets/#RawMaze___insert_wf-_LPAR_in-Nested-Inductive-Types-with--Std___HashMap_RPAR_": {"display": "RawMaze.insert_wf", "context": ["The Lean Language Reference", "Basic Types", "Maps and Sets", "Library Design", "Raw Data and Invariants", "Nested Inductive Types with Std.HashMap"]}}, "address": "/Basic-Types/Maps-and-Sets/"}], "RawMaze.insert (in Nested Inductive Types with Std.HashMap)": [{"id": "RawMaze___insert-_LPAR_in-Nested-Inductive-Types-with--Std___HashMap_RPAR_", "data": {"/Basic-Types/Maps-and-Sets/#RawMaze___insert-_LPAR_in-Nested-Inductive-Types-with--Std___HashMap_RPAR_": {"display": "RawMaze.insert", "context": ["The Lean Language Reference", "Basic Types", "Maps and Sets", "Library Design", "Raw Data and Invariants", "Nested Inductive Types with Std.HashMap"]}}, "address": "/Basic-Types/Maps-and-Sets/"}], "RawMaze.description (in Nested Inductive Types with Std.HashMap)": [{"id": "RawMaze___description-_LPAR_in-Nested-Inductive-Types-with--Std___HashMap_RPAR_", "data": {"/Basic-Types/Maps-and-Sets/#RawMaze___description-_LPAR_in-Nested-Inductive-Types-with--Std___HashMap_RPAR_": {"display": "description", "context": ["The Lean Language Reference", "Basic Types", "Maps and Sets", "Library Design", "Raw Data and Invariants", "Nested Inductive Types with Std.HashMap"]}}, "address": "/Basic-Types/Maps-and-Sets/"}], "RawMaze.base_wf (in Nested Inductive Types with Std.HashMap)": [{"id": "RawMaze___base_wf-_LPAR_in-Nested-Inductive-Types-with--Std___HashMap_RPAR_", "data": {"/Basic-Types/Maps-and-Sets/#RawMaze___base_wf-_LPAR_in-Nested-Inductive-Types-with--Std___HashMap_RPAR_": {"display": "RawMaze.base_wf", "context": ["The Lean Language Reference", "Basic Types", "Maps and Sets", "Library Design", "Raw Data and Invariants", "Nested Inductive Types with Std.HashMap"]}}, "address": "/Basic-Types/Maps-and-Sets/"}], "RawMaze.base (in Nested Inductive Types with Std.HashMap)": [{"id": "RawMaze___base-_LPAR_in-Nested-Inductive-Types-with--Std___HashMap_RPAR_", "data": {"/Basic-Types/Maps-and-Sets/#RawMaze___base-_LPAR_in-Nested-Inductive-Types-with--Std___HashMap_RPAR_": {"display": "RawMaze.base", "context": ["The Lean Language Reference", "Basic Types", "Maps and Sets", "Library Design", "Raw Data and Invariants", "Nested Inductive Types with Std.HashMap"]}}, "address": "/Basic-Types/Maps-and-Sets/"}], "RawMaze.WF.mk (in Nested Inductive Types with Std.HashMap)": [{"id": "RawMaze___WF___mk-_LPAR_in-Nested-Inductive-Types-with--Std___HashMap_RPAR_", "data": {"/Basic-Types/Maps-and-Sets/#RawMaze___WF___mk-_LPAR_in-Nested-Inductive-Types-with--Std___HashMap_RPAR_": {"display": "mk", "context": ["The Lean Language Reference", "Basic Types", "Maps and Sets", "Library Design", "Raw Data and Invariants", "Nested Inductive Types with Std.HashMap"]}}, "address": "/Basic-Types/Maps-and-Sets/"}], "RawMaze.WF (in Nested Inductive Types with Std.HashMap)": [{"id": "RawMaze___WF-_LPAR_in-Nested-Inductive-Types-with--Std___HashMap_RPAR_", "data": {"/Basic-Types/Maps-and-Sets/#RawMaze___WF-_LPAR_in-Nested-Inductive-Types-with--Std___HashMap_RPAR_": {"display": "RawMaze.WF", "context": ["The Lean Language Reference", "Basic Types", "Maps and Sets", "Library Design", "Raw Data and Invariants", "Nested Inductive Types with Std.HashMap"]}}, "address": "/Basic-Types/Maps-and-Sets/"}], "RawMaze (in Nested Inductive Types with Std.HashMap)": [{"id": "RawMaze-_LPAR_in-Nested-Inductive-Types-with--Std___HashMap_RPAR_", "data": {"/Basic-Types/Maps-and-Sets/#RawMaze-_LPAR_in-Nested-Inductive-Types-with--Std___HashMap_RPAR_": {"display": "RawMaze", "context": ["The Lean Language Reference", "Basic Types", "Maps and Sets", "Library Design", "Raw Data and Invariants", "Nested Inductive Types with Std.HashMap"]}}, "address": "/Basic-Types/Maps-and-Sets/"}], "RTree.node (in Nested Inductive Types)": [{"id": "RTree___node-_LPAR_in-Nested-Inductive-Types_RPAR_", "data": {"/The-Type-System/Inductive-Types/#RTree___node-_LPAR_in-Nested-Inductive-Types_RPAR_": {"display": "node", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Mutual Inductive Types", "Nested Inductive Types", "Nested Inductive Types"]}}, "address": "/The-Type-System/Inductive-Types/"}], "RTree.empty (in Nested Inductive Types)": [{"id": "RTree___empty-_LPAR_in-Nested-Inductive-Types_RPAR_", "data": {"/The-Type-System/Inductive-Types/#RTree___empty-_LPAR_in-Nested-Inductive-Types_RPAR_": {"display": "empty", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Mutual Inductive Types", "Nested Inductive Types", "Nested Inductive Types"]}}, "address": "/The-Type-System/Inductive-Types/"}], "RTree'' (in Invalid Nested Inductive Types)": [{"id": "RTree______-_LPAR_in-Invalid-Nested-Inductive-Types_RPAR_", "data": {"/The-Type-System/Inductive-Types/#RTree______-_LPAR_in-Invalid-Nested-Inductive-Types_RPAR_": {"display": "RTree''", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Mutual Inductive Types", "Nested Inductive Types", "Invalid Nested Inductive Types"]}}, "address": "/The-Type-System/Inductive-Types/"}], "RTree (in Nested Inductive Types)": [{"id": "RTree-_LPAR_in-Nested-Inductive-Types_RPAR_", "data": {"/The-Type-System/Inductive-Types/#RTree-_LPAR_in-Nested-Inductive-Types_RPAR_": {"display": "RTree", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Mutual Inductive Types", "Nested Inductive Types", "Nested Inductive Types"]}}, "address": "/The-Type-System/Inductive-Types/"}], "RTree (in Invalid Nested Inductive Types)": [{"id": "RTree-_LPAR_in-Invalid-Nested-Inductive-Types_RPAR_", "data": {"/The-Type-System/Inductive-Types/#RTree-_LPAR_in-Invalid-Nested-Inductive-Types_RPAR_": {"display": "RTree", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Mutual Inductive Types", "Nested Inductive Types", "Invalid Nested Inductive Types"]}}, "address": "/The-Type-System/Inductive-Types/"}], "RLE.runsMatch (in Universe mismatch)": [{"id": "RLE___runsMatch-_LPAR_in-Universe-mismatch_RPAR_", "data": {"/The-Type-System/Inductive-Types/#RLE___runsMatch-_LPAR_in-Universe-mismatch_RPAR_": {"display": "runsMatch", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Mutual Inductive Types", "Requirements", "Universe Levels", "Universe mismatch"]}}, "address": "/The-Type-System/Inductive-Types/"}], "RLE.run (in Universe mismatch)": [{"id": "RLE___run-_LPAR_in-Universe-mismatch_RPAR_", "data": {"/The-Type-System/Inductive-Types/#RLE___run-_LPAR_in-Universe-mismatch_RPAR_": {"display": "run", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Mutual Inductive Types", "Requirements", "Universe Levels", "Universe mismatch"]}}, "address": "/The-Type-System/Inductive-Types/"}], "RLE.rle (in Universe mismatch)": [{"id": "RLE___rle-_LPAR_in-Universe-mismatch_RPAR_", "data": {"/The-Type-System/Inductive-Types/#RLE___rle-_LPAR_in-Universe-mismatch_RPAR_": {"display": "rle", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Mutual Inductive Types", "Requirements", "Universe Levels", "Universe mismatch"]}}, "address": "/The-Type-System/Inductive-Types/"}], "RLE.nonZero (in Universe mismatch)": [{"id": "RLE___nonZero-_LPAR_in-Universe-mismatch_RPAR_", "data": {"/The-Type-System/Inductive-Types/#RLE___nonZero-_LPAR_in-Universe-mismatch_RPAR_": {"display": "nonZero", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Mutual Inductive Types", "Requirements", "Universe Levels", "Universe mismatch"]}}, "address": "/The-Type-System/Inductive-Types/"}], "RLE.noRepeats (in Universe mismatch)": [{"id": "RLE___noRepeats-_LPAR_in-Universe-mismatch_RPAR_", "data": {"/The-Type-System/Inductive-Types/#RLE___noRepeats-_LPAR_in-Universe-mismatch_RPAR_": {"display": "noRepeats", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Mutual Inductive Types", "Requirements", "Universe Levels", "Universe mismatch"]}}, "address": "/The-Type-System/Inductive-Types/"}], "RLE.nil (in Universe mismatch)": [{"id": "RLE___nil-_LPAR_in-Universe-mismatch_RPAR_", "data": {"/The-Type-System/Inductive-Types/#RLE___nil-_LPAR_in-Universe-mismatch_RPAR_": {"display": "nil", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Mutual Inductive Types", "Requirements", "Universe Levels", "Universe mismatch"]}}, "address": "/The-Type-System/Inductive-Types/"}], "RLE (in Universe mismatch)": [{"id": "RLE-_LPAR_in-Universe-mismatch_RPAR_-next", "data": {"/The-Type-System/Inductive-Types/#RLE-_LPAR_in-Universe-mismatch_RPAR_-next": {"display": "RLE", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Mutual Inductive Types", "Requirements", "Universe Levels", "Universe mismatch"]}, "/The-Type-System/Inductive-Types/#RLE-_LPAR_in-Universe-mismatch_RPAR_": {"display": "RLE", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Mutual Inductive Types", "Requirements", "Universe Levels", "Universe mismatch"]}}, "address": "/The-Type-System/Inductive-Types/"}, {"id": "RLE-_LPAR_in-Universe-mismatch_RPAR_", "data": {"/The-Type-System/Inductive-Types/#RLE-_LPAR_in-Universe-mismatch_RPAR_-next": {"display": "RLE", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Mutual Inductive Types", "Requirements", "Universe Levels", "Universe mismatch"]}, "/The-Type-System/Inductive-Types/#RLE-_LPAR_in-Universe-mismatch_RPAR_": {"display": "RLE", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Mutual Inductive Types", "Requirements", "Universe Levels", "Universe mismatch"]}}, "address": "/The-Type-System/Inductive-Types/"}], "R (in Multi-Patterns)": [{"id": "R-_LPAR_in-Multi-Patterns_RPAR_", "data": {"/The--grind--tactic/E___matching/#R-_LPAR_in-Multi-Patterns_RPAR_": {"display": "R", "context": ["The Lean Language Reference", "The grind tactic", "E‑matching", "Patterns", "Multi-Patterns"]}}, "address": "/The--grind--tactic/E___matching/"}], "R": [{"id": "R", "data": {"/The--grind--tactic/Bigger-Examples/#R": {"display": "R", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "Integrating grind 's Features"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}], "Quadrant.sw (in Displaying Output)": [{"id": "Quadrant___sw-_LPAR_in-Displaying-Output_RPAR_", "data": {"/Interacting-with-Lean/#Quadrant___sw-_LPAR_in-Displaying-Output_RPAR_": {"display": "sw", "context": ["The Lean Language Reference", "Interacting with Lean", "Evaluating Terms", "Displaying Output"]}}, "address": "/Interacting-with-Lean/"}], "Quadrant.se (in Displaying Output)": [{"id": "Quadrant___se-_LPAR_in-Displaying-Output_RPAR_", "data": {"/Interacting-with-Lean/#Quadrant___se-_LPAR_in-Displaying-Output_RPAR_": {"display": "se", "context": ["The Lean Language Reference", "Interacting with Lean", "Evaluating Terms", "Displaying Output"]}}, "address": "/Interacting-with-Lean/"}], "Quadrant.nw (in Displaying Output)": [{"id": "Quadrant___nw-_LPAR_in-Displaying-Output_RPAR_", "data": {"/Interacting-with-Lean/#Quadrant___nw-_LPAR_in-Displaying-Output_RPAR_": {"display": "nw", "context": ["The Lean Language Reference", "Interacting with Lean", "Evaluating Terms", "Displaying Output"]}}, "address": "/Interacting-with-Lean/"}], "Quadrant.ne (in Displaying Output)": [{"id": "Quadrant___ne-_LPAR_in-Displaying-Output_RPAR_", "data": {"/Interacting-with-Lean/#Quadrant___ne-_LPAR_in-Displaying-Output_RPAR_": {"display": "ne", "context": ["The Lean Language Reference", "Interacting with Lean", "Evaluating Terms", "Displaying Output"]}}, "address": "/Interacting-with-Lean/"}], "Quadrant (in Displaying Output)": [{"id": "Quadrant-_LPAR_in-Displaying-Output_RPAR_", "data": {"/Interacting-with-Lean/#Quadrant-_LPAR_in-Displaying-Output_RPAR_": {"display": "Quadrant", "context": ["The Lean Language Reference", "Interacting with Lean", "Evaluating Terms", "Displaying Output"]}}, "address": "/Interacting-with-Lean/"}], "ProofUnitLike.mk (in Definitional Equality of Unit-Like Types)": [{"id": "ProofUnitLike___mk-_LPAR_in-Definitional-Equality-of-Unit-Like-Types_RPAR_", "data": {"/Basic-Types/The-Unit-Type/#ProofUnitLike___mk-_LPAR_in-Definitional-Equality-of-Unit-Like-Types_RPAR_": {"display": "mk", "context": ["The Lean Language Reference", "Basic Types", "The Unit Type", "Definitional Equality", "Definitional Equality of Unit-Like Types"]}}, "address": "/Basic-Types/The-Unit-Type/"}], "ProofUnitLike (in Definitional Equality of Unit-Like Types)": [{"id": "ProofUnitLike-_LPAR_in-Definitional-Equality-of-Unit-Like-Types_RPAR_", "data": {"/Basic-Types/The-Unit-Type/#ProofUnitLike-_LPAR_in-Definitional-Equality-of-Unit-Like-Types_RPAR_": {"display": "ProofUnitLike", "context": ["The Lean Language Reference", "Basic Types", "The Unit Type", "Definitional Equality", "Definitional Equality of Unit-Like Types"]}}, "address": "/Basic-Types/The-Unit-Type/"}], "PrefixRunOf.zero (in Universe mismatch)": [{"id": "PrefixRunOf___zero-_LPAR_in-Universe-mismatch_RPAR_", "data": {"/The-Type-System/Inductive-Types/#PrefixRunOf___zero-_LPAR_in-Universe-mismatch_RPAR_": {"display": "zero", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Mutual Inductive Types", "Requirements", "Universe Levels", "Universe mismatch"]}}, "address": "/The-Type-System/Inductive-Types/"}], "PrefixRunOf.succ (in Universe mismatch)": [{"id": "PrefixRunOf___succ-_LPAR_in-Universe-mismatch_RPAR_", "data": {"/The-Type-System/Inductive-Types/#PrefixRunOf___succ-_LPAR_in-Universe-mismatch_RPAR_": {"display": "succ", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Mutual Inductive Types", "Requirements", "Universe Levels", "Universe mismatch"]}}, "address": "/The-Type-System/Inductive-Types/"}], "PrefixRunOf (in Universe mismatch)": [{"id": "PrefixRunOf-_LPAR_in-Universe-mismatch_RPAR_", "data": {"/The-Type-System/Inductive-Types/#PrefixRunOf-_LPAR_in-Universe-mismatch_RPAR_": {"display": "PrefixRunOf", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Mutual Inductive Types", "Requirements", "Universe Levels", "Universe mismatch"]}}, "address": "/The-Type-System/Inductive-Types/"}], "PostShape.args": [{"id": "PostShape___args", "data": {"/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/#PostShape___args": {"display": "PostShape.args", "context": ["The Lean Language Reference", "The mvcgen tactic", "Tutorial: Verifying Imperative Programs Using mvcgen", "Proof Mode for Stateful Goals"]}}, "address": "/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/"}], "Point.y (in The @[grind ext] Attribute)": [{"id": "Point___y-_LPAR_in-The--____LSQ_grind-ext_RSQ_--Attribute_RPAR_", "data": {"/The--grind--tactic/E___matching/#Point___y-_LPAR_in-The--____LSQ_grind-ext_RSQ_--Attribute_RPAR_": {"display": "y", "context": ["The Lean Language Reference", "The grind tactic", "E‑matching", "Patterns", "The @[grind ext] Attribute"]}}, "address": "/The--grind--tactic/E___matching/"}], "Point.x (in The @[grind ext] Attribute)": [{"id": "Point___x-_LPAR_in-The--____LSQ_grind-ext_RSQ_--Attribute_RPAR_", "data": {"/The--grind--tactic/E___matching/#Point___x-_LPAR_in-The--____LSQ_grind-ext_RSQ_--Attribute_RPAR_": {"display": "x", "context": ["The Lean Language Reference", "The grind tactic", "E‑matching", "Patterns", "The @[grind ext] Attribute"]}}, "address": "/The--grind--tactic/E___matching/"}], "Point.swap (in The @[grind ext] Attribute)": [{"id": "Point___swap-_LPAR_in-The--____LSQ_grind-ext_RSQ_--Attribute_RPAR_", "data": {"/The--grind--tactic/E___matching/#Point___swap-_LPAR_in-The--____LSQ_grind-ext_RSQ_--Attribute_RPAR_": {"display": "Point.swap", "context": ["The Lean Language Reference", "The grind tactic", "E‑matching", "Patterns", "The @[grind ext] Attribute"]}}, "address": "/The--grind--tactic/E___matching/"}], "Point (in The @[grind ext] Attribute)": [{"id": "Point-_LPAR_in-The--____LSQ_grind-ext_RSQ_--Attribute_RPAR_", "data": {"/The--grind--tactic/E___matching/#Point-_LPAR_in-The--____LSQ_grind-ext_RSQ_--Attribute_RPAR_": {"display": "Point", "context": ["The Lean Language Reference", "The grind tactic", "E‑matching", "Patterns", "The @[grind ext] Attribute"]}}, "address": "/The--grind--tactic/E___matching/"}], "Phrase (in Reducibility and Instance Synthesis)": [{"id": "Phrase-_LPAR_in-Reducibility-and-Instance-Synthesis_RPAR_", "data": {"/Definitions/Recursive-Definitions/#Phrase-_LPAR_in-Reducibility-and-Instance-Synthesis_RPAR_": {"display": "Phrase", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Controlling Reduction", "Reducibility and Instance Synthesis"]}}, "address": "/Definitions/Recursive-Definitions/"}], "Permissions.writable (in Fixed-Width Literals)": [{"id": "Permissions___writable-_LPAR_in-Fixed-Width-Literals_RPAR_", "data": {"/Basic-Types/Fixed-Precision-Integers/#Permissions___writable-_LPAR_in-Fixed-Width-Literals_RPAR_": {"display": "writable", "context": ["The Lean Language Reference", "Basic Types", "Fixed-Precision Integers", "Syntax", "Fixed-Width Literals"]}}, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Permissions.readable (in Fixed-Width Literals)": [{"id": "Permissions___readable-_LPAR_in-Fixed-Width-Literals_RPAR_", "data": {"/Basic-Types/Fixed-Precision-Integers/#Permissions___readable-_LPAR_in-Fixed-Width-Literals_RPAR_": {"display": "readable", "context": ["The Lean Language Reference", "Basic Types", "Fixed-Precision Integers", "Syntax", "Fixed-Width Literals"]}}, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Permissions.executable (in Fixed-Width Literals)": [{"id": "Permissions___executable-_LPAR_in-Fixed-Width-Literals_RPAR_", "data": {"/Basic-Types/Fixed-Precision-Integers/#Permissions___executable-_LPAR_in-Fixed-Width-Literals_RPAR_": {"display": "executable", "context": ["The Lean Language Reference", "Basic Types", "Fixed-Precision Integers", "Syntax", "Fixed-Width Literals"]}}, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Permissions.encode (in Fixed-Width Literals)": [{"id": "Permissions___encode-_LPAR_in-Fixed-Width-Literals_RPAR_", "data": {"/Basic-Types/Fixed-Precision-Integers/#Permissions___encode-_LPAR_in-Fixed-Width-Literals_RPAR_": {"display": "Permissions.encode", "context": ["The Lean Language Reference", "Basic Types", "Fixed-Precision Integers", "Syntax", "Fixed-Width Literals"]}}, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Permissions.decode (in Fixed-Width Literals)": [{"id": "Permissions___decode-_LPAR_in-Fixed-Width-Literals_RPAR_", "data": {"/Basic-Types/Fixed-Precision-Integers/#Permissions___decode-_LPAR_in-Fixed-Width-Literals_RPAR_": {"display": "Permissions.decode", "context": ["The Lean Language Reference", "Basic Types", "Fixed-Precision Integers", "Syntax", "Fixed-Width Literals"]}}, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Permissions (in Fixed-Width Literals)": [{"id": "Permissions-_LPAR_in-Fixed-Width-Literals_RPAR_", "data": {"/Basic-Types/Fixed-Precision-Integers/#Permissions-_LPAR_in-Fixed-Width-Literals_RPAR_": {"display": "Permissions", "context": ["The Lean Language Reference", "Basic Types", "Fixed-Precision Integers", "Syntax", "Fixed-Width Literals"]}}, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Parity.odd (in Inaccessible Patterns)": [{"id": "Parity___odd-_LPAR_in-Inaccessible-Patterns_RPAR_", "data": {"/Terms/Pattern-Matching/#Parity___odd-_LPAR_in-Inaccessible-Patterns_RPAR_": {"display": "odd", "context": ["The Lean Language Reference", "Terms", "Pattern Matching", "Inaccessible Patterns"]}}, "address": "/Terms/Pattern-Matching/"}], "Parity.even (in Inaccessible Patterns)": [{"id": "Parity___even-_LPAR_in-Inaccessible-Patterns_RPAR_", "data": {"/Terms/Pattern-Matching/#Parity___even-_LPAR_in-Inaccessible-Patterns_RPAR_": {"display": "even", "context": ["The Lean Language Reference", "Terms", "Pattern Matching", "Inaccessible Patterns"]}}, "address": "/Terms/Pattern-Matching/"}], "Parity (in Inaccessible Patterns)": [{"id": "Parity-_LPAR_in-Inaccessible-Patterns_RPAR_", "data": {"/Terms/Pattern-Matching/#Parity-_LPAR_in-Inaccessible-Patterns_RPAR_": {"display": "Parity", "context": ["The Lean Language Reference", "Terms", "Pattern Matching", "Inaccessible Patterns"]}}, "address": "/Terms/Pattern-Matching/"}], "Palindrome.text (in Non-default constructor name)": [{"id": "Palindrome___text-_LPAR_in-Non-default-constructor-name_RPAR_", "data": {"/The-Type-System/Inductive-Types/#Palindrome___text-_LPAR_in-Non-default-constructor-name_RPAR_": {"display": "text", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Structure Declarations", "Structure Constructors", "Non-default constructor name"]}}, "address": "/The-Type-System/Inductive-Types/"}], "Palindrome.single (in Invalid Nested Inductive Types)": [{"id": "Palindrome___single-_LPAR_in-Invalid-Nested-Inductive-Types_RPAR_", "data": {"/The-Type-System/Inductive-Types/#Palindrome___single-_LPAR_in-Invalid-Nested-Inductive-Types_RPAR_": {"display": "single", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Mutual Inductive Types", "Nested Inductive Types", "Invalid Nested Inductive Types"]}}, "address": "/The-Type-System/Inductive-Types/"}], "Palindrome.ofString (in Non-default constructor name)": [{"id": "Palindrome___ofString-_LPAR_in-Non-default-constructor-name_RPAR_", "data": {"/The-Type-System/Inductive-Types/#Palindrome___ofString-_LPAR_in-Non-default-constructor-name_RPAR_": {"display": "ofString", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Structure Declarations", "Structure Constructors", "Non-default constructor name"]}}, "address": "/The-Type-System/Inductive-Types/"}], "Palindrome.nil (in Invalid Nested Inductive Types)": [{"id": "Palindrome___nil-_LPAR_in-Invalid-Nested-Inductive-Types_RPAR_", "data": {"/The-Type-System/Inductive-Types/#Palindrome___nil-_LPAR_in-Invalid-Nested-Inductive-Types_RPAR_": {"display": "nil", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Mutual Inductive Types", "Nested Inductive Types", "Invalid Nested Inductive Types"]}}, "address": "/The-Type-System/Inductive-Types/"}], "Palindrome.is_palindrome (in Non-default constructor name)": [{"id": "Palindrome___is_palindrome-_LPAR_in-Non-default-constructor-name_RPAR_", "data": {"/The-Type-System/Inductive-Types/#Palindrome___is_palindrome-_LPAR_in-Non-default-constructor-name_RPAR_": {"display": "is_palindrome", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Structure Declarations", "Structure Constructors", "Non-default constructor name"]}}, "address": "/The-Type-System/Inductive-Types/"}], "Palindrome.cons (in Invalid Nested Inductive Types)": [{"id": "Palindrome___cons-_LPAR_in-Invalid-Nested-Inductive-Types_RPAR_", "data": {"/The-Type-System/Inductive-Types/#Palindrome___cons-_LPAR_in-Invalid-Nested-Inductive-Types_RPAR_": {"display": "cons", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Mutual Inductive Types", "Nested Inductive Types", "Invalid Nested Inductive Types"]}}, "address": "/The-Type-System/Inductive-Types/"}], "Palindrome (in Non-default constructor name)": [{"id": "Palindrome-_LPAR_in-Non-default-constructor-name_RPAR_", "data": {"/The-Type-System/Inductive-Types/#Palindrome-_LPAR_in-Non-default-constructor-name_RPAR_": {"display": "Palindrome", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Structure Declarations", "Structure Constructors", "Non-default constructor name"]}}, "address": "/The-Type-System/Inductive-Types/"}], "Palindrome (in Invalid Nested Inductive Types)": [{"id": "Palindrome-_LPAR_in-Invalid-Nested-Inductive-Types_RPAR_", "data": {"/The-Type-System/Inductive-Types/#Palindrome-_LPAR_in-Invalid-Nested-Inductive-Types_RPAR_": {"display": "Palindrome", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Mutual Inductive Types", "Nested Inductive Types", "Invalid Nested Inductive Types"]}}, "address": "/The-Type-System/Inductive-Types/"}], "Pair.unattach (in Preprocessing for a custom data type)": [{"id": "Pair___unattach-_LPAR_in-Preprocessing-for-a-custom-data-type_RPAR_", "data": {"/Definitions/Recursive-Definitions/#Pair___unattach-_LPAR_in-Preprocessing-for-a-custom-data-type_RPAR_": {"display": "Pair.unattach", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Well-Founded Recursion", "Preprocessing Function Definitions", "Preprocessing for a custom data type"]}}, "address": "/Definitions/Recursive-Definitions/"}], "Pair.snd (in Preprocessing for a custom data type)": [{"id": "Pair___snd-_LPAR_in-Preprocessing-for-a-custom-data-type_RPAR_", "data": {"/Definitions/Recursive-Definitions/#Pair___snd-_LPAR_in-Preprocessing-for-a-custom-data-type_RPAR_": {"display": "snd", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Well-Founded Recursion", "Preprocessing Function Definitions", "Preprocessing for a custom data type"]}}, "address": "/Definitions/Recursive-Definitions/"}], "Pair.snd (in Field Indices and Structure Inheritance)": [{"id": "Pair___snd-_LPAR_in-Field-Indices-and-Structure-Inheritance_RPAR_", "data": {"/The-Type-System/Inductive-Types/#Pair___snd-_LPAR_in-Field-Indices-and-Structure-Inheritance_RPAR_": {"display": "snd", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Structure Declarations", "Structure Inheritance", "Field Indices and Structure Inheritance"]}}, "address": "/The-Type-System/Inductive-Types/"}], "Pair.sizeOf_lt_of_mem (in Preprocessing for a custom data type)": [{"id": "Pair___sizeOf_lt_of_mem-_LPAR_in-Preprocessing-for-a-custom-data-type_RPAR_", "data": {"/Definitions/Recursive-Definitions/#Pair___sizeOf_lt_of_mem-_LPAR_in-Preprocessing-for-a-custom-data-type_RPAR_": {"display": "Pair.sizeOf_lt_of_mem", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Well-Founded Recursion", "Preprocessing Function Definitions", "Preprocessing for a custom data type"]}}, "address": "/Definitions/Recursive-Definitions/"}], "Pair.map_wfParam (in Preprocessing for a custom data type)": [{"id": "Pair___map_wfParam-_LPAR_in-Preprocessing-for-a-custom-data-type_RPAR_", "data": {"/Definitions/Recursive-Definitions/#Pair___map_wfParam-_LPAR_in-Preprocessing-for-a-custom-data-type_RPAR_": {"display": "Pair.map_wfParam", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Well-Founded Recursion", "Preprocessing Function Definitions", "Preprocessing for a custom data type"]}}, "address": "/Definitions/Recursive-Definitions/"}], "Pair.map_unattach (in Preprocessing for a custom data type)": [{"id": "Pair___map_unattach-_LPAR_in-Preprocessing-for-a-custom-data-type_RPAR_", "data": {"/Definitions/Recursive-Definitions/#Pair___map_unattach-_LPAR_in-Preprocessing-for-a-custom-data-type_RPAR_": {"display": "Pair.map_unattach", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Well-Founded Recursion", "Preprocessing Function Definitions", "Preprocessing for a custom data type"]}}, "address": "/Definitions/Recursive-Definitions/"}], "Pair.map (in Preprocessing for a custom data type)": [{"id": "Pair___map-_LPAR_in-Preprocessing-for-a-custom-data-type_RPAR_", "data": {"/Definitions/Recursive-Definitions/#Pair___map-_LPAR_in-Preprocessing-for-a-custom-data-type_RPAR_": {"display": "Pair.map", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Well-Founded Recursion", "Preprocessing Function Definitions", "Preprocessing for a custom data type"]}}, "address": "/Definitions/Recursive-Definitions/"}], "Pair.fst (in Preprocessing for a custom data type)": [{"id": "Pair___fst-_LPAR_in-Preprocessing-for-a-custom-data-type_RPAR_", "data": {"/Definitions/Recursive-Definitions/#Pair___fst-_LPAR_in-Preprocessing-for-a-custom-data-type_RPAR_": {"display": "fst", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Well-Founded Recursion", "Preprocessing Function Definitions", "Preprocessing for a custom data type"]}}, "address": "/Definitions/Recursive-Definitions/"}], "Pair.fst (in Field Indices and Structure Inheritance)": [{"id": "Pair___fst-_LPAR_in-Field-Indices-and-Structure-Inheritance_RPAR_", "data": {"/The-Type-System/Inductive-Types/#Pair___fst-_LPAR_in-Field-Indices-and-Structure-Inheritance_RPAR_": {"display": "fst", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Structure Declarations", "Structure Inheritance", "Field Indices and Structure Inheritance"]}}, "address": "/The-Type-System/Inductive-Types/"}], "Pair.attach (in Preprocessing for a custom data type)": [{"id": "Pair___attach-_LPAR_in-Preprocessing-for-a-custom-data-type_RPAR_", "data": {"/Definitions/Recursive-Definitions/#Pair___attach-_LPAR_in-Preprocessing-for-a-custom-data-type_RPAR_": {"display": "Pair.attach", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Well-Founded Recursion", "Preprocessing Function Definitions", "Preprocessing for a custom data type"]}}, "address": "/Definitions/Recursive-Definitions/"}], "Pair.Mem.snd (in Preprocessing for a custom data type)": [{"id": "Pair___Mem___snd-_LPAR_in-Preprocessing-for-a-custom-data-type_RPAR_", "data": {"/Definitions/Recursive-Definitions/#Pair___Mem___snd-_LPAR_in-Preprocessing-for-a-custom-data-type_RPAR_": {"display": "snd", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Well-Founded Recursion", "Preprocessing Function Definitions", "Preprocessing for a custom data type"]}}, "address": "/Definitions/Recursive-Definitions/"}], "Pair.Mem.fst (in Preprocessing for a custom data type)": [{"id": "Pair___Mem___fst-_LPAR_in-Preprocessing-for-a-custom-data-type_RPAR_", "data": {"/Definitions/Recursive-Definitions/#Pair___Mem___fst-_LPAR_in-Preprocessing-for-a-custom-data-type_RPAR_": {"display": "fst", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Well-Founded Recursion", "Preprocessing Function Definitions", "Preprocessing for a custom data type"]}}, "address": "/Definitions/Recursive-Definitions/"}], "Pair.Mem (in Preprocessing for a custom data type)": [{"id": "Pair___Mem-_LPAR_in-Preprocessing-for-a-custom-data-type_RPAR_", "data": {"/Definitions/Recursive-Definitions/#Pair___Mem-_LPAR_in-Preprocessing-for-a-custom-data-type_RPAR_": {"display": "Pair.Mem", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Well-Founded Recursion", "Preprocessing Function Definitions", "Preprocessing for a custom data type"]}}, "address": "/Definitions/Recursive-Definitions/"}], "Pair (in Preprocessing for a custom data type)": [{"id": "Pair-_LPAR_in-Preprocessing-for-a-custom-data-type_RPAR_", "data": {"/Definitions/Recursive-Definitions/#Pair-_LPAR_in-Preprocessing-for-a-custom-data-type_RPAR_": {"display": "Pair", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Well-Founded Recursion", "Preprocessing Function Definitions", "Preprocessing for a custom data type"]}}, "address": "/Definitions/Recursive-Definitions/"}], "Pair (in Field Indices and Structure Inheritance)": [{"id": "Pair-_LPAR_in-Field-Indices-and-Structure-Inheritance_RPAR_", "data": {"/The-Type-System/Inductive-Types/#Pair-_LPAR_in-Field-Indices-and-Structure-Inheritance_RPAR_": {"display": "Pair", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Structure Declarations", "Structure Inheritance", "Field Indices and Structure Inheritance"]}}, "address": "/The-Type-System/Inductive-Types/"}], "PBool (in Overly-universe-polymorphic Bool)": [{"id": "PBool-_LPAR_in-Overly-universe-polymorphic--Bool_RPAR_", "data": {"/The-Type-System/Inductive-Types/#PBool-_LPAR_in-Overly-universe-polymorphic--Bool_RPAR_": {"display": "PBool", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Logical Model", "Well-Formedness Requirements", "Prop vs Type", "Overly-universe-polymorphic Bool"]}}, "address": "/The-Type-System/Inductive-Types/"}], "OptONat.to_of_eq_id (in Translating Nested Inductive Types)": [{"id": "OptONat___to_of_eq_id-_LPAR_in-Translating-Nested-Inductive-Types_RPAR_", "data": {"/The-Type-System/Inductive-Types/#OptONat___to_of_eq_id-_LPAR_in-Translating-Nested-Inductive-Types_RPAR_": {"display": "OptONat.to_of_eq_id", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Mutual Inductive Types", "Nested Inductive Types", "Translating Nested Inductive Types"]}}, "address": "/The-Type-System/Inductive-Types/"}], "OptONat.toOption (in Translating Nested Inductive Types)": [{"id": "OptONat___toOption-_LPAR_in-Translating-Nested-Inductive-Types_RPAR_", "data": {"/The-Type-System/Inductive-Types/#OptONat___toOption-_LPAR_in-Translating-Nested-Inductive-Types_RPAR_": {"display": "OptONat.toOption", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Mutual Inductive Types", "Nested Inductive Types", "Translating Nested Inductive Types"]}}, "address": "/The-Type-System/Inductive-Types/"}], "OptONat.some (in Translating Nested Inductive Types)": [{"id": "OptONat___some-_LPAR_in-Translating-Nested-Inductive-Types_RPAR_", "data": {"/The-Type-System/Inductive-Types/#OptONat___some-_LPAR_in-Translating-Nested-Inductive-Types_RPAR_": {"display": "some", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Mutual Inductive Types", "Nested Inductive Types", "Translating Nested Inductive Types"]}}, "address": "/The-Type-System/Inductive-Types/"}], "OptONat.of_to_eq_id (in Translating Nested Inductive Types)": [{"id": "OptONat___of_to_eq_id-_LPAR_in-Translating-Nested-Inductive-Types_RPAR_", "data": {"/The-Type-System/Inductive-Types/#OptONat___of_to_eq_id-_LPAR_in-Translating-Nested-Inductive-Types_RPAR_": {"display": "OptONat.of_to_eq_id", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Mutual Inductive Types", "Nested Inductive Types", "Translating Nested Inductive Types"]}}, "address": "/The-Type-System/Inductive-Types/"}], "OptONat.ofOption (in Translating Nested Inductive Types)": [{"id": "OptONat___ofOption-_LPAR_in-Translating-Nested-Inductive-Types_RPAR_", "data": {"/The-Type-System/Inductive-Types/#OptONat___ofOption-_LPAR_in-Translating-Nested-Inductive-Types_RPAR_": {"display": "OptONat.ofOption", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Mutual Inductive Types", "Nested Inductive Types", "Translating Nested Inductive Types"]}}, "address": "/The-Type-System/Inductive-Types/"}], "OptONat.none (in Translating Nested Inductive Types)": [{"id": "OptONat___none-_LPAR_in-Translating-Nested-Inductive-Types_RPAR_", "data": {"/The-Type-System/Inductive-Types/#OptONat___none-_LPAR_in-Translating-Nested-Inductive-Types_RPAR_": {"display": "none", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Mutual Inductive Types", "Nested Inductive Types", "Translating Nested Inductive Types"]}}, "address": "/The-Type-System/Inductive-Types/"}], "OptONat (in Translating Nested Inductive Types)": [{"id": "OptONat-_LPAR_in-Translating-Nested-Inductive-Types_RPAR_", "data": {"/The-Type-System/Inductive-Types/#OptONat-_LPAR_in-Translating-Nested-Inductive-Types_RPAR_": {"display": "OptONat", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Mutual Inductive Types", "Nested Inductive Types", "Translating Nested Inductive Types"]}}, "address": "/The-Type-System/Inductive-Types/"}], "OneSmaller.shrink (in Semi-Output Parameters with Pre-Existing Values)": [{"id": "OneSmaller___shrink-_LPAR_in-Semi-Output-Parameters-with-Pre-Existing-Values_RPAR_", "data": {"/Type-Classes/Instance-Synthesis/#OneSmaller___shrink-_LPAR_in-Semi-Output-Parameters-with-Pre-Existing-Values_RPAR_": {"display": "shrink", "context": ["The Lean Language Reference", "Type Classes", "Instance Synthesis", "Output Parameters", "Semi-Output Parameters with Pre-Existing Values"]}}, "address": "/Type-Classes/Instance-Synthesis/"}], "OneSmaller.shrink (in Output Parameters with Pre-Existing Values)": [{"id": "OneSmaller___shrink-_LPAR_in-Output-Parameters-with-Pre-Existing-Values_RPAR_", "data": {"/Type-Classes/Instance-Synthesis/#OneSmaller___shrink-_LPAR_in-Output-Parameters-with-Pre-Existing-Values_RPAR_": {"display": "shrink", "context": ["The Lean Language Reference", "Type Classes", "Instance Synthesis", "Output Parameters", "Output Parameters with Pre-Existing Values"]}}, "address": "/Type-Classes/Instance-Synthesis/"}], "OneSmaller.biggest (in Semi-Output Parameters with Pre-Existing Values)": [{"id": "OneSmaller___biggest-_LPAR_in-Semi-Output-Parameters-with-Pre-Existing-Values_RPAR_", "data": {"/Type-Classes/Instance-Synthesis/#OneSmaller___biggest-_LPAR_in-Semi-Output-Parameters-with-Pre-Existing-Values_RPAR_": {"display": "biggest", "context": ["The Lean Language Reference", "Type Classes", "Instance Synthesis", "Output Parameters", "Semi-Output Parameters with Pre-Existing Values"]}}, "address": "/Type-Classes/Instance-Synthesis/"}], "OneSmaller.biggest (in Output Parameters with Pre-Existing Values)": [{"id": "OneSmaller___biggest-_LPAR_in-Output-Parameters-with-Pre-Existing-Values_RPAR_", "data": {"/Type-Classes/Instance-Synthesis/#OneSmaller___biggest-_LPAR_in-Output-Parameters-with-Pre-Existing-Values_RPAR_": {"display": "biggest", "context": ["The Lean Language Reference", "Type Classes", "Instance Synthesis", "Output Parameters", "Output Parameters with Pre-Existing Values"]}}, "address": "/Type-Classes/Instance-Synthesis/"}], "OneSmaller (in Semi-Output Parameters with Pre-Existing Values)": [{"id": "OneSmaller-_LPAR_in-Semi-Output-Parameters-with-Pre-Existing-Values_RPAR_", "data": {"/Type-Classes/Instance-Synthesis/#OneSmaller-_LPAR_in-Semi-Output-Parameters-with-Pre-Existing-Values_RPAR_": {"display": "OneSmaller", "context": ["The Lean Language Reference", "Type Classes", "Instance Synthesis", "Output Parameters", "Semi-Output Parameters with Pre-Existing Values"]}}, "address": "/Type-Classes/Instance-Synthesis/"}], "OneSmaller (in Output Parameters with Pre-Existing Values)": [{"id": "OneSmaller-_LPAR_in-Output-Parameters-with-Pre-Existing-Values_RPAR_", "data": {"/Type-Classes/Instance-Synthesis/#OneSmaller-_LPAR_in-Output-Parameters-with-Pre-Existing-Values_RPAR_": {"display": "OneSmaller", "context": ["The Lean Language Reference", "Type Classes", "Instance Synthesis", "Output Parameters", "Output Parameters with Pre-Existing Values"]}}, "address": "/Type-Classes/Instance-Synthesis/"}], "OddList.cons (in Mutually Defined Inductive Types)": [{"id": "OddList___cons-_LPAR_in-Mutually-Defined-Inductive-Types_RPAR_", "data": {"/The-Type-System/Inductive-Types/#OddList___cons-_LPAR_in-Mutually-Defined-Inductive-Types_RPAR_": {"display": "cons", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Mutual Inductive Types", "Mutually Defined Inductive Types"]}}, "address": "/The-Type-System/Inductive-Types/"}], "OddList (in Mutually Defined Inductive Types)": [{"id": "OddList-_LPAR_in-Mutually-Defined-Inductive-Types_RPAR_", "data": {"/The-Type-System/Inductive-Types/#OddList-_LPAR_in-Mutually-Defined-Inductive-Types_RPAR_": {"display": "OddList", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Mutual Inductive Types", "Mutually Defined Inductive Types"]}}, "address": "/The-Type-System/Inductive-Types/"}], "Odd.succ (in Even and odd)": [{"id": "Odd___succ-_LPAR_in-Even-and-odd_RPAR_", "data": {"/The-Type-System/Inductive-Types/#Odd___succ-_LPAR_in-Even-and-odd_RPAR_": {"display": "succ", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Mutual Inductive Types", "Recursors", "Even and odd"]}}, "address": "/The-Type-System/Inductive-Types/"}], "Odd (in Even and odd)": [{"id": "Odd-_LPAR_in-Even-and-odd_RPAR_", "data": {"/The-Type-System/Inductive-Types/#Odd-_LPAR_in-Even-and-odd_RPAR_": {"display": "Odd", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Mutual Inductive Types", "Recursors", "Even and odd"]}}, "address": "/The-Type-System/Inductive-Types/"}], "ONat.rec (in Translating Nested Inductive Types)": [{"id": "ONat___rec-_LPAR_in-Translating-Nested-Inductive-Types_RPAR_", "data": {"/The-Type-System/Inductive-Types/#ONat___rec-_LPAR_in-Translating-Nested-Inductive-Types_RPAR_": {"display": "ONat.rec", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Mutual Inductive Types", "Nested Inductive Types", "Translating Nested Inductive Types"]}}, "address": "/The-Type-System/Inductive-Types/"}], "ONat.mk (in Translating Nested Inductive Types)": [{"id": "ONat___mk-_LPAR_in-Translating-Nested-Inductive-Types_RPAR_-next", "data": {"/The-Type-System/Inductive-Types/#ONat___mk-_LPAR_in-Translating-Nested-Inductive-Types_RPAR_-next": {"display": "ONat.mk", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Mutual Inductive Types", "Nested Inductive Types", "Translating Nested Inductive Types"]}, "/The-Type-System/Inductive-Types/#ONat___mk-_LPAR_in-Translating-Nested-Inductive-Types_RPAR_": {"display": "mk", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Mutual Inductive Types", "Nested Inductive Types", "Translating Nested Inductive Types"]}}, "address": "/The-Type-System/Inductive-Types/"}, {"id": "ONat___mk-_LPAR_in-Translating-Nested-Inductive-Types_RPAR_", "data": {"/The-Type-System/Inductive-Types/#ONat___mk-_LPAR_in-Translating-Nested-Inductive-Types_RPAR_-next": {"display": "ONat.mk", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Mutual Inductive Types", "Nested Inductive Types", "Translating Nested Inductive Types"]}, "/The-Type-System/Inductive-Types/#ONat___mk-_LPAR_in-Translating-Nested-Inductive-Types_RPAR_": {"display": "mk", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Mutual Inductive Types", "Nested Inductive Types", "Translating Nested Inductive Types"]}}, "address": "/The-Type-System/Inductive-Types/"}], "ONat.mk (in Nested Inductive Types)": [{"id": "ONat___mk-_LPAR_in-Nested-Inductive-Types_RPAR_", "data": {"/The-Type-System/Inductive-Types/#ONat___mk-_LPAR_in-Nested-Inductive-Types_RPAR_": {"display": "mk", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Mutual Inductive Types", "Nested Inductive Types", "Nested Inductive Types"]}}, "address": "/The-Type-System/Inductive-Types/"}], "ONat'.mk (in Translating Nested Inductive Types)": [{"id": "ONat______mk-_LPAR_in-Translating-Nested-Inductive-Types_RPAR_", "data": {"/The-Type-System/Inductive-Types/#ONat______mk-_LPAR_in-Translating-Nested-Inductive-Types_RPAR_": {"display": "mk", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Mutual Inductive Types", "Nested Inductive Types", "Translating Nested Inductive Types"]}}, "address": "/The-Type-System/Inductive-Types/"}], "ONat' (in Translating Nested Inductive Types)": [{"id": "ONat___-_LPAR_in-Translating-Nested-Inductive-Types_RPAR_", "data": {"/The-Type-System/Inductive-Types/#ONat___-_LPAR_in-Translating-Nested-Inductive-Types_RPAR_": {"display": "ONat'", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Mutual Inductive Types", "Nested Inductive Types", "Translating Nested Inductive Types"]}}, "address": "/The-Type-System/Inductive-Types/"}], "ONat (in Translating Nested Inductive Types)": [{"id": "ONat-_LPAR_in-Translating-Nested-Inductive-Types_RPAR_", "data": {"/The-Type-System/Inductive-Types/#ONat-_LPAR_in-Translating-Nested-Inductive-Types_RPAR_-next": {"display": "ONat", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Mutual Inductive Types", "Nested Inductive Types", "Translating Nested Inductive Types"]}, "/The-Type-System/Inductive-Types/#ONat-_LPAR_in-Translating-Nested-Inductive-Types_RPAR_": {"display": "ONat", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Mutual Inductive Types", "Nested Inductive Types", "Translating Nested Inductive Types"]}}, "address": "/The-Type-System/Inductive-Types/"}, {"id": "ONat-_LPAR_in-Translating-Nested-Inductive-Types_RPAR_-next", "data": {"/The-Type-System/Inductive-Types/#ONat-_LPAR_in-Translating-Nested-Inductive-Types_RPAR_-next": {"display": "ONat", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Mutual Inductive Types", "Nested Inductive Types", "Translating Nested Inductive Types"]}, "/The-Type-System/Inductive-Types/#ONat-_LPAR_in-Translating-Nested-Inductive-Types_RPAR_": {"display": "ONat", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Mutual Inductive Types", "Nested Inductive Types", "Translating Nested Inductive Types"]}}, "address": "/The-Type-System/Inductive-Types/"}], "ONat (in Nested Inductive Types)": [{"id": "ONat-_LPAR_in-Nested-Inductive-Types_RPAR_", "data": {"/The-Type-System/Inductive-Types/#ONat-_LPAR_in-Nested-Inductive-Types_RPAR_": {"display": "ONat", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Mutual Inductive Types", "Nested Inductive Types", "Nested Inductive Types"]}}, "address": "/The-Type-System/Inductive-Types/"}], "NotUnitLike.mk (in Definitional Equality of Unit-Like Types)": [{"id": "NotUnitLike___mk-_LPAR_in-Definitional-Equality-of-Unit-Like-Types_RPAR_", "data": {"/Basic-Types/The-Unit-Type/#NotUnitLike___mk-_LPAR_in-Definitional-Equality-of-Unit-Like-Types_RPAR_": {"display": "mk", "context": ["The Lean Language Reference", "Basic Types", "The Unit Type", "Definitional Equality", "Definitional Equality of Unit-Like Types"]}}, "address": "/Basic-Types/The-Unit-Type/"}], "NotUnitLike (in Definitional Equality of Unit-Like Types)": [{"id": "NotUnitLike-_LPAR_in-Definitional-Equality-of-Unit-Like-Types_RPAR_", "data": {"/Basic-Types/The-Unit-Type/#NotUnitLike-_LPAR_in-Definitional-Equality-of-Unit-Like-Types_RPAR_": {"display": "NotUnitLike", "context": ["The Lean Language Reference", "Basic Types", "The Unit Type", "Definitional Equality", "Definitional Equality of Unit-Like Types"]}}, "address": "/Basic-Types/The-Unit-Type/"}], "Not30.lt (in Splitting Predicates)": [{"id": "Not30___lt-_LPAR_in-Splitting-Predicates_RPAR_", "data": {"/The--grind--tactic/Case-Analysis/#Not30___lt-_LPAR_in-Splitting-Predicates_RPAR_": {"display": "lt", "context": ["The Lean Language Reference", "The grind tactic", "Case Analysis", "Selection Heuristics", "Splitting Predicates"]}}, "address": "/The--grind--tactic/Case-Analysis/"}], "Not30.gt (in Splitting Predicates)": [{"id": "Not30___gt-_LPAR_in-Splitting-Predicates_RPAR_", "data": {"/The--grind--tactic/Case-Analysis/#Not30___gt-_LPAR_in-Splitting-Predicates_RPAR_": {"display": "gt", "context": ["The Lean Language Reference", "The grind tactic", "Case Analysis", "Selection Heuristics", "Splitting Predicates"]}}, "address": "/The--grind--tactic/Case-Analysis/"}], "Not30 (in Splitting Predicates)": [{"id": "Not30-_LPAR_in-Splitting-Predicates_RPAR_", "data": {"/The--grind--tactic/Case-Analysis/#Not30-_LPAR_in-Splitting-Predicates_RPAR_": {"display": "Not30", "context": ["The Lean Language Reference", "The grind tactic", "Case Analysis", "Selection Heuristics", "Splitting Predicates"]}}, "address": "/The--grind--tactic/Case-Analysis/"}], "NonZero (in Universe mismatch)": [{"id": "NonZero-_LPAR_in-Universe-mismatch_RPAR_", "data": {"/The-Type-System/Inductive-Types/#NonZero-_LPAR_in-Universe-mismatch_RPAR_": {"display": "NonZero", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Mutual Inductive Types", "Requirements", "Universe Levels", "Universe mismatch"]}}, "address": "/The-Type-System/Inductive-Types/"}], "NonEmptyString (in Extensional Equality of Subtypes)": [{"id": "NonEmptyString-_LPAR_in-Extensional-Equality-of-Subtypes_RPAR_", "data": {"/Basic-Types/Subtypes/#NonEmptyString-_LPAR_in-Extensional-Equality-of-Subtypes_RPAR_": {"display": "NonEmptyString", "context": ["The Lean Language Reference", "Basic Types", "Subtypes", "Extensional Equality of Subtypes"]}}, "address": "/Basic-Types/Subtypes/"}], "NonEmptyString (in Definitional Equality of Subtypes)": [{"id": "NonEmptyString-_LPAR_in-Definitional-Equality-of-Subtypes_RPAR_", "data": {"/Basic-Types/Subtypes/#NonEmptyString-_LPAR_in-Definitional-Equality-of-Subtypes_RPAR_": {"display": "NonEmptyString", "context": ["The Lean Language Reference", "Basic Types", "Subtypes", "Definitional Equality of Subtypes"]}}, "address": "/Basic-Types/Subtypes/"}], "NonEmptyList.non_empty (in Dependent Coercion)": [{"id": "NonEmptyList___non_empty-_LPAR_in-Dependent-Coercion_RPAR_", "data": {"/Coercions/Coercing-Between-Types/#NonEmptyList___non_empty-_LPAR_in-Dependent-Coercion_RPAR_": {"display": "non_empty", "context": ["The Lean Language Reference", "Coercions", "Coercing Between Types", "Dependent Coercion"]}}, "address": "/Coercions/Coercing-Between-Types/"}], "NonEmptyList.contents (in Dependent Coercion)": [{"id": "NonEmptyList___contents-_LPAR_in-Dependent-Coercion_RPAR_", "data": {"/Coercions/Coercing-Between-Types/#NonEmptyList___contents-_LPAR_in-Dependent-Coercion_RPAR_": {"display": "contents", "context": ["The Lean Language Reference", "Coercions", "Coercing Between Types", "Dependent Coercion"]}}, "address": "/Coercions/Coercing-Between-Types/"}], "NonEmptyList (in Dependent Coercion)": [{"id": "NonEmptyList-_LPAR_in-Dependent-Coercion_RPAR_", "data": {"/Coercions/Coercing-Between-Types/#NonEmptyList-_LPAR_in-Dependent-Coercion_RPAR_": {"display": "NonEmptyList", "context": ["The Lean Language Reference", "Coercions", "Coercing Between Types", "Dependent Coercion"]}}, "address": "/Coercions/Coercing-Between-Types/"}], "NoRepeats (in Universe mismatch)": [{"id": "NoRepeats-_LPAR_in-Universe-mismatch_RPAR_", "data": {"/The-Type-System/Inductive-Types/#NoRepeats-_LPAR_in-Universe-mismatch_RPAR_": {"display": "NoRepeats", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Mutual Inductive Types", "Requirements", "Universe Levels", "Universe mismatch"]}}, "address": "/The-Type-System/Inductive-Types/"}], "NoConfusion": [{"id": "NoConfusion", "data": {"/Basic-Types/Natural-Numbers/#NoConfusion": {"display": "NoConfusion", "context": ["The Lean Language Reference", "Basic Types", "Natural Numbers", "Logical Model", "Peano Axioms"]}}, "address": "/Basic-Types/Natural-Numbers/"}], "No (in A constructorless proposition)": [{"id": "No-_LPAR_in-A-constructorless-proposition_RPAR_", "data": {"/The-Type-System/Inductive-Types/#No-_LPAR_in-A-constructorless-proposition_RPAR_": {"display": "No", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Inductive Type Declarations", "Example Inductive Types", "A constructorless proposition"]}}, "address": "/The-Type-System/Inductive-Types/"}], "NaturalNum (in Mutual Block Scope)": [{"id": "NaturalNum-_LPAR_in-Mutual-Block-Scope_RPAR_", "data": {"/Definitions/Recursive-Definitions/#NaturalNum-_LPAR_in-Mutual-Block-Scope_RPAR_-next": {"display": "NaturalNum", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Mutual Recursion", "Mutual Block Scope"]}, "/Definitions/Recursive-Definitions/#NaturalNum-_LPAR_in-Mutual-Block-Scope_RPAR_": {"display": "NaturalNum", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Mutual Recursion", "Mutual Block Scope"]}}, "address": "/Definitions/Recursive-Definitions/"}, {"id": "NaturalNum-_LPAR_in-Mutual-Block-Scope_RPAR_-next", "data": {"/Definitions/Recursive-Definitions/#NaturalNum-_LPAR_in-Mutual-Block-Scope_RPAR_-next": {"display": "NaturalNum", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Mutual Recursion", "Mutual Block Scope"]}, "/Definitions/Recursive-Definitions/#NaturalNum-_LPAR_in-Mutual-Block-Scope_RPAR_": {"display": "NaturalNum", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Mutual Recursion", "Mutual Block Scope"]}}, "address": "/Definitions/Recursive-Definitions/"}], "Nats.next (in Iterating Over Nat)": [{"id": "Nats___next-_LPAR_in-Iterating-Over--Nat_RPAR_", "data": {"/Iterators/Iterator-Definitions/#Nats___next-_LPAR_in-Iterating-Over--Nat_RPAR_": {"display": "next", "context": ["The Lean Language Reference", "Iterators", "Iterator Definitions", "Finite and Productive Iterators", "Iterating Over Nat"]}}, "address": "/Iterators/Iterator-Definitions/"}], "Nats.iter (in Iterating Over Nat)": [{"id": "Nats___iter-_LPAR_in-Iterating-Over--Nat_RPAR_", "data": {"/Iterators/Iterator-Definitions/#Nats___iter-_LPAR_in-Iterating-Over--Nat_RPAR_": {"display": "Nats.iter", "context": ["The Lean Language Reference", "Iterators", "Iterator Definitions", "Finite and Productive Iterators", "Iterating Over Nat"]}}, "address": "/Iterators/Iterator-Definitions/"}], "Nats (in Iterating Over Nat)": [{"id": "Nats-_LPAR_in-Iterating-Over--Nat_RPAR_", "data": {"/Iterators/Iterator-Definitions/#Nats-_LPAR_in-Iterating-Over--Nat_RPAR_": {"display": "Nats", "context": ["The Lean Language Reference", "Iterators", "Iterator Definitions", "Finite and Productive Iterators", "Iterating Over Nat"]}}, "address": "/Iterators/Iterator-Definitions/"}], "NatWrapper.val (in Variations in Instance Definitions)": [{"id": "NatWrapper___val-_LPAR_in-Variations-in-Instance-Definitions_RPAR_", "data": {"/Type-Classes/Instance-Declarations/#NatWrapper___val-_LPAR_in-Variations-in-Instance-Definitions_RPAR_": {"display": "val", "context": ["The Lean Language Reference", "Type Classes", "Instance Declarations", "Variations in Instance Definitions"]}}, "address": "/Type-Classes/Instance-Declarations/"}], "NatWrapper.val (in Instance Name Generation)": [{"id": "NatWrapper___val-_LPAR_in-Instance-Name-Generation_RPAR_", "data": {"/Type-Classes/Instance-Declarations/#NatWrapper___val-_LPAR_in-Instance-Name-Generation_RPAR_": {"display": "val", "context": ["The Lean Language Reference", "Type Classes", "Instance Declarations", "Instance Name Generation"]}}, "address": "/Type-Classes/Instance-Declarations/"}], "NatWrapper (in Variations in Instance Definitions)": [{"id": "NatWrapper-_LPAR_in-Variations-in-Instance-Definitions_RPAR_", "data": {"/Type-Classes/Instance-Declarations/#NatWrapper-_LPAR_in-Variations-in-Instance-Definitions_RPAR_": {"display": "NatWrapper", "context": ["The Lean Language Reference", "Type Classes", "Instance Declarations", "Variations in Instance Definitions"]}}, "address": "/Type-Classes/Instance-Declarations/"}], "NatWrapper (in Instance Name Generation)": [{"id": "NatWrapper-_LPAR_in-Instance-Name-Generation_RPAR_", "data": {"/Type-Classes/Instance-Declarations/#NatWrapper-_LPAR_in-Instance-Name-Generation_RPAR_": {"display": "NatWrapper", "context": ["The Lean Language Reference", "Type Classes", "Instance Declarations", "Instance Name Generation"]}}, "address": "/Type-Classes/Instance-Declarations/"}], "NatTree.leaf (in Instances are not recursive)": [{"id": "NatTree___leaf-_LPAR_in-Instances-are-not-recursive_RPAR_", "data": {"/Type-Classes/Instance-Declarations/#NatTree___leaf-_LPAR_in-Instances-are-not-recursive_RPAR_": {"display": "leaf", "context": ["The Lean Language Reference", "Type Classes", "Instance Declarations", "Recursive Instances", "Instances are not recursive"]}}, "address": "/Type-Classes/Instance-Declarations/"}], "NatTree.branch (in Instances are not recursive)": [{"id": "NatTree___branch-_LPAR_in-Instances-are-not-recursive_RPAR_", "data": {"/Type-Classes/Instance-Declarations/#NatTree___branch-_LPAR_in-Instances-are-not-recursive_RPAR_": {"display": "branch", "context": ["The Lean Language Reference", "Type Classes", "Instance Declarations", "Recursive Instances", "Instances are not recursive"]}}, "address": "/Type-Classes/Instance-Declarations/"}], "NatTree.beq (in Instances are not recursive)": [{"id": "NatTree___beq-_LPAR_in-Instances-are-not-recursive_RPAR_", "data": {"/Type-Classes/Instance-Declarations/#NatTree___beq-_LPAR_in-Instances-are-not-recursive_RPAR_": {"display": "NatTree.beq", "context": ["The Lean Language Reference", "Type Classes", "Instance Declarations", "Recursive Instances", "Instances are not recursive"]}}, "address": "/Type-Classes/Instance-Declarations/"}], "NatTree (in Instances are not recursive)": [{"id": "NatTree-_LPAR_in-Instances-are-not-recursive_RPAR_", "data": {"/Type-Classes/Instance-Declarations/#NatTree-_LPAR_in-Instances-are-not-recursive_RPAR_": {"display": "NatTree", "context": ["The Lean Language Reference", "Type Classes", "Instance Declarations", "Recursive Instances", "Instances are not recursive"]}}, "address": "/Type-Classes/Instance-Declarations/"}], "NatStringBimap.stringToNat (in Modifiers on structure constructor)": [{"id": "NatStringBimap___stringToNat-_LPAR_in-Modifiers-on-structure-constructor_RPAR_", "data": {"/The-Type-System/Inductive-Types/#NatStringBimap___stringToNat-_LPAR_in-Modifiers-on-structure-constructor_RPAR_": {"display": "stringToNat", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Structure Declarations", "Structure Constructors", "Modifiers on structure constructor"]}}, "address": "/The-Type-System/Inductive-Types/"}], "NatStringBimap.natToString (in Modifiers on structure constructor)": [{"id": "NatStringBimap___natToString-_LPAR_in-Modifiers-on-structure-constructor_RPAR_", "data": {"/The-Type-System/Inductive-Types/#NatStringBimap___natToString-_LPAR_in-Modifiers-on-structure-constructor_RPAR_": {"display": "natToString", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Structure Declarations", "Structure Constructors", "Modifiers on structure constructor"]}}, "address": "/The-Type-System/Inductive-Types/"}], "NatStringBimap.insert (in Modifiers on structure constructor)": [{"id": "NatStringBimap___insert-_LPAR_in-Modifiers-on-structure-constructor_RPAR_", "data": {"/The-Type-System/Inductive-Types/#NatStringBimap___insert-_LPAR_in-Modifiers-on-structure-constructor_RPAR_": {"display": "NatStringBimap.insert", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Structure Declarations", "Structure Constructors", "Modifiers on structure constructor"]}}, "address": "/The-Type-System/Inductive-Types/"}], "NatStringBimap.empty (in Modifiers on structure constructor)": [{"id": "NatStringBimap___empty-_LPAR_in-Modifiers-on-structure-constructor_RPAR_", "data": {"/The-Type-System/Inductive-Types/#NatStringBimap___empty-_LPAR_in-Modifiers-on-structure-constructor_RPAR_": {"display": "NatStringBimap.empty", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Structure Declarations", "Structure Constructors", "Modifiers on structure constructor"]}}, "address": "/The-Type-System/Inductive-Types/"}], "NatStringBimap (in Modifiers on structure constructor)": [{"id": "NatStringBimap-_LPAR_in-Modifiers-on-structure-constructor_RPAR_", "data": {"/The-Type-System/Inductive-Types/#NatStringBimap-_LPAR_in-Modifiers-on-structure-constructor_RPAR_": {"display": "NatStringBimap", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Structure Declarations", "Structure Constructors", "Modifiers on structure constructor"]}}, "address": "/The-Type-System/Inductive-Types/"}], "NatRoseTree.node (in Instances for nested types)": [{"id": "NatRoseTree___node-_LPAR_in-Instances-for-nested-types_RPAR_", "data": {"/Type-Classes/Instance-Declarations/#NatRoseTree___node-_LPAR_in-Instances-for-nested-types_RPAR_": {"display": "node", "context": ["The Lean Language Reference", "Type Classes", "Instance Declarations", "Recursive Instances", "Instances for nested types"]}}, "address": "/Type-Classes/Instance-Declarations/"}], "NatRoseTree.beq (in Instances for nested types)": [{"id": "NatRoseTree___beq-_LPAR_in-Instances-for-nested-types_RPAR_-next", "data": {"/Type-Classes/Instance-Declarations/#NatRoseTree___beq-_LPAR_in-Instances-for-nested-types_RPAR_-next": {"display": "NatRoseTree.beq", "context": ["The Lean Language Reference", "Type Classes", "Instance Declarations", "Recursive Instances", "Instances for nested types"]}, "/Type-Classes/Instance-Declarations/#NatRoseTree___beq-_LPAR_in-Instances-for-nested-types_RPAR_": {"display": "NatRoseTree.beq", "context": ["The Lean Language Reference", "Type Classes", "Instance Declarations", "Recursive Instances", "Instances for nested types"]}}, "address": "/Type-Classes/Instance-Declarations/"}, {"id": "NatRoseTree___beq-_LPAR_in-Instances-for-nested-types_RPAR_", "data": {"/Type-Classes/Instance-Declarations/#NatRoseTree___beq-_LPAR_in-Instances-for-nested-types_RPAR_-next": {"display": "NatRoseTree.beq", "context": ["The Lean Language Reference", "Type Classes", "Instance Declarations", "Recursive Instances", "Instances for nested types"]}, "/Type-Classes/Instance-Declarations/#NatRoseTree___beq-_LPAR_in-Instances-for-nested-types_RPAR_": {"display": "NatRoseTree.beq", "context": ["The Lean Language Reference", "Type Classes", "Instance Declarations", "Recursive Instances", "Instances for nested types"]}}, "address": "/Type-Classes/Instance-Declarations/"}], "NatRoseTree (in Instances for nested types)": [{"id": "NatRoseTree-_LPAR_in-Instances-for-nested-types_RPAR_", "data": {"/Type-Classes/Instance-Declarations/#NatRoseTree-_LPAR_in-Instances-for-nested-types_RPAR_": {"display": "NatRoseTree", "context": ["The Lean Language Reference", "Type Classes", "Instance Declarations", "Recursive Instances", "Instances for nested types"]}}, "address": "/Type-Classes/Instance-Declarations/"}], "NatPair.y (in Local Instances)": [{"id": "NatPair___y-_LPAR_in-Local-Instances_RPAR_", "data": {"/Type-Classes/Instance-Synthesis/#NatPair___y-_LPAR_in-Local-Instances_RPAR_": {"display": "y", "context": ["The Lean Language Reference", "Type Classes", "Instance Synthesis", "Candidate Instances", "Local Instances"]}}, "address": "/Type-Classes/Instance-Synthesis/"}], "NatPair.y (in Local Instances Have Priority)": [{"id": "NatPair___y-_LPAR_in-Local-Instances-Have-Priority_RPAR_", "data": {"/Type-Classes/Instance-Synthesis/#NatPair___y-_LPAR_in-Local-Instances-Have-Priority_RPAR_": {"display": "y", "context": ["The Lean Language Reference", "Type Classes", "Instance Synthesis", "Candidate Instances", "Local Instances Have Priority"]}}, "address": "/Type-Classes/Instance-Synthesis/"}], "NatPair.x (in Local Instances)": [{"id": "NatPair___x-_LPAR_in-Local-Instances_RPAR_", "data": {"/Type-Classes/Instance-Synthesis/#NatPair___x-_LPAR_in-Local-Instances_RPAR_": {"display": "x", "context": ["The Lean Language Reference", "Type Classes", "Instance Synthesis", "Candidate Instances", "Local Instances"]}}, "address": "/Type-Classes/Instance-Synthesis/"}], "NatPair.x (in Local Instances Have Priority)": [{"id": "NatPair___x-_LPAR_in-Local-Instances-Have-Priority_RPAR_", "data": {"/Type-Classes/Instance-Synthesis/#NatPair___x-_LPAR_in-Local-Instances-Have-Priority_RPAR_": {"display": "x", "context": ["The Lean Language Reference", "Type Classes", "Instance Synthesis", "Candidate Instances", "Local Instances Have Priority"]}}, "address": "/Type-Classes/Instance-Synthesis/"}], "NatPair (in Local Instances)": [{"id": "NatPair-_LPAR_in-Local-Instances_RPAR_", "data": {"/Type-Classes/Instance-Synthesis/#NatPair-_LPAR_in-Local-Instances_RPAR_": {"display": "NatPair", "context": ["The Lean Language Reference", "Type Classes", "Instance Synthesis", "Candidate Instances", "Local Instances"]}}, "address": "/Type-Classes/Instance-Synthesis/"}], "NatPair (in Local Instances Have Priority)": [{"id": "NatPair-_LPAR_in-Local-Instances-Have-Priority_RPAR_", "data": {"/Type-Classes/Instance-Synthesis/#NatPair-_LPAR_in-Local-Instances-Have-Priority_RPAR_": {"display": "NatPair", "context": ["The Lean Language Reference", "Type Classes", "Instance Synthesis", "Candidate Instances", "Local Instances Have Priority"]}}, "address": "/Type-Classes/Instance-Synthesis/"}], "NatOrInt.nat (in Maximal Parentheses)": [{"id": "NatOrInt___nat-_LPAR_in-Maximal-Parentheses_RPAR_", "data": {"/Interacting-with-Lean/#NatOrInt___nat-_LPAR_in-Maximal-Parentheses_RPAR_": {"display": "nat", "context": ["The Lean Language Reference", "Interacting with Lean", "Formatted Output", "Repr", "Maximal Parentheses"]}}, "address": "/Interacting-with-Lean/"}], "NatOrInt.int (in Maximal Parentheses)": [{"id": "NatOrInt___int-_LPAR_in-Maximal-Parentheses_RPAR_", "data": {"/Interacting-with-Lean/#NatOrInt___int-_LPAR_in-Maximal-Parentheses_RPAR_": {"display": "int", "context": ["The Lean Language Reference", "Interacting with Lean", "Formatted Output", "Repr", "Maximal Parentheses"]}}, "address": "/Interacting-with-Lean/"}], "NatOrInt (in Maximal Parentheses)": [{"id": "NatOrInt-_LPAR_in-Maximal-Parentheses_RPAR_", "data": {"/Interacting-with-Lean/#NatOrInt-_LPAR_in-Maximal-Parentheses_RPAR_": {"display": "NatOrInt", "context": ["The Lean Language Reference", "Interacting with Lean", "Formatted Output", "Repr", "Maximal Parentheses"]}}, "address": "/Interacting-with-Lean/"}], "NatOrBool.nat (in Sort Coercions as Ordinary Coercions)": [{"id": "NatOrBool___nat-_LPAR_in-Sort-Coercions-as-Ordinary-Coercions_RPAR_", "data": {"/Coercions/Coercing-to-Sorts/#NatOrBool___nat-_LPAR_in-Sort-Coercions-as-Ordinary-Coercions_RPAR_": {"display": "nat", "context": ["The Lean Language Reference", "Coercions", "Coercing to Sorts", "Sort Coercions as Ordinary Coercions"]}}, "address": "/Coercions/Coercing-to-Sorts/"}], "NatOrBool.bool (in Sort Coercions as Ordinary Coercions)": [{"id": "NatOrBool___bool-_LPAR_in-Sort-Coercions-as-Ordinary-Coercions_RPAR_", "data": {"/Coercions/Coercing-to-Sorts/#NatOrBool___bool-_LPAR_in-Sort-Coercions-as-Ordinary-Coercions_RPAR_": {"display": "bool", "context": ["The Lean Language Reference", "Coercions", "Coercing to Sorts", "Sort Coercions as Ordinary Coercions"]}}, "address": "/Coercions/Coercing-to-Sorts/"}], "NatOrBool.asType (in Sort Coercions as Ordinary Coercions)": [{"id": "NatOrBool___asType-_LPAR_in-Sort-Coercions-as-Ordinary-Coercions_RPAR_", "data": {"/Coercions/Coercing-to-Sorts/#NatOrBool___asType-_LPAR_in-Sort-Coercions-as-Ordinary-Coercions_RPAR_": {"display": "NatOrBool.asType", "context": ["The Lean Language Reference", "Coercions", "Coercing to Sorts", "Sort Coercions as Ordinary Coercions"]}}, "address": "/Coercions/Coercing-to-Sorts/"}], "NatOrBool (in Sort Coercions as Ordinary Coercions)": [{"id": "NatOrBool-_LPAR_in-Sort-Coercions-as-Ordinary-Coercions_RPAR_", "data": {"/Coercions/Coercing-to-Sorts/#NatOrBool-_LPAR_in-Sort-Coercions-as-Ordinary-Coercions_RPAR_": {"display": "NatOrBool", "context": ["The Lean Language Reference", "Coercions", "Coercing to Sorts", "Sort Coercions as Ordinary Coercions"]}}, "address": "/Coercions/Coercing-to-Sorts/"}], "NatInterval.low_le_high (in Custom Natural Number Literals)": [{"id": "NatInterval___low_le_high-_LPAR_in-Custom-Natural-Number-Literals_RPAR_", "data": {"/Terms/Numeric-Literals/#NatInterval___low_le_high-_LPAR_in-Custom-Natural-Number-Literals_RPAR_": {"display": "low_le_high", "context": ["The Lean Language Reference", "Terms", "Numeric Literals", "Natural Numbers", "Custom Natural Number Literals"]}}, "address": "/Terms/Numeric-Literals/"}], "NatInterval.low (in Custom Natural Number Literals)": [{"id": "NatInterval___low-_LPAR_in-Custom-Natural-Number-Literals_RPAR_", "data": {"/Terms/Numeric-Literals/#NatInterval___low-_LPAR_in-Custom-Natural-Number-Literals_RPAR_": {"display": "low", "context": ["The Lean Language Reference", "Terms", "Numeric Literals", "Natural Numbers", "Custom Natural Number Literals"]}}, "address": "/Terms/Numeric-Literals/"}], "NatInterval.high (in Custom Natural Number Literals)": [{"id": "NatInterval___high-_LPAR_in-Custom-Natural-Number-Literals_RPAR_", "data": {"/Terms/Numeric-Literals/#NatInterval___high-_LPAR_in-Custom-Natural-Number-Literals_RPAR_": {"display": "high", "context": ["The Lean Language Reference", "Terms", "Numeric Literals", "Natural Numbers", "Custom Natural Number Literals"]}}, "address": "/Terms/Numeric-Literals/"}], "NatInterval (in Custom Natural Number Literals)": [{"id": "NatInterval-_LPAR_in-Custom-Natural-Number-Literals_RPAR_", "data": {"/Terms/Numeric-Literals/#NatInterval-_LPAR_in-Custom-Natural-Number-Literals_RPAR_": {"display": "NatInterval", "context": ["The Lean Language Reference", "Terms", "Numeric Literals", "Natural Numbers", "Custom Natural Number Literals"]}}, "address": "/Terms/Numeric-Literals/"}], "Nat.parity (in Inaccessible Patterns)": [{"id": "Nat___parity-_LPAR_in-Inaccessible-Patterns_RPAR_", "data": {"/Terms/Pattern-Matching/#Nat___parity-_LPAR_in-Inaccessible-Patterns_RPAR_": {"display": "Nat.parity", "context": ["The Lean Language Reference", "Terms", "Pattern Matching", "Inaccessible Patterns"]}}, "address": "/Terms/Pattern-Matching/"}], "Nat.otherZero (in Axioms and Stuck Reduction)": [{"id": "Nat___otherZero-_LPAR_in-Axioms-and-Stuck-Reduction_RPAR_", "data": {"/Axioms/#Nat___otherZero-_LPAR_in-Axioms-and-Stuck-Reduction_RPAR_": {"display": "Nat.otherZero", "context": ["The Lean Language Reference", "Axioms", "Reduction", "Axioms and Stuck Reduction"]}}, "address": "/Axioms/"}], "Nat.otherZero (in Axioms and Compilation)": [{"id": "Nat___otherZero-_LPAR_in-Axioms-and-Compilation_RPAR_", "data": {"/Axioms/#Nat___otherZero-_LPAR_in-Axioms-and-Compilation_RPAR_": {"display": "Nat.otherZero", "context": ["The Lean Language Reference", "Axioms", "Reduction", "Axioms and Compilation"]}}, "address": "/Axioms/"}], "Nat.half (in Turning Off Field Notation)": [{"id": "Nat___half-_LPAR_in-Turning-Off-Field-Notation_RPAR_", "data": {"/Terms/Function-Application/#Nat___half-_LPAR_in-Turning-Off-Field-Notation_RPAR_": {"display": "Nat.half", "context": ["The Lean Language Reference", "Terms", "Function Application", "Generalized Field Notation", "Turning Off Field Notation"]}}, "address": "/Terms/Function-Application/"}], "NamedFun.name (in Coercing Decorated Functions to Function Types)": [{"id": "NamedFun___name-_LPAR_in-Coercing-Decorated-Functions-to-Function-Types_RPAR_", "data": {"/Coercions/Coercing-to-Function-Types/#NamedFun___name-_LPAR_in-Coercing-Decorated-Functions-to-Function-Types_RPAR_": {"display": "name", "context": ["The Lean Language Reference", "Coercions", "Coercing to Function Types", "Coercing Decorated Functions to Function Types"]}}, "address": "/Coercions/Coercing-to-Function-Types/"}], "NamedFun.function (in Coercing Decorated Functions to Function Types)": [{"id": "NamedFun___function-_LPAR_in-Coercing-Decorated-Functions-to-Function-Types_RPAR_", "data": {"/Coercions/Coercing-to-Function-Types/#NamedFun___function-_LPAR_in-Coercing-Decorated-Functions-to-Function-Types_RPAR_": {"display": "function", "context": ["The Lean Language Reference", "Coercions", "Coercing to Function Types", "Coercing Decorated Functions to Function Types"]}}, "address": "/Coercions/Coercing-to-Function-Types/"}], "NamedFun.comp (in Coercing Decorated Functions to Function Types)": [{"id": "NamedFun___comp-_LPAR_in-Coercing-Decorated-Functions-to-Function-Types_RPAR_", "data": {"/Coercions/Coercing-to-Function-Types/#NamedFun___comp-_LPAR_in-Coercing-Decorated-Functions-to-Function-Types_RPAR_": {"display": "NamedFun.comp", "context": ["The Lean Language Reference", "Coercions", "Coercing to Function Types", "Coercing Decorated Functions to Function Types"]}}, "address": "/Coercions/Coercing-to-Function-Types/"}], "NamedFun (in Coercing Decorated Functions to Function Types)": [{"id": "NamedFun-_LPAR_in-Coercing-Decorated-Functions-to-Function-Types_RPAR_", "data": {"/Coercions/Coercing-to-Function-Types/#NamedFun-_LPAR_in-Coercing-Decorated-Functions-to-Function-Types_RPAR_": {"display": "NamedFun", "context": ["The Lean Language Reference", "Coercions", "Coercing to Function Types", "Coercing Decorated Functions to Function Types"]}}, "address": "/Coercions/Coercing-to-Function-Types/"}], "NS.three (in Opening Scoped Declarations)": [{"id": "NS___three-_LPAR_in-Opening-Scoped-Declarations_RPAR_", "data": {"/Namespaces-and-Sections/#NS___three-_LPAR_in-Opening-Scoped-Declarations_RPAR_": {"display": "three", "context": ["The Lean Language Reference", "Namespaces and Sections", "Namespaces", "Namespaces and Section Scopes", "Opening Scoped Declarations"]}}, "address": "/Namespaces-and-Sections/"}], "NS.interestingName (in Querying the Environment)": [{"id": "NS___interestingName-_LPAR_in-Querying-the-Environment_RPAR_", "data": {"/Notations-and-Macros/Elaborators/#NS___interestingName-_LPAR_in-Querying-the-Environment_RPAR_": {"display": "NS.interestingName", "context": ["The Lean Language Reference", "Notations and Macros", "Elaborators", "Command Elaborators", "Querying the Environment"]}}, "address": "/Notations-and-Macros/Elaborators/"}], "N.NatOrInt.nat (in Inductive Types with Constructors)": [{"id": "N___NatOrInt___nat-_LPAR_in-Inductive-Types-with-Constructors_RPAR_", "data": {"/Interacting-with-Lean/#N___NatOrInt___nat-_LPAR_in-Inductive-Types-with-Constructors_RPAR_": {"display": "nat", "context": ["The Lean Language Reference", "Interacting with Lean", "Formatted Output", "Repr", "How To Write a Repr Instance", "Inductive Types with Constructors"]}}, "address": "/Interacting-with-Lean/"}], "N.NatOrInt.int (in Inductive Types with Constructors)": [{"id": "N___NatOrInt___int-_LPAR_in-Inductive-Types-with-Constructors_RPAR_", "data": {"/Interacting-with-Lean/#N___NatOrInt___int-_LPAR_in-Inductive-Types-with-Constructors_RPAR_": {"display": "int", "context": ["The Lean Language Reference", "Interacting with Lean", "Formatted Output", "Repr", "How To Write a Repr Instance", "Inductive Types with Constructors"]}}, "address": "/Interacting-with-Lean/"}], "N.NatOrInt (in Inductive Types with Constructors)": [{"id": "N___NatOrInt-_LPAR_in-Inductive-Types-with-Constructors_RPAR_", "data": {"/Interacting-with-Lean/#N___NatOrInt-_LPAR_in-Inductive-Types-with-Constructors_RPAR_": {"display": "NatOrInt", "context": ["The Lean Language Reference", "Interacting with Lean", "Formatted Output", "Repr", "How To Write a Repr Instance", "Inductive Types with Constructors"]}}, "address": "/Interacting-with-Lean/"}], "MyStructure.field2 (in Auto-implicit parameters in structure fields)": [{"id": "MyStructure___field2-_LPAR_in-Auto-implicit-parameters-in-structure-fields_RPAR_", "data": {"/The-Type-System/Inductive-Types/#MyStructure___field2-_LPAR_in-Auto-implicit-parameters-in-structure-fields_RPAR_": {"display": "field2", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Structure Declarations", "Fields", "Auto-implicit parameters in structure fields"]}}, "address": "/The-Type-System/Inductive-Types/"}], "MyStructure.field1 (in Auto-implicit parameters in structure fields)": [{"id": "MyStructure___field1-_LPAR_in-Auto-implicit-parameters-in-structure-fields_RPAR_", "data": {"/The-Type-System/Inductive-Types/#MyStructure___field1-_LPAR_in-Auto-implicit-parameters-in-structure-fields_RPAR_": {"display": "field1", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Structure Declarations", "Fields", "Auto-implicit parameters in structure fields"]}}, "address": "/The-Type-System/Inductive-Types/"}], "MyStructure (in Auto-implicit parameters in structure fields)": [{"id": "MyStructure-_LPAR_in-Auto-implicit-parameters-in-structure-fields_RPAR_", "data": {"/The-Type-System/Inductive-Types/#MyStructure-_LPAR_in-Auto-implicit-parameters-in-structure-fields_RPAR_": {"display": "MyStructure", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Structure Declarations", "Fields", "Auto-implicit parameters in structure fields"]}}, "address": "/The-Type-System/Inductive-Types/"}], "MyList (in Leading . and Unfolding Definitions)": [{"id": "MyList-_LPAR_in-Leading--___--and-Unfolding-Definitions_RPAR_", "data": {"/Terms/Identifiers/#MyList-_LPAR_in-Leading--___--and-Unfolding-Definitions_RPAR_": {"display": "MyList", "context": ["The Lean Language Reference", "Terms", "Identifiers", "Leading .", "Leading . and Unfolding Definitions"]}}, "address": "/Terms/Identifiers/"}], "Monoid.op_id_identity (in Sort Coercions)": [{"id": "Monoid___op_id_identity-_LPAR_in-Sort-Coercions_RPAR_", "data": {"/Coercions/Coercing-to-Sorts/#Monoid___op_id_identity-_LPAR_in-Sort-Coercions_RPAR_": {"display": "op_id_identity", "context": ["The Lean Language Reference", "Coercions", "Coercing to Sorts", "Sort Coercions"]}}, "address": "/Coercions/Coercing-to-Sorts/"}], "Monoid.op_assoc (in Sort Coercions)": [{"id": "Monoid___op_assoc-_LPAR_in-Sort-Coercions_RPAR_", "data": {"/Coercions/Coercing-to-Sorts/#Monoid___op_assoc-_LPAR_in-Sort-Coercions_RPAR_": {"display": "op_assoc", "context": ["The Lean Language Reference", "Coercions", "Coercing to Sorts", "Sort Coercions"]}}, "address": "/Coercions/Coercing-to-Sorts/"}], "Monoid.op (in Sort Coercions)": [{"id": "Monoid___op-_LPAR_in-Sort-Coercions_RPAR_", "data": {"/Coercions/Coercing-to-Sorts/#Monoid___op-_LPAR_in-Sort-Coercions_RPAR_": {"display": "op", "context": ["The Lean Language Reference", "Coercions", "Coercing to Sorts", "Sort Coercions"]}}, "address": "/Coercions/Coercing-to-Sorts/"}], "Monoid.id_op_identity (in Sort Coercions)": [{"id": "Monoid___id_op_identity-_LPAR_in-Sort-Coercions_RPAR_", "data": {"/Coercions/Coercing-to-Sorts/#Monoid___id_op_identity-_LPAR_in-Sort-Coercions_RPAR_": {"display": "id_op_identity", "context": ["The Lean Language Reference", "Coercions", "Coercing to Sorts", "Sort Coercions"]}}, "address": "/Coercions/Coercing-to-Sorts/"}], "Monoid.id (in Sort Coercions)": [{"id": "Monoid___id-_LPAR_in-Sort-Coercions_RPAR_", "data": {"/Coercions/Coercing-to-Sorts/#Monoid___id-_LPAR_in-Sort-Coercions_RPAR_": {"display": "id", "context": ["The Lean Language Reference", "Coercions", "Coercing to Sorts", "Sort Coercions"]}}, "address": "/Coercions/Coercing-to-Sorts/"}], "Monoid.Carrier (in Sort Coercions)": [{"id": "Monoid___Carrier-_LPAR_in-Sort-Coercions_RPAR_", "data": {"/Coercions/Coercing-to-Sorts/#Monoid___Carrier-_LPAR_in-Sort-Coercions_RPAR_": {"display": "Carrier", "context": ["The Lean Language Reference", "Coercions", "Coercing to Sorts", "Sort Coercions"]}}, "address": "/Coercions/Coercing-to-Sorts/"}], "Monoid (in Sort Coercions)": [{"id": "Monoid-_LPAR_in-Sort-Coercions_RPAR_", "data": {"/Coercions/Coercing-to-Sorts/#Monoid-_LPAR_in-Sort-Coercions_RPAR_": {"display": "Monoid", "context": ["The Lean Language Reference", "Coercions", "Coercing to Sorts", "Sort Coercions"]}}, "address": "/Coercions/Coercing-to-Sorts/"}], "Maze.wf (in Nested Inductive Types with Std.HashMap)": [{"id": "Maze___wf-_LPAR_in-Nested-Inductive-Types-with--Std___HashMap_RPAR_", "data": {"/Basic-Types/Maps-and-Sets/#Maze___wf-_LPAR_in-Nested-Inductive-Types-with--Std___HashMap_RPAR_": {"display": "wf", "context": ["The Lean Language Reference", "Basic Types", "Maps and Sets", "Library Design", "Raw Data and Invariants", "Nested Inductive Types with Std.HashMap"]}}, "address": "/Basic-Types/Maps-and-Sets/"}], "Maze.raw (in Nested Inductive Types with Std.HashMap)": [{"id": "Maze___raw-_LPAR_in-Nested-Inductive-Types-with--Std___HashMap_RPAR_", "data": {"/Basic-Types/Maps-and-Sets/#Maze___raw-_LPAR_in-Nested-Inductive-Types-with--Std___HashMap_RPAR_": {"display": "raw", "context": ["The Lean Language Reference", "Basic Types", "Maps and Sets", "Library Design", "Raw Data and Invariants", "Nested Inductive Types with Std.HashMap"]}}, "address": "/Basic-Types/Maps-and-Sets/"}], "Maze.insert (in Nested Inductive Types with Std.HashMap)": [{"id": "Maze___insert-_LPAR_in-Nested-Inductive-Types-with--Std___HashMap_RPAR_", "data": {"/Basic-Types/Maps-and-Sets/#Maze___insert-_LPAR_in-Nested-Inductive-Types-with--Std___HashMap_RPAR_": {"display": "Maze.insert", "context": ["The Lean Language Reference", "Basic Types", "Maps and Sets", "Library Design", "Raw Data and Invariants", "Nested Inductive Types with Std.HashMap"]}}, "address": "/Basic-Types/Maps-and-Sets/"}], "Maze.go? (in Nested Inductive Types with Std.HashMap)": [{"id": "Maze___go___-_LPAR_in-Nested-Inductive-Types-with--Std___HashMap_RPAR_", "data": {"/Basic-Types/Maps-and-Sets/#Maze___go___-_LPAR_in-Nested-Inductive-Types-with--Std___HashMap_RPAR_": {"display": "Maze.go?", "context": ["The Lean Language Reference", "Basic Types", "Maps and Sets", "Library Design", "Raw Data and Invariants", "Nested Inductive Types with Std.HashMap"]}}, "address": "/Basic-Types/Maps-and-Sets/"}], "Maze.description (in Nested Inductive Types with Std.HashMap)": [{"id": "Maze___description-_LPAR_in-Nested-Inductive-Types-with--Std___HashMap_RPAR_", "data": {"/Basic-Types/Maps-and-Sets/#Maze___description-_LPAR_in-Nested-Inductive-Types-with--Std___HashMap_RPAR_": {"display": "Maze.description", "context": ["The Lean Language Reference", "Basic Types", "Maps and Sets", "Library Design", "Raw Data and Invariants", "Nested Inductive Types with Std.HashMap"]}}, "address": "/Basic-Types/Maps-and-Sets/"}], "Maze.base (in Nested Inductive Types with Std.HashMap)": [{"id": "Maze___base-_LPAR_in-Nested-Inductive-Types-with--Std___HashMap_RPAR_", "data": {"/Basic-Types/Maps-and-Sets/#Maze___base-_LPAR_in-Nested-Inductive-Types-with--Std___HashMap_RPAR_": {"display": "Maze.base", "context": ["The Lean Language Reference", "Basic Types", "Maps and Sets", "Library Design", "Raw Data and Invariants", "Nested Inductive Types with Std.HashMap"]}}, "address": "/Basic-Types/Maps-and-Sets/"}], "Maze (in Nested Inductive Types with Std.HashMap)": [{"id": "Maze-_LPAR_in-Nested-Inductive-Types-with--Std___HashMap_RPAR_", "data": {"/Basic-Types/Maps-and-Sets/#Maze-_LPAR_in-Nested-Inductive-Types-with--Std___HashMap_RPAR_-next": {"display": "Maze", "context": ["The Lean Language Reference", "Basic Types", "Maps and Sets", "Library Design", "Raw Data and Invariants", "Nested Inductive Types with Std.HashMap"]}, "/Basic-Types/Maps-and-Sets/#Maze-_LPAR_in-Nested-Inductive-Types-with--Std___HashMap_RPAR_": {"display": "Maze", "context": ["The Lean Language Reference", "Basic Types", "Maps and Sets", "Library Design", "Raw Data and Invariants", "Nested Inductive Types with Std.HashMap"]}}, "address": "/Basic-Types/Maps-and-Sets/"}, {"id": "Maze-_LPAR_in-Nested-Inductive-Types-with--Std___HashMap_RPAR_-next", "data": {"/Basic-Types/Maps-and-Sets/#Maze-_LPAR_in-Nested-Inductive-Types-with--Std___HashMap_RPAR_-next": {"display": "Maze", "context": ["The Lean Language Reference", "Basic Types", "Maps and Sets", "Library Design", "Raw Data and Invariants", "Nested Inductive Types with Std.HashMap"]}, "/Basic-Types/Maps-and-Sets/#Maze-_LPAR_in-Nested-Inductive-Types-with--Std___HashMap_RPAR_": {"display": "Maze", "context": ["The Lean Language Reference", "Basic Types", "Maps and Sets", "Library Design", "Raw Data and Invariants", "Nested Inductive Types with Std.HashMap"]}}, "address": "/Basic-Types/Maps-and-Sets/"}], "M (in State Types)": [{"id": "M-_LPAR_in-State-Types_RPAR_", "data": {"/Functors___-Monads-and--do--Notation/Varieties-of-Monads/#M-_LPAR_in-State-Types_RPAR_": {"display": "M", "context": ["The Lean Language Reference", "Functors, Monads and do -Notation", "Varieties of Monads", "Monad Type Classes", "State Types"]}}, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "LogM.value (in A Logging Monad)": [{"id": "LogM___value-_LPAR_in-A-Logging-Monad_RPAR_", "data": {"/The--mvcgen--tactic/Enabling--mvcgen--For-Monads/#LogM___value-_LPAR_in-A-Logging-Monad_RPAR_": {"display": "value", "context": ["The Lean Language Reference", "The mvcgen tactic", "Enabling mvcgen For Monads", "A Logging Monad"]}}, "address": "/The--mvcgen--tactic/Enabling--mvcgen--For-Monads/"}], "LogM.run (in A Logging Monad)": [{"id": "LogM___run-_LPAR_in-A-Logging-Monad_RPAR_", "data": {"/The--mvcgen--tactic/Enabling--mvcgen--For-Monads/#LogM___run-_LPAR_in-A-Logging-Monad_RPAR_": {"display": "LogM.run", "context": ["The Lean Language Reference", "The mvcgen tactic", "Enabling mvcgen For Monads", "A Logging Monad"]}}, "address": "/The--mvcgen--tactic/Enabling--mvcgen--For-Monads/"}], "LogM.of_wp_run_eq (in A Logging Monad)": [{"id": "LogM___of_wp_run_eq-_LPAR_in-A-Logging-Monad_RPAR_", "data": {"/The--mvcgen--tactic/Enabling--mvcgen--For-Monads/#LogM___of_wp_run_eq-_LPAR_in-A-Logging-Monad_RPAR_": {"display": "LogM.of_wp_run_eq", "context": ["The Lean Language Reference", "The mvcgen tactic", "Enabling mvcgen For Monads", "A Logging Monad"]}}, "address": "/The--mvcgen--tactic/Enabling--mvcgen--For-Monads/"}], "LogM.log (in A Logging Monad)": [{"id": "LogM___log-_LPAR_in-A-Logging-Monad_RPAR_", "data": {"/The--mvcgen--tactic/Enabling--mvcgen--For-Monads/#LogM___log-_LPAR_in-A-Logging-Monad_RPAR_": {"display": "log", "context": ["The Lean Language Reference", "The mvcgen tactic", "Enabling mvcgen For Monads", "A Logging Monad"]}}, "address": "/The--mvcgen--tactic/Enabling--mvcgen--For-Monads/"}], "LogM (in A Logging Monad)": [{"id": "LogM-_LPAR_in-A-Logging-Monad_RPAR_", "data": {"/The--mvcgen--tactic/Enabling--mvcgen--For-Monads/#LogM-_LPAR_in-A-Logging-Monad_RPAR_": {"display": "LogM", "context": ["The Lean Language Reference", "The mvcgen tactic", "Enabling mvcgen For Monads", "A Logging Monad"]}}, "address": "/The--mvcgen--tactic/Enabling--mvcgen--For-Monads/"}], "LocatedStx.mk (in Nested positions)": [{"id": "LocatedStx___mk-_LPAR_in-Nested-positions_RPAR_", "data": {"/The-Type-System/Inductive-Types/#LocatedStx___mk-_LPAR_in-Nested-positions_RPAR_": {"display": "mk", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Mutual Inductive Types", "Requirements", "Positivity", "Nested positions"]}}, "address": "/The-Type-System/Inductive-Types/"}], "LocatedStx (in Nested positions)": [{"id": "LocatedStx-_LPAR_in-Nested-positions_RPAR_", "data": {"/The-Type-System/Inductive-Types/#LocatedStx-_LPAR_in-Nested-positions_RPAR_": {"display": "LocatedStx", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Mutual Inductive Types", "Requirements", "Positivity", "Nested positions"]}}, "address": "/The-Type-System/Inductive-Types/"}], "ListCursor.right (in Unexpansion and Arguments)": [{"id": "ListCursor___right-_LPAR_in-Unexpansion-and-Arguments_RPAR_", "data": {"/Notations-and-Macros/Extending-Lean___s-Output/#ListCursor___right-_LPAR_in-Unexpansion-and-Arguments_RPAR_": {"display": "ListCursor.right", "context": ["The Lean Language Reference", "Notations and Macros", "Extending Lean's Output", "Unexpanders", "Unexpansion and Arguments"]}}, "address": "/Notations-and-Macros/Extending-Lean___s-Output/"}], "ListCursor.rewind (in Unexpansion and Arguments)": [{"id": "ListCursor___rewind-_LPAR_in-Unexpansion-and-Arguments_RPAR_", "data": {"/Notations-and-Macros/Extending-Lean___s-Output/#ListCursor___rewind-_LPAR_in-Unexpansion-and-Arguments_RPAR_": {"display": "ListCursor.rewind", "context": ["The Lean Language Reference", "Notations and Macros", "Extending Lean's Output", "Unexpanders", "Unexpansion and Arguments"]}}, "address": "/Notations-and-Macros/Extending-Lean___s-Output/"}], "ListCursor.left (in Unexpansion and Arguments)": [{"id": "ListCursor___left-_LPAR_in-Unexpansion-and-Arguments_RPAR_", "data": {"/Notations-and-Macros/Extending-Lean___s-Output/#ListCursor___left-_LPAR_in-Unexpansion-and-Arguments_RPAR_": {"display": "ListCursor.left", "context": ["The Lean Language Reference", "Notations and Macros", "Extending Lean's Output", "Unexpanders", "Unexpansion and Arguments"]}}, "address": "/Notations-and-Macros/Extending-Lean___s-Output/"}], "ListCursor.fastForward (in Unexpansion and Arguments)": [{"id": "ListCursor___fastForward-_LPAR_in-Unexpansion-and-Arguments_RPAR_", "data": {"/Notations-and-Macros/Extending-Lean___s-Output/#ListCursor___fastForward-_LPAR_in-Unexpansion-and-Arguments_RPAR_": {"display": "ListCursor.fastForward", "context": ["The Lean Language Reference", "Notations and Macros", "Extending Lean's Output", "Unexpanders", "Unexpansion and Arguments"]}}, "address": "/Notations-and-Macros/Extending-Lean___s-Output/"}], "ListCursor.before (in Unexpansion and Arguments)": [{"id": "ListCursor___before-_LPAR_in-Unexpansion-and-Arguments_RPAR_", "data": {"/Notations-and-Macros/Extending-Lean___s-Output/#ListCursor___before-_LPAR_in-Unexpansion-and-Arguments_RPAR_": {"display": "before", "context": ["The Lean Language Reference", "Notations and Macros", "Extending Lean's Output", "Unexpanders", "Unexpansion and Arguments"]}}, "address": "/Notations-and-Macros/Extending-Lean___s-Output/"}], "ListCursor.after (in Unexpansion and Arguments)": [{"id": "ListCursor___after-_LPAR_in-Unexpansion-and-Arguments_RPAR_", "data": {"/Notations-and-Macros/Extending-Lean___s-Output/#ListCursor___after-_LPAR_in-Unexpansion-and-Arguments_RPAR_": {"display": "after", "context": ["The Lean Language Reference", "Notations and Macros", "Extending Lean's Output", "Unexpanders", "Unexpansion and Arguments"]}}, "address": "/Notations-and-Macros/Extending-Lean___s-Output/"}], "ListCursor (in Unexpansion and Arguments)": [{"id": "ListCursor-_LPAR_in-Unexpansion-and-Arguments_RPAR_", "data": {"/Notations-and-Macros/Extending-Lean___s-Output/#ListCursor-_LPAR_in-Unexpansion-and-Arguments_RPAR_": {"display": "ListCursor", "context": ["The Lean Language Reference", "Notations and Macros", "Extending Lean's Output", "Unexpanders", "Unexpansion and Arguments"]}}, "address": "/Notations-and-Macros/Extending-Lean___s-Output/"}], "List.myMap (in Enriched Proof Obligation Contexts)": [{"id": "List___myMap-_LPAR_in-Enriched-Proof-Obligation-Contexts_RPAR_", "data": {"/Definitions/Recursive-Definitions/#List___myMap-_LPAR_in-Enriched-Proof-Obligation-Contexts_RPAR_": {"display": "List.myMap", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Well-Founded Recursion", "Termination proofs", "Enriched Proof Obligation Contexts"]}}, "address": "/Definitions/Recursive-Definitions/"}], "List.free_theorem (in Inconsistencies From Axioms)": [{"id": "List___free_theorem-_LPAR_in-Inconsistencies-From-Axioms_RPAR_", "data": {"/Axioms/#List___free_theorem-_LPAR_in-Inconsistencies-From-Axioms_RPAR_": {"display": "List.free_theorem", "context": ["The Lean Language Reference", "Axioms", "Consistency", "Inconsistencies From Axioms"]}}, "address": "/Axioms/"}], "List.findIndex_implies_pred (in Partial Correctness Theorem)": [{"id": "List___findIndex_implies_pred-_LPAR_in-Partial-Correctness-Theorem_RPAR_", "data": {"/Definitions/Recursive-Definitions/#List___findIndex_implies_pred-_LPAR_in-Partial-Correctness-Theorem_RPAR_": {"display": "List.findIndex_implies_pred", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Partial Fixpoint Recursion", "Partial Correctness Theorems", "Partial Correctness Theorem"]}}, "address": "/Definitions/Recursive-Definitions/"}], "List.findIndex (in Tail Recursion with Branching)": [{"id": "List___findIndex-_LPAR_in-Tail-Recursion-with-Branching_RPAR_", "data": {"/Definitions/Recursive-Definitions/#List___findIndex-_LPAR_in-Tail-Recursion-with-Branching_RPAR_": {"display": "List.findIndex", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Partial Fixpoint Recursion", "Tail-Recursive Functions", "Tail Recursion with Branching"]}}, "address": "/Definitions/Recursive-Definitions/"}], "List.findIndex (in Partial Correctness Theorem)": [{"id": "List___findIndex-_LPAR_in-Partial-Correctness-Theorem_RPAR_", "data": {"/Definitions/Recursive-Definitions/#List___findIndex-_LPAR_in-Partial-Correctness-Theorem_RPAR_": {"display": "List.findIndex", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Partial Fixpoint Recursion", "Partial Correctness Theorems", "Partial Correctness Theorem"]}}, "address": "/Definitions/Recursive-Definitions/"}], "List.findIndex (in Monadic functions)": [{"id": "List___findIndex-_LPAR_in-Monadic-functions_RPAR_", "data": {"/Definitions/Recursive-Definitions/#List___findIndex-_LPAR_in-Monadic-functions_RPAR_-next": {"display": "List.findIndex", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Partial Fixpoint Recursion", "Monadic functions", "Monadic functions"]}, "/Definitions/Recursive-Definitions/#List___findIndex-_LPAR_in-Monadic-functions_RPAR_": {"display": "List.findIndex", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Partial Fixpoint Recursion", "Monadic functions", "Monadic functions"]}}, "address": "/Definitions/Recursive-Definitions/"}, {"id": "List___findIndex-_LPAR_in-Monadic-functions_RPAR_-next", "data": {"/Definitions/Recursive-Definitions/#List___findIndex-_LPAR_in-Monadic-functions_RPAR_-next": {"display": "List.findIndex", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Partial Fixpoint Recursion", "Monadic functions", "Monadic functions"]}, "/Definitions/Recursive-Definitions/#List___findIndex-_LPAR_in-Monadic-functions_RPAR_": {"display": "List.findIndex", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Partial Fixpoint Recursion", "Monadic functions", "Monadic functions"]}}, "address": "/Definitions/Recursive-Definitions/"}], "List.disjoint": [{"id": "List___disjoint", "data": {"/The--grind--tactic/Bigger-Examples/#List___disjoint": {"display": "_root_.List.disjoint", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "if - then - else Normalization", "The formal statement"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}], "List.brecOnTable (in Course-of-Values Tables)": [{"id": "List___brecOnTable-_LPAR_in-Course-of-Values-Tables_RPAR_", "data": {"/Definitions/Recursive-Definitions/#List___brecOnTable-_LPAR_in-Course-of-Values-Tables_RPAR_": {"display": "List.brecOnTable", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Structural Recursion", "Elaboration Using Course-of-Values Recursion", "Course-of-Values Tables"]}}, "address": "/Definitions/Recursive-Definitions/"}], "List.brecOn' (in Course-of-Values Tables)": [{"id": "List___brecOn___-_LPAR_in-Course-of-Values-Tables_RPAR_", "data": {"/Definitions/Recursive-Definitions/#List___brecOn___-_LPAR_in-Course-of-Values-Tables_RPAR_": {"display": "List.brecOn'", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Structural Recursion", "Elaboration Using Course-of-Values Recursion", "Course-of-Values Tables"]}}, "address": "/Definitions/Recursive-Definitions/"}], "List.below' (in Course-of-Values Tables)": [{"id": "List___below___-_LPAR_in-Course-of-Values-Tables_RPAR_", "data": {"/Definitions/Recursive-Definitions/#List___below___-_LPAR_in-Course-of-Values-Tables_RPAR_": {"display": "List.below'", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Structural Recursion", "Elaboration Using Course-of-Values Recursion", "Course-of-Values Tables"]}}, "address": "/Definitions/Recursive-Definitions/"}], "LengthList (in Computing types)": [{"id": "LengthList-_LPAR_in-Computing-types_RPAR_", "data": {"/The-Type-System/#LengthList-_LPAR_in-Computing-types_RPAR_": {"display": "LengthList", "context": ["The Lean Language Reference", "The Type System", "Computing types"]}}, "address": "/The-Type-System/"}], "LenList.zipWith (in Lists with Lengths as Applicative Functors)": [{"id": "LenList___zipWith-_LPAR_in-Lists-with-Lengths-as-Applicative-Functors_RPAR_", "data": {"/Functors___-Monads-and--do--Notation/#LenList___zipWith-_LPAR_in-Lists-with-Lengths-as-Applicative-Functors_RPAR_": {"display": "LenList.zipWith", "context": ["The Lean Language Reference", "Functors, Monads and do -Notation", "Lists with Lengths as Applicative Functors"]}}, "address": "/Functors___-Monads-and--do--Notation/"}], "LenList.tail (in Lists with Lengths as Applicative Functors)": [{"id": "LenList___tail-_LPAR_in-Lists-with-Lengths-as-Applicative-Functors_RPAR_", "data": {"/Functors___-Monads-and--do--Notation/#LenList___tail-_LPAR_in-Lists-with-Lengths-as-Applicative-Functors_RPAR_": {"display": "LenList.tail", "context": ["The Lean Language Reference", "Functors, Monads and do -Notation", "Lists with Lengths as Applicative Functors"]}}, "address": "/Functors___-Monads-and--do--Notation/"}], "LenList.map (in Lists with Lengths as Applicative Functors)": [{"id": "LenList___map-_LPAR_in-Lists-with-Lengths-as-Applicative-Functors_RPAR_", "data": {"/Functors___-Monads-and--do--Notation/#LenList___map-_LPAR_in-Lists-with-Lengths-as-Applicative-Functors_RPAR_": {"display": "LenList.map", "context": ["The Lean Language Reference", "Functors, Monads and do -Notation", "Lists with Lengths as Applicative Functors"]}}, "address": "/Functors___-Monads-and--do--Notation/"}], "LenList.list_length_eq (in Lists with Lengths as Applicative Functors)": [{"id": "LenList___list_length_eq-_LPAR_in-Lists-with-Lengths-as-Applicative-Functors_RPAR_", "data": {"/Functors___-Monads-and--do--Notation/#LenList___list_length_eq-_LPAR_in-Lists-with-Lengths-as-Applicative-Functors_RPAR_": {"display": "LenList.list_length_eq", "context": ["The Lean Language Reference", "Functors, Monads and do -Notation", "Lists with Lengths as Applicative Functors"]}}, "address": "/Functors___-Monads-and--do--Notation/"}], "LenList.list (in Lists with Lengths as Applicative Functors)": [{"id": "LenList___list-_LPAR_in-Lists-with-Lengths-as-Applicative-Functors_RPAR_", "data": {"/Functors___-Monads-and--do--Notation/#LenList___list-_LPAR_in-Lists-with-Lengths-as-Applicative-Functors_RPAR_": {"display": "list", "context": ["The Lean Language Reference", "Functors, Monads and do -Notation", "Lists with Lengths as Applicative Functors"]}}, "address": "/Functors___-Monads-and--do--Notation/"}], "LenList.lengthOk (in Lists with Lengths as Applicative Functors)": [{"id": "LenList___lengthOk-_LPAR_in-Lists-with-Lengths-as-Applicative-Functors_RPAR_", "data": {"/Functors___-Monads-and--do--Notation/#LenList___lengthOk-_LPAR_in-Lists-with-Lengths-as-Applicative-Functors_RPAR_": {"display": "lengthOk", "context": ["The Lean Language Reference", "Functors, Monads and do -Notation", "Lists with Lengths as Applicative Functors"]}}, "address": "/Functors___-Monads-and--do--Notation/"}], "LenList.head (in Lists with Lengths as Applicative Functors)": [{"id": "LenList___head-_LPAR_in-Lists-with-Lengths-as-Applicative-Functors_RPAR_", "data": {"/Functors___-Monads-and--do--Notation/#LenList___head-_LPAR_in-Lists-with-Lengths-as-Applicative-Functors_RPAR_": {"display": "LenList.head", "context": ["The Lean Language Reference", "Functors, Monads and do -Notation", "Lists with Lengths as Applicative Functors"]}}, "address": "/Functors___-Monads-and--do--Notation/"}], "LenList.diagonal (in Lists with Lengths as Applicative Functors)": [{"id": "LenList___diagonal-_LPAR_in-Lists-with-Lengths-as-Applicative-Functors_RPAR_", "data": {"/Functors___-Monads-and--do--Notation/#LenList___diagonal-_LPAR_in-Lists-with-Lengths-as-Applicative-Functors_RPAR_": {"display": "LenList.diagonal", "context": ["The Lean Language Reference", "Functors, Monads and do -Notation", "Lists with Lengths as Applicative Functors"]}}, "address": "/Functors___-Monads-and--do--Notation/"}], "LenList (in Lists with Lengths as Applicative Functors)": [{"id": "LenList-_LPAR_in-Lists-with-Lengths-as-Applicative-Functors_RPAR_", "data": {"/Functors___-Monads-and--do--Notation/#LenList-_LPAR_in-Lists-with-Lengths-as-Applicative-Functors_RPAR_": {"display": "LenList", "context": ["The Lean Language Reference", "Functors, Monads and do -Notation", "Lists with Lengths as Applicative Functors"]}}, "address": "/Functors___-Monads-and--do--Notation/"}], "Lean.Parser.Category.balanced (in Parsing Matched Parentheses and Brackets)": [{"id": "Lean___Parser___Category___balanced-_LPAR_in-Parsing-Matched-Parentheses-and-Brackets_RPAR_", "data": {"/Notations-and-Macros/Defining-New-Syntax/#Lean___Parser___Category___balanced-_LPAR_in-Parsing-Matched-Parentheses-and-Brackets_RPAR_": {"display": "balanced", "context": ["The Lean Language Reference", "Notations and Macros", "Defining New Syntax", "Syntax Rules", "Parsing Matched Parentheses and Brackets"]}}, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "LazyList.toList (in Lazy Lists)": [{"id": "LazyList___toList-_LPAR_in-Lazy-Lists_RPAR_", "data": {"/Basic-Types/Lazy-Computations/#LazyList___toList-_LPAR_in-Lazy-Lists_RPAR_": {"display": "LazyList.toList", "context": ["The Lean Language Reference", "Basic Types", "Lazy Computations", "Coercions", "Lazy Lists"]}}, "address": "/Basic-Types/Lazy-Computations/"}], "LazyList.take (in Lazy Lists)": [{"id": "LazyList___take-_LPAR_in-Lazy-Lists_RPAR_", "data": {"/Basic-Types/Lazy-Computations/#LazyList___take-_LPAR_in-Lazy-Lists_RPAR_": {"display": "LazyList.take", "context": ["The Lean Language Reference", "Basic Types", "Lazy Computations", "Coercions", "Lazy Lists"]}}, "address": "/Basic-Types/Lazy-Computations/"}], "LazyList.ofFn (in Lazy Lists)": [{"id": "LazyList___ofFn-_LPAR_in-Lazy-Lists_RPAR_", "data": {"/Basic-Types/Lazy-Computations/#LazyList___ofFn-_LPAR_in-Lazy-Lists_RPAR_": {"display": "LazyList.ofFn", "context": ["The Lean Language Reference", "Basic Types", "Lazy Computations", "Coercions", "Lazy Lists"]}}, "address": "/Basic-Types/Lazy-Computations/"}], "LazyList.nil (in Lazy Lists)": [{"id": "LazyList___nil-_LPAR_in-Lazy-Lists_RPAR_", "data": {"/Basic-Types/Lazy-Computations/#LazyList___nil-_LPAR_in-Lazy-Lists_RPAR_": {"display": "nil", "context": ["The Lean Language Reference", "Basic Types", "Lazy Computations", "Coercions", "Lazy Lists"]}}, "address": "/Basic-Types/Lazy-Computations/"}], "LazyList.delayed (in Lazy Lists)": [{"id": "LazyList___delayed-_LPAR_in-Lazy-Lists_RPAR_", "data": {"/Basic-Types/Lazy-Computations/#LazyList___delayed-_LPAR_in-Lazy-Lists_RPAR_": {"display": "delayed", "context": ["The Lean Language Reference", "Basic Types", "Lazy Computations", "Coercions", "Lazy Lists"]}}, "address": "/Basic-Types/Lazy-Computations/"}], "LazyList.cons (in Lazy Lists)": [{"id": "LazyList___cons-_LPAR_in-Lazy-Lists_RPAR_", "data": {"/Basic-Types/Lazy-Computations/#LazyList___cons-_LPAR_in-Lazy-Lists_RPAR_": {"display": "cons", "context": ["The Lean Language Reference", "Basic Types", "Lazy Computations", "Coercions", "Lazy Lists"]}}, "address": "/Basic-Types/Lazy-Computations/"}], "LazyList.append (in Lazy Lists)": [{"id": "LazyList___append-_LPAR_in-Lazy-Lists_RPAR_", "data": {"/Basic-Types/Lazy-Computations/#LazyList___append-_LPAR_in-Lazy-Lists_RPAR_": {"display": "LazyList.append", "context": ["The Lean Language Reference", "Basic Types", "Lazy Computations", "Coercions", "Lazy Lists"]}}, "address": "/Basic-Types/Lazy-Computations/"}], "LazyList (in Lazy Lists)": [{"id": "LazyList-_LPAR_in-Lazy-Lists_RPAR_", "data": {"/Basic-Types/Lazy-Computations/#LazyList-_LPAR_in-Lazy-Lists_RPAR_": {"display": "LazyList", "context": ["The Lean Language Reference", "Basic Types", "Lazy Computations", "Coercions", "Lazy Lists"]}}, "address": "/Basic-Types/Lazy-Computations/"}], "Later.get (in Controlling Evaluation with Coercions)": [{"id": "Later___get-_LPAR_in-Controlling-Evaluation-with-Coercions_RPAR_", "data": {"/Coercions/Coercion-Insertion/#Later___get-_LPAR_in-Controlling-Evaluation-with-Coercions_RPAR_": {"display": "get", "context": ["The Lean Language Reference", "Coercions", "Coercion Insertion", "Controlling Evaluation with Coercions"]}}, "address": "/Coercions/Coercion-Insertion/"}], "Later (in Controlling Evaluation with Coercions)": [{"id": "Later-_LPAR_in-Controlling-Evaluation-with-Coercions_RPAR_", "data": {"/Coercions/Coercion-Insertion/#Later-_LPAR_in-Controlling-Evaluation-with-Coercions_RPAR_": {"display": "Later", "context": ["The Lean Language Reference", "Coercions", "Coercion Insertion", "Controlling Evaluation with Coercions"]}}, "address": "/Coercions/Coercion-Insertion/"}], "L (in Automatic universe parameters and the universe command)": [{"id": "L-_LPAR_in-Automatic-universe-parameters-and-the--universe--command_RPAR_-next-next-next", "data": {"/The-Type-System/Universes/#L-_LPAR_in-Automatic-universe-parameters-and-the--universe--command_RPAR_-next-next-next": {"display": "L", "context": ["The Lean Language Reference", "The Type System", "Universes", "Polymorphism", "Universe Variable Bindings", "Automatic universe parameters and the universe command"]}, "/The-Type-System/Universes/#L-_LPAR_in-Automatic-universe-parameters-and-the--universe--command_RPAR_-next-next": {"display": "L", "context": ["The Lean Language Reference", "The Type System", "Universes", "Polymorphism", "Universe Variable Bindings", "Automatic universe parameters and the universe command"]}, "/The-Type-System/Universes/#L-_LPAR_in-Automatic-universe-parameters-and-the--universe--command_RPAR_-next": {"display": "L", "context": ["The Lean Language Reference", "The Type System", "Universes", "Polymorphism", "Universe Variable Bindings", "Automatic universe parameters and the universe command"]}, "/The-Type-System/Universes/#L-_LPAR_in-Automatic-universe-parameters-and-the--universe--command_RPAR_": {"display": "L", "context": ["The Lean Language Reference", "The Type System", "Universes", "Polymorphism", "Universe Variable Bindings", "Automatic universe parameters and the universe command"]}}, "address": "/The-Type-System/Universes/"}, {"id": "L-_LPAR_in-Automatic-universe-parameters-and-the--universe--command_RPAR_-next-next", "data": {"/The-Type-System/Universes/#L-_LPAR_in-Automatic-universe-parameters-and-the--universe--command_RPAR_-next-next-next": {"display": "L", "context": ["The Lean Language Reference", "The Type System", "Universes", "Polymorphism", "Universe Variable Bindings", "Automatic universe parameters and the universe command"]}, "/The-Type-System/Universes/#L-_LPAR_in-Automatic-universe-parameters-and-the--universe--command_RPAR_-next-next": {"display": "L", "context": ["The Lean Language Reference", "The Type System", "Universes", "Polymorphism", "Universe Variable Bindings", "Automatic universe parameters and the universe command"]}, "/The-Type-System/Universes/#L-_LPAR_in-Automatic-universe-parameters-and-the--universe--command_RPAR_-next": {"display": "L", "context": ["The Lean Language Reference", "The Type System", "Universes", "Polymorphism", "Universe Variable Bindings", "Automatic universe parameters and the universe command"]}, "/The-Type-System/Universes/#L-_LPAR_in-Automatic-universe-parameters-and-the--universe--command_RPAR_": {"display": "L", "context": ["The Lean Language Reference", "The Type System", "Universes", "Polymorphism", "Universe Variable Bindings", "Automatic universe parameters and the universe command"]}}, "address": "/The-Type-System/Universes/"}, {"id": "L-_LPAR_in-Automatic-universe-parameters-and-the--universe--command_RPAR_-next", "data": {"/The-Type-System/Universes/#L-_LPAR_in-Automatic-universe-parameters-and-the--universe--command_RPAR_-next-next-next": {"display": "L", "context": ["The Lean Language Reference", "The Type System", "Universes", "Polymorphism", "Universe Variable Bindings", "Automatic universe parameters and the universe command"]}, "/The-Type-System/Universes/#L-_LPAR_in-Automatic-universe-parameters-and-the--universe--command_RPAR_-next-next": {"display": "L", "context": ["The Lean Language Reference", "The Type System", "Universes", "Polymorphism", "Universe Variable Bindings", "Automatic universe parameters and the universe command"]}, "/The-Type-System/Universes/#L-_LPAR_in-Automatic-universe-parameters-and-the--universe--command_RPAR_-next": {"display": "L", "context": ["The Lean Language Reference", "The Type System", "Universes", "Polymorphism", "Universe Variable Bindings", "Automatic universe parameters and the universe command"]}, "/The-Type-System/Universes/#L-_LPAR_in-Automatic-universe-parameters-and-the--universe--command_RPAR_": {"display": "L", "context": ["The Lean Language Reference", "The Type System", "Universes", "Polymorphism", "Universe Variable Bindings", "Automatic universe parameters and the universe command"]}}, "address": "/The-Type-System/Universes/"}, {"id": "L-_LPAR_in-Automatic-universe-parameters-and-the--universe--command_RPAR_", "data": {"/The-Type-System/Universes/#L-_LPAR_in-Automatic-universe-parameters-and-the--universe--command_RPAR_-next-next-next": {"display": "L", "context": ["The Lean Language Reference", "The Type System", "Universes", "Polymorphism", "Universe Variable Bindings", "Automatic universe parameters and the universe command"]}, "/The-Type-System/Universes/#L-_LPAR_in-Automatic-universe-parameters-and-the--universe--command_RPAR_-next-next": {"display": "L", "context": ["The Lean Language Reference", "The Type System", "Universes", "Polymorphism", "Universe Variable Bindings", "Automatic universe parameters and the universe command"]}, "/The-Type-System/Universes/#L-_LPAR_in-Automatic-universe-parameters-and-the--universe--command_RPAR_-next": {"display": "L", "context": ["The Lean Language Reference", "The Type System", "Universes", "Polymorphism", "Universe Variable Bindings", "Automatic universe parameters and the universe command"]}, "/The-Type-System/Universes/#L-_LPAR_in-Automatic-universe-parameters-and-the--universe--command_RPAR_": {"display": "L", "context": ["The Lean Language Reference", "The Type System", "Universes", "Polymorphism", "Universe Variable Bindings", "Automatic universe parameters and the universe command"]}}, "address": "/The-Type-System/Universes/"}], "K": [{"id": "K", "data": {"/Basic-Propositions/Propositional-Equality/#K": {"display": "K", "context": ["The Lean Language Reference", "Basic Propositions", "Propositional Equality", "Uniqueness of Equality Proofs"]}}, "address": "/Basic-Propositions/Propositional-Equality/"}], "ItIsSecret (in Stateful Predicates)": [{"id": "ItIsSecret-_LPAR_in-Stateful-Predicates_RPAR_", "data": {"/The--mvcgen--tactic/Predicate-Transformers/#ItIsSecret-_LPAR_in-Stateful-Predicates_RPAR_": {"display": "ItIsSecret", "context": ["The Lean Language Reference", "The mvcgen tactic", "Predicate Transformers", "Stateful Predicates", "Stateful Predicates"]}}, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "IsEnum.to_from_id (in Deriving Handlers)": [{"id": "IsEnum___to_from_id-_LPAR_in-Deriving-Handlers_RPAR_", "data": {"/Type-Classes/Deriving-Instances/#IsEnum___to_from_id-_LPAR_in-Deriving-Handlers_RPAR_": {"display": "to_from_id", "context": ["The Lean Language Reference", "Type Classes", "Deriving Instances", "Deriving Handlers", "Deriving Handlers"]}}, "address": "/Type-Classes/Deriving-Instances/"}], "IsEnum.toIdx (in Deriving Handlers)": [{"id": "IsEnum___toIdx-_LPAR_in-Deriving-Handlers_RPAR_", "data": {"/Type-Classes/Deriving-Instances/#IsEnum___toIdx-_LPAR_in-Deriving-Handlers_RPAR_": {"display": "toIdx", "context": ["The Lean Language Reference", "Type Classes", "Deriving Instances", "Deriving Handlers", "Deriving Handlers"]}}, "address": "/Type-Classes/Deriving-Instances/"}], "IsEnum.size (in Deriving Handlers)": [{"id": "IsEnum___size-_LPAR_in-Deriving-Handlers_RPAR_", "data": {"/Type-Classes/Deriving-Instances/#IsEnum___size-_LPAR_in-Deriving-Handlers_RPAR_": {"display": "size", "context": ["The Lean Language Reference", "Type Classes", "Deriving Instances", "Deriving Handlers", "Deriving Handlers"]}}, "address": "/Type-Classes/Deriving-Instances/"}], "IsEnum.from_to_id (in Deriving Handlers)": [{"id": "IsEnum___from_to_id-_LPAR_in-Deriving-Handlers_RPAR_", "data": {"/Type-Classes/Deriving-Instances/#IsEnum___from_to_id-_LPAR_in-Deriving-Handlers_RPAR_": {"display": "from_to_id", "context": ["The Lean Language Reference", "Type Classes", "Deriving Instances", "Deriving Handlers", "Deriving Handlers"]}}, "address": "/Type-Classes/Deriving-Instances/"}], "IsEnum.fromIdx (in Deriving Handlers)": [{"id": "IsEnum___fromIdx-_LPAR_in-Deriving-Handlers_RPAR_", "data": {"/Type-Classes/Deriving-Instances/#IsEnum___fromIdx-_LPAR_in-Deriving-Handlers_RPAR_": {"display": "fromIdx", "context": ["The Lean Language Reference", "Type Classes", "Deriving Instances", "Deriving Handlers", "Deriving Handlers"]}}, "address": "/Type-Classes/Deriving-Instances/"}], "IsEnum (in Deriving Handlers)": [{"id": "IsEnum-_LPAR_in-Deriving-Handlers_RPAR_", "data": {"/Type-Classes/Deriving-Instances/#IsEnum-_LPAR_in-Deriving-Handlers_RPAR_": {"display": "IsEnum", "context": ["The Lean Language Reference", "Type Classes", "Deriving Instances", "Deriving Handlers", "Deriving Handlers"]}}, "address": "/Type-Classes/Deriving-Instances/"}], "IsEmpty (in Extending trivial)": [{"id": "IsEmpty-_LPAR_in-Extending--trivial_RPAR_", "data": {"/Tactic-Proofs/Custom-Tactics/#IsEmpty-_LPAR_in-Extending--trivial_RPAR_": {"display": "IsEmpty", "context": ["The Lean Language Reference", "Tactic Proofs", "Custom Tactics", "Tactic Macros", "Extensible Tactic Macros", "Extending trivial"]}}, "address": "/Tactic-Proofs/Custom-Tactics/"}], "IndexMap.values": [{"id": "IndexMap___values", "data": {"/The--grind--tactic/Bigger-Examples/#IndexMap___values": {"display": "values", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}], "IndexMap.size_keys": [{"id": "IndexMap___size_keys", "data": {"/The--grind--tactic/Bigger-Examples/#IndexMap___size_keys": {"display": "size_keys", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}], "IndexMap.size": [{"id": "IndexMap___size-next-next-next", "data": {"/The--grind--tactic/Bigger-Examples/#IndexMap___size-next-next-next": {"display": "size", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___size-next-next": {"display": "size", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___size-next": {"display": "size", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___size": {"display": "size", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}, {"id": "IndexMap___size", "data": {"/The--grind--tactic/Bigger-Examples/#IndexMap___size-next-next-next": {"display": "size", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___size-next-next": {"display": "size", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___size-next": {"display": "size", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___size": {"display": "size", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}, {"id": "IndexMap___size-next", "data": {"/The--grind--tactic/Bigger-Examples/#IndexMap___size-next-next-next": {"display": "size", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___size-next-next": {"display": "size", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___size-next": {"display": "size", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___size": {"display": "size", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}, {"id": "IndexMap___size-next-next", "data": {"/The--grind--tactic/Bigger-Examples/#IndexMap___size-next-next-next": {"display": "size", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___size-next-next": {"display": "size", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___size-next": {"display": "size", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___size": {"display": "size", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}], "IndexMap.mem_insert": [{"id": "IndexMap___mem_insert", "data": {"/The--grind--tactic/Bigger-Examples/#IndexMap___mem_insert-next-next": {"display": "mem_insert", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___mem_insert-next": {"display": "mem_insert", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___mem_insert": {"display": "mem_insert", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}, {"id": "IndexMap___mem_insert-next", "data": {"/The--grind--tactic/Bigger-Examples/#IndexMap___mem_insert-next-next": {"display": "mem_insert", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___mem_insert-next": {"display": "mem_insert", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___mem_insert": {"display": "mem_insert", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}, {"id": "IndexMap___mem_insert-next-next", "data": {"/The--grind--tactic/Bigger-Examples/#IndexMap___mem_insert-next-next": {"display": "mem_insert", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___mem_insert-next": {"display": "mem_insert", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___mem_insert": {"display": "mem_insert", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}], "IndexMap.keys": [{"id": "IndexMap___keys", "data": {"/The--grind--tactic/Bigger-Examples/#IndexMap___keys": {"display": "keys", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}], "IndexMap.insert": [{"id": "IndexMap___insert-next-next-next-next", "data": {"/The--grind--tactic/Bigger-Examples/#IndexMap___insert-next-next-next-next": {"display": "insert", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___insert-next-next-next": {"display": "insert", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___insert-next-next": {"display": "insert", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___insert-next": {"display": "insert", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___insert": {"display": "insert", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}, {"id": "IndexMap___insert-next-next-next", "data": {"/The--grind--tactic/Bigger-Examples/#IndexMap___insert-next-next-next-next": {"display": "insert", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___insert-next-next-next": {"display": "insert", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___insert-next-next": {"display": "insert", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___insert-next": {"display": "insert", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___insert": {"display": "insert", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}, {"id": "IndexMap___insert-next-next", "data": {"/The--grind--tactic/Bigger-Examples/#IndexMap___insert-next-next-next-next": {"display": "insert", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___insert-next-next-next": {"display": "insert", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___insert-next-next": {"display": "insert", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___insert-next": {"display": "insert", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___insert": {"display": "insert", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}, {"id": "IndexMap___insert-next", "data": {"/The--grind--tactic/Bigger-Examples/#IndexMap___insert-next-next-next-next": {"display": "insert", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___insert-next-next-next": {"display": "insert", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___insert-next-next": {"display": "insert", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___insert-next": {"display": "insert", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___insert": {"display": "insert", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}, {"id": "IndexMap___insert", "data": {"/The--grind--tactic/Bigger-Examples/#IndexMap___insert-next-next-next-next": {"display": "insert", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___insert-next-next-next": {"display": "insert", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___insert-next-next": {"display": "insert", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___insert-next": {"display": "insert", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___insert": {"display": "insert", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}], "IndexMap.indices": [{"id": "IndexMap___indices", "data": {"/The--grind--tactic/Bigger-Examples/#IndexMap___indices": {"display": "indices", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}], "IndexMap.getIdx_findIdx": [{"id": "IndexMap___getIdx_findIdx-next", "data": {"/The--grind--tactic/Bigger-Examples/#IndexMap___getIdx_findIdx-next-next": {"display": "getIdx_findIdx", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___getIdx_findIdx-next": {"display": "getIdx_findIdx", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___getIdx_findIdx": {"display": "getIdx_findIdx", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}, {"id": "IndexMap___getIdx_findIdx", "data": {"/The--grind--tactic/Bigger-Examples/#IndexMap___getIdx_findIdx-next-next": {"display": "getIdx_findIdx", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___getIdx_findIdx-next": {"display": "getIdx_findIdx", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___getIdx_findIdx": {"display": "getIdx_findIdx", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}, {"id": "IndexMap___getIdx_findIdx-next-next", "data": {"/The--grind--tactic/Bigger-Examples/#IndexMap___getIdx_findIdx-next-next": {"display": "getIdx_findIdx", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___getIdx_findIdx-next": {"display": "getIdx_findIdx", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___getIdx_findIdx": {"display": "getIdx_findIdx", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}], "IndexMap.getIdx?": [{"id": "IndexMap___getIdx___-next", "data": {"/The--grind--tactic/Bigger-Examples/#IndexMap___getIdx___-next": {"display": "getIdx?", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___getIdx___": {"display": "getIdx?", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}, {"id": "IndexMap___getIdx___", "data": {"/The--grind--tactic/Bigger-Examples/#IndexMap___getIdx___-next": {"display": "getIdx?", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___getIdx___": {"display": "getIdx?", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}], "IndexMap.getIdx": [{"id": "IndexMap___getIdx", "data": {"/The--grind--tactic/Bigger-Examples/#IndexMap___getIdx-next": {"display": "getIdx", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___getIdx": {"display": "getIdx", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}, {"id": "IndexMap___getIdx-next", "data": {"/The--grind--tactic/Bigger-Examples/#IndexMap___getIdx-next": {"display": "getIdx", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___getIdx": {"display": "getIdx", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}], "IndexMap.getElem_insert": [{"id": "IndexMap___getElem_insert", "data": {"/The--grind--tactic/Bigger-Examples/#IndexMap___getElem_insert-next-next": {"display": "getElem_insert", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___getElem_insert-next": {"display": "getElem_insert", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___getElem_insert": {"display": "getElem_insert", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}, {"id": "IndexMap___getElem_insert-next-next", "data": {"/The--grind--tactic/Bigger-Examples/#IndexMap___getElem_insert-next-next": {"display": "getElem_insert", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___getElem_insert-next": {"display": "getElem_insert", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___getElem_insert": {"display": "getElem_insert", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}, {"id": "IndexMap___getElem_insert-next", "data": {"/The--grind--tactic/Bigger-Examples/#IndexMap___getElem_insert-next-next": {"display": "getElem_insert", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___getElem_insert-next": {"display": "getElem_insert", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___getElem_insert": {"display": "getElem_insert", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}], "IndexMap.findIdx_insert_self": [{"id": "IndexMap___findIdx_insert_self-next-next", "data": {"/The--grind--tactic/Bigger-Examples/#IndexMap___findIdx_insert_self-next-next": {"display": "findIdx_insert_self", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___findIdx_insert_self-next": {"display": "findIdx_insert_self", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___findIdx_insert_self": {"display": "findIdx_insert_self", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}, {"id": "IndexMap___findIdx_insert_self-next", "data": {"/The--grind--tactic/Bigger-Examples/#IndexMap___findIdx_insert_self-next-next": {"display": "findIdx_insert_self", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___findIdx_insert_self-next": {"display": "findIdx_insert_self", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___findIdx_insert_self": {"display": "findIdx_insert_self", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}, {"id": "IndexMap___findIdx_insert_self", "data": {"/The--grind--tactic/Bigger-Examples/#IndexMap___findIdx_insert_self-next-next": {"display": "findIdx_insert_self", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___findIdx_insert_self-next": {"display": "findIdx_insert_self", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___findIdx_insert_self": {"display": "findIdx_insert_self", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}], "IndexMap.findIdx?": [{"id": "IndexMap___findIdx___-next", "data": {"/The--grind--tactic/Bigger-Examples/#IndexMap___findIdx___-next": {"display": "findIdx?", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___findIdx___": {"display": "findIdx?", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}, {"id": "IndexMap___findIdx___", "data": {"/The--grind--tactic/Bigger-Examples/#IndexMap___findIdx___-next": {"display": "findIdx?", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___findIdx___": {"display": "findIdx?", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}], "IndexMap.findIdx": [{"id": "IndexMap___findIdx", "data": {"/The--grind--tactic/Bigger-Examples/#IndexMap___findIdx-next": {"display": "findIdx", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___findIdx": {"display": "findIdx", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}, {"id": "IndexMap___findIdx-next", "data": {"/The--grind--tactic/Bigger-Examples/#IndexMap___findIdx-next": {"display": "findIdx", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___findIdx": {"display": "findIdx", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}], "IndexMap.eraseSwap": [{"id": "IndexMap___eraseSwap-next-next-next-next", "data": {"/The--grind--tactic/Bigger-Examples/#IndexMap___eraseSwap-next-next-next-next-next": {"display": "eraseSwap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___eraseSwap-next-next-next-next": {"display": "eraseSwap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___eraseSwap-next-next-next": {"display": "eraseSwap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___eraseSwap-next-next": {"display": "eraseSwap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___eraseSwap-next": {"display": "eraseSwap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___eraseSwap": {"display": "eraseSwap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}, {"id": "IndexMap___eraseSwap-next-next-next", "data": {"/The--grind--tactic/Bigger-Examples/#IndexMap___eraseSwap-next-next-next-next-next": {"display": "eraseSwap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___eraseSwap-next-next-next-next": {"display": "eraseSwap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___eraseSwap-next-next-next": {"display": "eraseSwap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___eraseSwap-next-next": {"display": "eraseSwap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___eraseSwap-next": {"display": "eraseSwap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___eraseSwap": {"display": "eraseSwap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}, {"id": "IndexMap___eraseSwap-next-next", "data": {"/The--grind--tactic/Bigger-Examples/#IndexMap___eraseSwap-next-next-next-next-next": {"display": "eraseSwap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___eraseSwap-next-next-next-next": {"display": "eraseSwap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___eraseSwap-next-next-next": {"display": "eraseSwap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___eraseSwap-next-next": {"display": "eraseSwap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___eraseSwap-next": {"display": "eraseSwap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___eraseSwap": {"display": "eraseSwap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}, {"id": "IndexMap___eraseSwap-next-next-next-next-next", "data": {"/The--grind--tactic/Bigger-Examples/#IndexMap___eraseSwap-next-next-next-next-next": {"display": "eraseSwap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___eraseSwap-next-next-next-next": {"display": "eraseSwap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___eraseSwap-next-next-next": {"display": "eraseSwap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___eraseSwap-next-next": {"display": "eraseSwap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___eraseSwap-next": {"display": "eraseSwap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___eraseSwap": {"display": "eraseSwap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}, {"id": "IndexMap___eraseSwap", "data": {"/The--grind--tactic/Bigger-Examples/#IndexMap___eraseSwap-next-next-next-next-next": {"display": "eraseSwap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___eraseSwap-next-next-next-next": {"display": "eraseSwap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___eraseSwap-next-next-next": {"display": "eraseSwap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___eraseSwap-next-next": {"display": "eraseSwap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___eraseSwap-next": {"display": "eraseSwap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___eraseSwap": {"display": "eraseSwap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}, {"id": "IndexMap___eraseSwap-next", "data": {"/The--grind--tactic/Bigger-Examples/#IndexMap___eraseSwap-next-next-next-next-next": {"display": "eraseSwap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___eraseSwap-next-next-next-next": {"display": "eraseSwap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___eraseSwap-next-next-next": {"display": "eraseSwap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___eraseSwap-next-next": {"display": "eraseSwap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___eraseSwap-next": {"display": "eraseSwap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___eraseSwap": {"display": "eraseSwap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}], "IndexMap.emptyWithCapacity": [{"id": "IndexMap___emptyWithCapacity-next", "data": {"/The--grind--tactic/Bigger-Examples/#IndexMap___emptyWithCapacity-next-next-next": {"display": "emptyWithCapacity", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___emptyWithCapacity-next-next": {"display": "emptyWithCapacity", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___emptyWithCapacity-next": {"display": "emptyWithCapacity", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___emptyWithCapacity": {"display": "emptyWithCapacity", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}, {"id": "IndexMap___emptyWithCapacity-next-next", "data": {"/The--grind--tactic/Bigger-Examples/#IndexMap___emptyWithCapacity-next-next-next": {"display": "emptyWithCapacity", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___emptyWithCapacity-next-next": {"display": "emptyWithCapacity", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___emptyWithCapacity-next": {"display": "emptyWithCapacity", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___emptyWithCapacity": {"display": "emptyWithCapacity", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}, {"id": "IndexMap___emptyWithCapacity", "data": {"/The--grind--tactic/Bigger-Examples/#IndexMap___emptyWithCapacity-next-next-next": {"display": "emptyWithCapacity", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___emptyWithCapacity-next-next": {"display": "emptyWithCapacity", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___emptyWithCapacity-next": {"display": "emptyWithCapacity", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___emptyWithCapacity": {"display": "emptyWithCapacity", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}, {"id": "IndexMap___emptyWithCapacity-next-next-next", "data": {"/The--grind--tactic/Bigger-Examples/#IndexMap___emptyWithCapacity-next-next-next": {"display": "emptyWithCapacity", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___emptyWithCapacity-next-next": {"display": "emptyWithCapacity", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___emptyWithCapacity-next": {"display": "emptyWithCapacity", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___emptyWithCapacity": {"display": "emptyWithCapacity", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}], "IndexMap.contains": [{"id": "IndexMap___contains", "data": {"/The--grind--tactic/Bigger-Examples/#IndexMap___contains-next": {"display": "contains", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___contains": {"display": "contains", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}, {"id": "IndexMap___contains-next", "data": {"/The--grind--tactic/Bigger-Examples/#IndexMap___contains-next": {"display": "contains", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap___contains": {"display": "contains", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}], "IndexMap.WF": [{"id": "IndexMap___WF", "data": {"/The--grind--tactic/Bigger-Examples/#IndexMap___WF": {"display": "WF", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}], "IndexMap": [{"id": "IndexMap-next-next-next-next-next-next", "data": {"/The--grind--tactic/Bigger-Examples/#IndexMap-next-next-next-next-next-next-next": {"display": "IndexMap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap-next-next-next-next-next-next": {"display": "IndexMap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap-next-next-next-next-next": {"display": "IndexMap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap-next-next-next-next": {"display": "IndexMap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap-next-next-next": {"display": "IndexMap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap-next-next": {"display": "IndexMap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap-next": {"display": "IndexMap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap": {"display": "IndexMap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}, {"id": "IndexMap-next", "data": {"/The--grind--tactic/Bigger-Examples/#IndexMap-next-next-next-next-next-next-next": {"display": "IndexMap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap-next-next-next-next-next-next": {"display": "IndexMap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap-next-next-next-next-next": {"display": "IndexMap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap-next-next-next-next": {"display": "IndexMap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap-next-next-next": {"display": "IndexMap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap-next-next": {"display": "IndexMap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap-next": {"display": "IndexMap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap": {"display": "IndexMap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}, {"id": "IndexMap-next-next-next", "data": {"/The--grind--tactic/Bigger-Examples/#IndexMap-next-next-next-next-next-next-next": {"display": "IndexMap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap-next-next-next-next-next-next": {"display": "IndexMap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap-next-next-next-next-next": {"display": "IndexMap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap-next-next-next-next": {"display": "IndexMap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap-next-next-next": {"display": "IndexMap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap-next-next": {"display": "IndexMap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap-next": {"display": "IndexMap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap": {"display": "IndexMap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}, {"id": "IndexMap-next-next-next-next-next-next-next", "data": {"/The--grind--tactic/Bigger-Examples/#IndexMap-next-next-next-next-next-next-next": {"display": "IndexMap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap-next-next-next-next-next-next": {"display": "IndexMap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap-next-next-next-next-next": {"display": "IndexMap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap-next-next-next-next": {"display": "IndexMap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap-next-next-next": {"display": "IndexMap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap-next-next": {"display": "IndexMap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap-next": {"display": "IndexMap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap": {"display": "IndexMap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}, {"id": "IndexMap-next-next-next-next", "data": {"/The--grind--tactic/Bigger-Examples/#IndexMap-next-next-next-next-next-next-next": {"display": "IndexMap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap-next-next-next-next-next-next": {"display": "IndexMap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap-next-next-next-next-next": {"display": "IndexMap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap-next-next-next-next": {"display": "IndexMap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap-next-next-next": {"display": "IndexMap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap-next-next": {"display": "IndexMap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap-next": {"display": "IndexMap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap": {"display": "IndexMap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}, {"id": "IndexMap-next-next", "data": {"/The--grind--tactic/Bigger-Examples/#IndexMap-next-next-next-next-next-next-next": {"display": "IndexMap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap-next-next-next-next-next-next": {"display": "IndexMap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap-next-next-next-next-next": {"display": "IndexMap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap-next-next-next-next": {"display": "IndexMap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap-next-next-next": {"display": "IndexMap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap-next-next": {"display": "IndexMap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap-next": {"display": "IndexMap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap": {"display": "IndexMap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}, {"id": "IndexMap", "data": {"/The--grind--tactic/Bigger-Examples/#IndexMap-next-next-next-next-next-next-next": {"display": "IndexMap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap-next-next-next-next-next-next": {"display": "IndexMap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap-next-next-next-next-next": {"display": "IndexMap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap-next-next-next-next": {"display": "IndexMap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap-next-next-next": {"display": "IndexMap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap-next-next": {"display": "IndexMap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap-next": {"display": "IndexMap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap": {"display": "IndexMap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}, {"id": "IndexMap-next-next-next-next-next", "data": {"/The--grind--tactic/Bigger-Examples/#IndexMap-next-next-next-next-next-next-next": {"display": "IndexMap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap-next-next-next-next-next-next": {"display": "IndexMap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap-next-next-next-next-next": {"display": "IndexMap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap-next-next-next-next": {"display": "IndexMap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap-next-next-next": {"display": "IndexMap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap-next-next": {"display": "IndexMap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap-next": {"display": "IndexMap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}, "/The--grind--tactic/Bigger-Examples/#IndexMap": {"display": "IndexMap", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "IndexMap"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}], "IfNormalization": [{"id": "IfNormalization", "data": {"/The--grind--tactic/Bigger-Examples/#IfNormalization": {"display": "IfNormalization", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "if - then - else Normalization", "The formal statement"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}], "IfExpr.vars": [{"id": "IfExpr___vars", "data": {"/The--grind--tactic/Bigger-Examples/#IfExpr___vars": {"display": "vars", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "if - then - else Normalization", "The formal statement"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}], "IfExpr.var": [{"id": "IfExpr___var", "data": {"/The--grind--tactic/Bigger-Examples/#IfExpr___var": {"display": "var", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "if - then - else Normalization", "The formal statement"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}], "IfExpr.normalized": [{"id": "IfExpr___normalized", "data": {"/The--grind--tactic/Bigger-Examples/#IfExpr___normalized": {"display": "normalized", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "if - then - else Normalization", "The formal statement"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}], "IfExpr.normalize_spec": [{"id": "IfExpr___normalize_spec", "data": {"/The--grind--tactic/Bigger-Examples/#IfExpr___normalize_spec-next-next": {"display": "normalize_spec", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "if - then - else Normalization", "The solution using grind"]}, "/The--grind--tactic/Bigger-Examples/#IfExpr___normalize_spec-next": {"display": "normalize_spec", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "if - then - else Normalization", "The solution using grind"]}, "/The--grind--tactic/Bigger-Examples/#IfExpr___normalize_spec": {"display": "normalize_spec", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "if - then - else Normalization", "The solution using grind"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}, {"id": "IfExpr___normalize_spec-next", "data": {"/The--grind--tactic/Bigger-Examples/#IfExpr___normalize_spec-next-next": {"display": "normalize_spec", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "if - then - else Normalization", "The solution using grind"]}, "/The--grind--tactic/Bigger-Examples/#IfExpr___normalize_spec-next": {"display": "normalize_spec", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "if - then - else Normalization", "The solution using grind"]}, "/The--grind--tactic/Bigger-Examples/#IfExpr___normalize_spec": {"display": "normalize_spec", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "if - then - else Normalization", "The solution using grind"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}, {"id": "IfExpr___normalize_spec-next-next", "data": {"/The--grind--tactic/Bigger-Examples/#IfExpr___normalize_spec-next-next": {"display": "normalize_spec", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "if - then - else Normalization", "The solution using grind"]}, "/The--grind--tactic/Bigger-Examples/#IfExpr___normalize_spec-next": {"display": "normalize_spec", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "if - then - else Normalization", "The solution using grind"]}, "/The--grind--tactic/Bigger-Examples/#IfExpr___normalize_spec": {"display": "normalize_spec", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "if - then - else Normalization", "The solution using grind"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}], "IfExpr.normalize": [{"id": "IfExpr___normalize-next-next", "data": {"/The--grind--tactic/Bigger-Examples/#IfExpr___normalize-next-next": {"display": "normalize", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "if - then - else Normalization", "The solution using grind"]}, "/The--grind--tactic/Bigger-Examples/#IfExpr___normalize-next": {"display": "normalize", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "if - then - else Normalization", "The solution using grind"]}, "/The--grind--tactic/Bigger-Examples/#IfExpr___normalize": {"display": "normalize", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "if - then - else Normalization", "The solution using grind"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}, {"id": "IfExpr___normalize", "data": {"/The--grind--tactic/Bigger-Examples/#IfExpr___normalize-next-next": {"display": "normalize", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "if - then - else Normalization", "The solution using grind"]}, "/The--grind--tactic/Bigger-Examples/#IfExpr___normalize-next": {"display": "normalize", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "if - then - else Normalization", "The solution using grind"]}, "/The--grind--tactic/Bigger-Examples/#IfExpr___normalize": {"display": "normalize", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "if - then - else Normalization", "The solution using grind"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}, {"id": "IfExpr___normalize-next", "data": {"/The--grind--tactic/Bigger-Examples/#IfExpr___normalize-next-next": {"display": "normalize", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "if - then - else Normalization", "The solution using grind"]}, "/The--grind--tactic/Bigger-Examples/#IfExpr___normalize-next": {"display": "normalize", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "if - then - else Normalization", "The solution using grind"]}, "/The--grind--tactic/Bigger-Examples/#IfExpr___normalize": {"display": "normalize", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "if - then - else Normalization", "The solution using grind"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}], "IfExpr.normSize": [{"id": "IfExpr___normSize", "data": {"/The--grind--tactic/Bigger-Examples/#IfExpr___normSize": {"display": "normSize", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "if - then - else Normalization", "The solution using grind"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}], "IfExpr.lit": [{"id": "IfExpr___lit", "data": {"/The--grind--tactic/Bigger-Examples/#IfExpr___lit": {"display": "lit", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "if - then - else Normalization", "The formal statement"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}], "IfExpr.ite": [{"id": "IfExpr___ite", "data": {"/The--grind--tactic/Bigger-Examples/#IfExpr___ite": {"display": "ite", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "if - then - else Normalization", "The formal statement"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}], "IfExpr.hasRedundantIf": [{"id": "IfExpr___hasRedundantIf", "data": {"/The--grind--tactic/Bigger-Examples/#IfExpr___hasRedundantIf": {"display": "hasRedundantIf", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "if - then - else Normalization", "The formal statement"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}], "IfExpr.hasNestedIf": [{"id": "IfExpr___hasNestedIf", "data": {"/The--grind--tactic/Bigger-Examples/#IfExpr___hasNestedIf": {"display": "hasNestedIf", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "if - then - else Normalization", "The formal statement"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}], "IfExpr.hasConstantIf": [{"id": "IfExpr___hasConstantIf", "data": {"/The--grind--tactic/Bigger-Examples/#IfExpr___hasConstantIf": {"display": "hasConstantIf", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "if - then - else Normalization", "The formal statement"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}], "IfExpr.eval": [{"id": "IfExpr___eval", "data": {"/The--grind--tactic/Bigger-Examples/#IfExpr___eval": {"display": "eval", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "if - then - else Normalization", "The formal statement"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}], "IfExpr.disjoint": [{"id": "IfExpr___disjoint", "data": {"/The--grind--tactic/Bigger-Examples/#IfExpr___disjoint": {"display": "disjoint", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "if - then - else Normalization", "The formal statement"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}], "IfExpr": [{"id": "IfExpr", "data": {"/The--grind--tactic/Bigger-Examples/#IfExpr": {"display": "IfExpr", "context": ["The Lean Language Reference", "The grind tactic", "Bigger Examples", "if - then - else Normalization", "The formal statement"]}}, "address": "/The--grind--tactic/Bigger-Examples/"}], "Identity.run (in Missing WPMonad Instance)": [{"id": "Identity___run-_LPAR_in-Missing--WPMonad--Instance_RPAR_", "data": {"/The--mvcgen--tactic/Predicate-Transformers/#Identity___run-_LPAR_in-Missing--WPMonad--Instance_RPAR_": {"display": "Identity.run", "context": ["The Lean Language Reference", "The mvcgen tactic", "Predicate Transformers", "Predicate Transformers", "Weakest Precondition Monad Morphisms", "Missing WPMonad Instance"]}}, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Identity.of_wp_run_eq (in Missing WPMonad Instance)": [{"id": "Identity___of_wp_run_eq-_LPAR_in-Missing--WPMonad--Instance_RPAR_", "data": {"/The--mvcgen--tactic/Predicate-Transformers/#Identity___of_wp_run_eq-_LPAR_in-Missing--WPMonad--Instance_RPAR_": {"display": "Identity.of_wp_run_eq", "context": ["The Lean Language Reference", "The mvcgen tactic", "Predicate Transformers", "Predicate Transformers", "Weakest Precondition Monad Morphisms", "Missing WPMonad Instance"]}}, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Identity (in Missing WPMonad Instance)": [{"id": "Identity-_LPAR_in-Missing--WPMonad--Instance_RPAR_", "data": {"/The--mvcgen--tactic/Predicate-Transformers/#Identity-_LPAR_in-Missing--WPMonad--Instance_RPAR_": {"display": "Identity", "context": ["The Lean Language Reference", "The mvcgen tactic", "Predicate Transformers", "Predicate Transformers", "Weakest Precondition Monad Morphisms", "Missing WPMonad Instance"]}}, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "IdT.run (in The Identity Monad Transformer )": [{"id": "IdT___run-_LPAR_in-The-Identity-Monad-Transformer-_RPAR_", "data": {"/Functors___-Monads-and--do--Notation/Varieties-of-Monads/#IdT___run-_LPAR_in-The-Identity-Monad-Transformer-_RPAR_": {"display": "IdT.run", "context": ["The Lean Language Reference", "Functors, Monads and do -Notation", "Varieties of Monads", "Monad Transformers", "The Identity Monad Transformer "]}}, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "IdT (in The Identity Monad Transformer )": [{"id": "IdT-_LPAR_in-The-Identity-Monad-Transformer-_RPAR_", "data": {"/Functors___-Monads-and--do--Notation/Varieties-of-Monads/#IdT-_LPAR_in-The-Identity-Monad-Transformer-_RPAR_": {"display": "IdT", "context": ["The Lean Language Reference", "Functors, Monads and do -Notation", "Varieties of Monads", "Monad Transformers", "The Identity Monad Transformer "]}}, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "HotDrink.toString (in Current Namespace)": [{"id": "HotDrink___toString-_LPAR_in-Current-Namespace_RPAR_", "data": {"/Namespaces-and-Sections/#HotDrink___toString-_LPAR_in-Current-Namespace_RPAR_": {"display": "toString", "context": ["The Lean Language Reference", "Namespaces and Sections", "Namespaces", "Namespaces and Section Scopes", "Current Namespace"]}}, "address": "/Namespaces-and-Sections/"}], "HotDrink.tea (in Current Namespace)": [{"id": "HotDrink___tea-_LPAR_in-Current-Namespace_RPAR_", "data": {"/Namespaces-and-Sections/#HotDrink___tea-_LPAR_in-Current-Namespace_RPAR_": {"display": "tea", "context": ["The Lean Language Reference", "Namespaces and Sections", "Namespaces", "Namespaces and Section Scopes", "Current Namespace"]}}, "address": "/Namespaces-and-Sections/"}], "HotDrink.ofString? (in Current Namespace)": [{"id": "HotDrink___ofString___-_LPAR_in-Current-Namespace_RPAR_", "data": {"/Namespaces-and-Sections/#HotDrink___ofString___-_LPAR_in-Current-Namespace_RPAR_": {"display": "HotDrink.ofString?", "context": ["The Lean Language Reference", "Namespaces and Sections", "Namespaces", "Namespaces and Section Scopes", "Current Namespace"]}}, "address": "/Namespaces-and-Sections/"}], "HotDrink.coffee (in Current Namespace)": [{"id": "HotDrink___coffee-_LPAR_in-Current-Namespace_RPAR_", "data": {"/Namespaces-and-Sections/#HotDrink___coffee-_LPAR_in-Current-Namespace_RPAR_": {"display": "coffee", "context": ["The Lean Language Reference", "Namespaces and Sections", "Namespaces", "Namespaces and Section Scopes", "Current Namespace"]}}, "address": "/Namespaces-and-Sections/"}], "HotDrink.cocoa (in Current Namespace)": [{"id": "HotDrink___cocoa-_LPAR_in-Current-Namespace_RPAR_", "data": {"/Namespaces-and-Sections/#HotDrink___cocoa-_LPAR_in-Current-Namespace_RPAR_": {"display": "cocoa", "context": ["The Lean Language Reference", "Namespaces and Sections", "Namespaces", "Namespaces and Section Scopes", "Current Namespace"]}}, "address": "/Namespaces-and-Sections/"}], "HotDrink (in Current Namespace)": [{"id": "HotDrink-_LPAR_in-Current-Namespace_RPAR_", "data": {"/Namespaces-and-Sections/#HotDrink-_LPAR_in-Current-Namespace_RPAR_": {"display": "HotDrink", "context": ["The Lean Language Reference", "Namespaces and Sections", "Namespaces", "Namespaces and Section Scopes", "Current Namespace"]}}, "address": "/Namespaces-and-Sections/"}], "Heap.insert (in Instances are Not Unique)": [{"id": "Heap___insert-_LPAR_in-Instances-are-Not-Unique_RPAR_", "data": {"/Type-Classes/Class-Declarations/#Heap___insert-_LPAR_in-Instances-are-Not-Unique_RPAR_": {"display": "Heap.insert", "context": ["The Lean Language Reference", "Type Classes", "Class Declarations", "Instances are Not Unique"]}}, "address": "/Type-Classes/Class-Declarations/"}], "Heap.contents (in Instances are Not Unique)": [{"id": "Heap___contents-_LPAR_in-Instances-are-Not-Unique_RPAR_", "data": {"/Type-Classes/Class-Declarations/#Heap___contents-_LPAR_in-Instances-are-Not-Unique_RPAR_": {"display": "contents", "context": ["The Lean Language Reference", "Type Classes", "Class Declarations", "Instances are Not Unique"]}}, "address": "/Type-Classes/Class-Declarations/"}], "Heap.bubbleUp (in Instances are Not Unique)": [{"id": "Heap___bubbleUp-_LPAR_in-Instances-are-Not-Unique_RPAR_", "data": {"/Type-Classes/Class-Declarations/#Heap___bubbleUp-_LPAR_in-Instances-are-Not-Unique_RPAR_": {"display": "Heap.bubbleUp", "context": ["The Lean Language Reference", "Type Classes", "Class Declarations", "Instances are Not Unique"]}}, "address": "/Type-Classes/Class-Declarations/"}], "Heap'.insert (in Instances are Not Unique)": [{"id": "Heap______insert-_LPAR_in-Instances-are-Not-Unique_RPAR_", "data": {"/Type-Classes/Class-Declarations/#Heap______insert-_LPAR_in-Instances-are-Not-Unique_RPAR_": {"display": "Heap'.insert", "context": ["The Lean Language Reference", "Type Classes", "Class Declarations", "Instances are Not Unique"]}}, "address": "/Type-Classes/Class-Declarations/"}], "Heap'.contents (in Instances are Not Unique)": [{"id": "Heap______contents-_LPAR_in-Instances-are-Not-Unique_RPAR_", "data": {"/Type-Classes/Class-Declarations/#Heap______contents-_LPAR_in-Instances-are-Not-Unique_RPAR_": {"display": "contents", "context": ["The Lean Language Reference", "Type Classes", "Class Declarations", "Instances are Not Unique"]}}, "address": "/Type-Classes/Class-Declarations/"}], "Heap'.bubbleUp (in Instances are Not Unique)": [{"id": "Heap______bubbleUp-_LPAR_in-Instances-are-Not-Unique_RPAR_", "data": {"/Type-Classes/Class-Declarations/#Heap______bubbleUp-_LPAR_in-Instances-are-Not-Unique_RPAR_": {"display": "Heap'.bubbleUp", "context": ["The Lean Language Reference", "Type Classes", "Class Declarations", "Instances are Not Unique"]}}, "address": "/Type-Classes/Class-Declarations/"}], "Heap' (in Instances are Not Unique)": [{"id": "Heap___-_LPAR_in-Instances-are-Not-Unique_RPAR_", "data": {"/Type-Classes/Class-Declarations/#Heap___-_LPAR_in-Instances-are-Not-Unique_RPAR_": {"display": "Heap'", "context": ["The Lean Language Reference", "Type Classes", "Class Declarations", "Instances are Not Unique"]}}, "address": "/Type-Classes/Class-Declarations/"}], "Heap (in Instances are Not Unique)": [{"id": "Heap-_LPAR_in-Instances-are-Not-Unique_RPAR_", "data": {"/Type-Classes/Class-Declarations/#Heap-_LPAR_in-Instances-are-Not-Unique_RPAR_": {"display": "Heap", "context": ["The Lean Language Reference", "Type Classes", "Class Declarations", "Instances are Not Unique"]}}, "address": "/Type-Classes/Class-Declarations/"}], "Half.val (in Proofs in Public)": [{"id": "Half___val-_LPAR_in-Proofs-in-Public_RPAR_-next-next", "data": {"/Source-Files-and-Modules/#Half___val-_LPAR_in-Proofs-in-Public_RPAR_-next-next-next": {"display": "val", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Proofs in Public"]}, "/Source-Files-and-Modules/#Half___val-_LPAR_in-Proofs-in-Public_RPAR_-next-next": {"display": "val", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Proofs in Public"]}, "/Source-Files-and-Modules/#Half___val-_LPAR_in-Proofs-in-Public_RPAR_-next": {"display": "val", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Proofs in Public"]}, "/Source-Files-and-Modules/#Half___val-_LPAR_in-Proofs-in-Public_RPAR_": {"display": "val", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Proofs in Public"]}}, "address": "/Source-Files-and-Modules/"}, {"id": "Half___val-_LPAR_in-Proofs-in-Public_RPAR_-next", "data": {"/Source-Files-and-Modules/#Half___val-_LPAR_in-Proofs-in-Public_RPAR_-next-next-next": {"display": "val", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Proofs in Public"]}, "/Source-Files-and-Modules/#Half___val-_LPAR_in-Proofs-in-Public_RPAR_-next-next": {"display": "val", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Proofs in Public"]}, "/Source-Files-and-Modules/#Half___val-_LPAR_in-Proofs-in-Public_RPAR_-next": {"display": "val", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Proofs in Public"]}, "/Source-Files-and-Modules/#Half___val-_LPAR_in-Proofs-in-Public_RPAR_": {"display": "val", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Proofs in Public"]}}, "address": "/Source-Files-and-Modules/"}, {"id": "Half___val-_LPAR_in-Proofs-in-Public_RPAR_-next-next-next", "data": {"/Source-Files-and-Modules/#Half___val-_LPAR_in-Proofs-in-Public_RPAR_-next-next-next": {"display": "val", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Proofs in Public"]}, "/Source-Files-and-Modules/#Half___val-_LPAR_in-Proofs-in-Public_RPAR_-next-next": {"display": "val", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Proofs in Public"]}, "/Source-Files-and-Modules/#Half___val-_LPAR_in-Proofs-in-Public_RPAR_-next": {"display": "val", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Proofs in Public"]}, "/Source-Files-and-Modules/#Half___val-_LPAR_in-Proofs-in-Public_RPAR_": {"display": "val", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Proofs in Public"]}}, "address": "/Source-Files-and-Modules/"}, {"id": "Half___val-_LPAR_in-Proofs-in-Public_RPAR_", "data": {"/Source-Files-and-Modules/#Half___val-_LPAR_in-Proofs-in-Public_RPAR_-next-next-next": {"display": "val", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Proofs in Public"]}, "/Source-Files-and-Modules/#Half___val-_LPAR_in-Proofs-in-Public_RPAR_-next-next": {"display": "val", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Proofs in Public"]}, "/Source-Files-and-Modules/#Half___val-_LPAR_in-Proofs-in-Public_RPAR_-next": {"display": "val", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Proofs in Public"]}, "/Source-Files-and-Modules/#Half___val-_LPAR_in-Proofs-in-Public_RPAR_": {"display": "val", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Proofs in Public"]}}, "address": "/Source-Files-and-Modules/"}], "Half.ok (in Proofs in Public)": [{"id": "Half___ok-_LPAR_in-Proofs-in-Public_RPAR_-next-next-next", "data": {"/Source-Files-and-Modules/#Half___ok-_LPAR_in-Proofs-in-Public_RPAR_-next-next-next": {"display": "ok", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Proofs in Public"]}, "/Source-Files-and-Modules/#Half___ok-_LPAR_in-Proofs-in-Public_RPAR_-next-next": {"display": "ok", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Proofs in Public"]}, "/Source-Files-and-Modules/#Half___ok-_LPAR_in-Proofs-in-Public_RPAR_-next": {"display": "ok", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Proofs in Public"]}, "/Source-Files-and-Modules/#Half___ok-_LPAR_in-Proofs-in-Public_RPAR_": {"display": "ok", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Proofs in Public"]}}, "address": "/Source-Files-and-Modules/"}, {"id": "Half___ok-_LPAR_in-Proofs-in-Public_RPAR_-next", "data": {"/Source-Files-and-Modules/#Half___ok-_LPAR_in-Proofs-in-Public_RPAR_-next-next-next": {"display": "ok", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Proofs in Public"]}, "/Source-Files-and-Modules/#Half___ok-_LPAR_in-Proofs-in-Public_RPAR_-next-next": {"display": "ok", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Proofs in Public"]}, "/Source-Files-and-Modules/#Half___ok-_LPAR_in-Proofs-in-Public_RPAR_-next": {"display": "ok", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Proofs in Public"]}, "/Source-Files-and-Modules/#Half___ok-_LPAR_in-Proofs-in-Public_RPAR_": {"display": "ok", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Proofs in Public"]}}, "address": "/Source-Files-and-Modules/"}, {"id": "Half___ok-_LPAR_in-Proofs-in-Public_RPAR_", "data": {"/Source-Files-and-Modules/#Half___ok-_LPAR_in-Proofs-in-Public_RPAR_-next-next-next": {"display": "ok", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Proofs in Public"]}, "/Source-Files-and-Modules/#Half___ok-_LPAR_in-Proofs-in-Public_RPAR_-next-next": {"display": "ok", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Proofs in Public"]}, "/Source-Files-and-Modules/#Half___ok-_LPAR_in-Proofs-in-Public_RPAR_-next": {"display": "ok", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Proofs in Public"]}, "/Source-Files-and-Modules/#Half___ok-_LPAR_in-Proofs-in-Public_RPAR_": {"display": "ok", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Proofs in Public"]}}, "address": "/Source-Files-and-Modules/"}, {"id": "Half___ok-_LPAR_in-Proofs-in-Public_RPAR_-next-next", "data": {"/Source-Files-and-Modules/#Half___ok-_LPAR_in-Proofs-in-Public_RPAR_-next-next-next": {"display": "ok", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Proofs in Public"]}, "/Source-Files-and-Modules/#Half___ok-_LPAR_in-Proofs-in-Public_RPAR_-next-next": {"display": "ok", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Proofs in Public"]}, "/Source-Files-and-Modules/#Half___ok-_LPAR_in-Proofs-in-Public_RPAR_-next": {"display": "ok", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Proofs in Public"]}, "/Source-Files-and-Modules/#Half___ok-_LPAR_in-Proofs-in-Public_RPAR_": {"display": "ok", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Proofs in Public"]}}, "address": "/Source-Files-and-Modules/"}], "Half (in Proofs in Public)": [{"id": "Half-_LPAR_in-Proofs-in-Public_RPAR_", "data": {"/Source-Files-and-Modules/#Half-_LPAR_in-Proofs-in-Public_RPAR_-next-next-next": {"display": "Half", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Proofs in Public"]}, "/Source-Files-and-Modules/#Half-_LPAR_in-Proofs-in-Public_RPAR_-next-next": {"display": "Half", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Proofs in Public"]}, "/Source-Files-and-Modules/#Half-_LPAR_in-Proofs-in-Public_RPAR_-next": {"display": "Half", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Proofs in Public"]}, "/Source-Files-and-Modules/#Half-_LPAR_in-Proofs-in-Public_RPAR_": {"display": "Half", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Proofs in Public"]}}, "address": "/Source-Files-and-Modules/"}, {"id": "Half-_LPAR_in-Proofs-in-Public_RPAR_-next-next-next", "data": {"/Source-Files-and-Modules/#Half-_LPAR_in-Proofs-in-Public_RPAR_-next-next-next": {"display": "Half", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Proofs in Public"]}, "/Source-Files-and-Modules/#Half-_LPAR_in-Proofs-in-Public_RPAR_-next-next": {"display": "Half", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Proofs in Public"]}, "/Source-Files-and-Modules/#Half-_LPAR_in-Proofs-in-Public_RPAR_-next": {"display": "Half", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Proofs in Public"]}, "/Source-Files-and-Modules/#Half-_LPAR_in-Proofs-in-Public_RPAR_": {"display": "Half", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Proofs in Public"]}}, "address": "/Source-Files-and-Modules/"}, {"id": "Half-_LPAR_in-Proofs-in-Public_RPAR_-next", "data": {"/Source-Files-and-Modules/#Half-_LPAR_in-Proofs-in-Public_RPAR_-next-next-next": {"display": "Half", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Proofs in Public"]}, "/Source-Files-and-Modules/#Half-_LPAR_in-Proofs-in-Public_RPAR_-next-next": {"display": "Half", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Proofs in Public"]}, "/Source-Files-and-Modules/#Half-_LPAR_in-Proofs-in-Public_RPAR_-next": {"display": "Half", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Proofs in Public"]}, "/Source-Files-and-Modules/#Half-_LPAR_in-Proofs-in-Public_RPAR_": {"display": "Half", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Proofs in Public"]}}, "address": "/Source-Files-and-Modules/"}, {"id": "Half-_LPAR_in-Proofs-in-Public_RPAR_-next-next", "data": {"/Source-Files-and-Modules/#Half-_LPAR_in-Proofs-in-Public_RPAR_-next-next-next": {"display": "Half", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Proofs in Public"]}, "/Source-Files-and-Modules/#Half-_LPAR_in-Proofs-in-Public_RPAR_-next-next": {"display": "Half", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Proofs in Public"]}, "/Source-Files-and-Modules/#Half-_LPAR_in-Proofs-in-Public_RPAR_-next": {"display": "Half", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Proofs in Public"]}, "/Source-Files-and-Modules/#Half-_LPAR_in-Proofs-in-Public_RPAR_": {"display": "Half", "context": ["The Lean Language Reference", "Source Files and Modules", "Modules and Visibility", "Proofs in Public"]}}, "address": "/Source-Files-and-Modules/"}], "Greetings.english (in Named Section)": [{"id": "Greetings___english-_LPAR_in-Named-Section_RPAR_", "data": {"/Namespaces-and-Sections/#Greetings___english-_LPAR_in-Named-Section_RPAR_": {"display": "Greetings.english", "context": ["The Lean Language Reference", "Namespaces and Sections", "Section Scopes", "Controlling Section Scopes", "Named Section"]}}, "address": "/Namespaces-and-Sections/"}], "Graph.empty (in Default values)": [{"id": "Graph___empty-_LPAR_in-Default-values_RPAR_", "data": {"/The-Type-System/Inductive-Types/#Graph___empty-_LPAR_in-Default-values_RPAR_": {"display": "Graph.empty", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Structure Declarations", "Fields", "Default values"]}}, "address": "/The-Type-System/Inductive-Types/"}], "Graph.adjacency (in Default values)": [{"id": "Graph___adjacency-_LPAR_in-Default-values_RPAR_", "data": {"/The-Type-System/Inductive-Types/#Graph___adjacency-_LPAR_in-Default-values_RPAR_": {"display": "adjacency", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Structure Declarations", "Fields", "Default values"]}}, "address": "/The-Type-System/Inductive-Types/"}], "Graph (in Default values)": [{"id": "Graph-_LPAR_in-Default-values_RPAR_", "data": {"/The-Type-System/Inductive-Types/#Graph-_LPAR_in-Default-values_RPAR_": {"display": "Graph", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Structure Declarations", "Fields", "Default values"]}}, "address": "/The-Type-System/Inductive-Types/"}], "Forest.statement (in Explicit Root Namespace)": [{"id": "Forest___statement-_LPAR_in-Explicit-Root-Namespace_RPAR_", "data": {"/Namespaces-and-Sections/#Forest___statement-_LPAR_in-Explicit-Root-Namespace_RPAR_": {"display": "statement", "context": ["The Lean Language Reference", "Namespaces and Sections", "Namespaces", "Explicit Root Namespace"]}}, "address": "/Namespaces-and-Sections/"}], "Forest.nextStatement (in Explicit Root Namespace)": [{"id": "Forest___nextStatement-_LPAR_in-Explicit-Root-Namespace_RPAR_", "data": {"/Namespaces-and-Sections/#Forest___nextStatement-_LPAR_in-Explicit-Root-Namespace_RPAR_": {"display": "nextStatement", "context": ["The Lean Language Reference", "Namespaces and Sections", "Namespaces", "Explicit Root Namespace"]}}, "address": "/Namespaces-and-Sections/"}], "Forest.color (in Explicit Root Namespace)": [{"id": "Forest___color-_LPAR_in-Explicit-Root-Namespace_RPAR_", "data": {"/Namespaces-and-Sections/#Forest___color-_LPAR_in-Explicit-Root-Namespace_RPAR_": {"display": "color", "context": ["The Lean Language Reference", "Namespaces and Sections", "Namespaces", "Explicit Root Namespace"]}}, "address": "/Namespaces-and-Sections/"}], "Float.zero_eq_zero_plus_zero (in No Kernel Reasoning About Floating-Point Numbers)": [{"id": "Float___zero_eq_zero_plus_zero-_LPAR_in-No-Kernel-Reasoning-About-Floating-Point-Numbers_RPAR_", "data": {"/Basic-Types/Floating-Point-Numbers/#Float___zero_eq_zero_plus_zero-_LPAR_in-No-Kernel-Reasoning-About-Floating-Point-Numbers_RPAR_-next": {"display": "Float.zero_eq_zero_plus_zero", "context": ["The Lean Language Reference", "Basic Types", "Floating-Point Numbers", "No Kernel Reasoning About Floating-Point Numbers"]}, "/Basic-Types/Floating-Point-Numbers/#Float___zero_eq_zero_plus_zero-_LPAR_in-No-Kernel-Reasoning-About-Floating-Point-Numbers_RPAR_": {"display": "Float.zero_eq_zero_plus_zero", "context": ["The Lean Language Reference", "Basic Types", "Floating-Point Numbers", "No Kernel Reasoning About Floating-Point Numbers"]}}, "address": "/Basic-Types/Floating-Point-Numbers/"}, {"id": "Float___zero_eq_zero_plus_zero-_LPAR_in-No-Kernel-Reasoning-About-Floating-Point-Numbers_RPAR_-next", "data": {"/Basic-Types/Floating-Point-Numbers/#Float___zero_eq_zero_plus_zero-_LPAR_in-No-Kernel-Reasoning-About-Floating-Point-Numbers_RPAR_-next": {"display": "Float.zero_eq_zero_plus_zero", "context": ["The Lean Language Reference", "Basic Types", "Floating-Point Numbers", "No Kernel Reasoning About Floating-Point Numbers"]}, "/Basic-Types/Floating-Point-Numbers/#Float___zero_eq_zero_plus_zero-_LPAR_in-No-Kernel-Reasoning-About-Floating-Point-Numbers_RPAR_": {"display": "Float.zero_eq_zero_plus_zero", "context": ["The Lean Language Reference", "Basic Types", "Floating-Point Numbers", "No Kernel Reasoning About Floating-Point Numbers"]}}, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Fix (in Non-strictly-positive inductive types)": [{"id": "Fix-_LPAR_in-Non-strictly-positive-inductive-types_RPAR_", "data": {"/The-Type-System/Inductive-Types/#Fix-_LPAR_in-Non-strictly-positive-inductive-types_RPAR_": {"display": "Fix", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Logical Model", "Well-Formedness Requirements", "Strict Positivity", "Non-strictly-positive inductive types"]}}, "address": "/The-Type-System/Inductive-Types/"}], "Fin'.zero (in Ineligible decreasing parameters)": [{"id": "Fin______zero-_LPAR_in-Ineligible-decreasing-parameters_RPAR_", "data": {"/Definitions/Recursive-Definitions/#Fin______zero-_LPAR_in-Ineligible-decreasing-parameters_RPAR_": {"display": "zero", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Structural Recursion", "Explicit Structural Recursion", "Ineligible decreasing parameters"]}}, "address": "/Definitions/Recursive-Definitions/"}], "Fin'.succ (in Ineligible decreasing parameters)": [{"id": "Fin______succ-_LPAR_in-Ineligible-decreasing-parameters_RPAR_", "data": {"/Definitions/Recursive-Definitions/#Fin______succ-_LPAR_in-Ineligible-decreasing-parameters_RPAR_": {"display": "succ", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Structural Recursion", "Explicit Structural Recursion", "Ineligible decreasing parameters"]}}, "address": "/Definitions/Recursive-Definitions/"}], "Fin' (in Ineligible decreasing parameters)": [{"id": "Fin___-_LPAR_in-Ineligible-decreasing-parameters_RPAR_", "data": {"/Definitions/Recursive-Definitions/#Fin___-_LPAR_in-Ineligible-decreasing-parameters_RPAR_": {"display": "Fin'", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Structural Recursion", "Explicit Structural Recursion", "Ineligible decreasing parameters"]}}, "address": "/Definitions/Recursive-Definitions/"}], "FileIterator.stream? (in Iterators and Effects)": [{"id": "FileIterator___stream___-_LPAR_in-Iterators-and-Effects_RPAR_", "data": {"/Iterators/Iterator-Definitions/#FileIterator___stream___-_LPAR_in-Iterators-and-Effects_RPAR_": {"display": "stream?", "context": ["The Lean Language Reference", "Iterators", "Iterator Definitions", "Finite and Productive Iterators", "Iterators and Effects"]}}, "address": "/Iterators/Iterator-Definitions/"}], "FileIterator.count (in Iterators and Effects)": [{"id": "FileIterator___count-_LPAR_in-Iterators-and-Effects_RPAR_", "data": {"/Iterators/Iterator-Definitions/#FileIterator___count-_LPAR_in-Iterators-and-Effects_RPAR_": {"display": "count", "context": ["The Lean Language Reference", "Iterators", "Iterator Definitions", "Finite and Productive Iterators", "Iterators and Effects"]}}, "address": "/Iterators/Iterator-Definitions/"}], "FileIterator (in Iterators and Effects)": [{"id": "FileIterator-_LPAR_in-Iterators-and-Effects_RPAR_", "data": {"/Iterators/Iterator-Definitions/#FileIterator-_LPAR_in-Iterators-and-Effects_RPAR_": {"display": "FileIterator", "context": ["The Lean Language Reference", "Iterators", "Iterator Definitions", "Finite and Productive Iterators", "Iterators and Effects"]}}, "address": "/Iterators/Iterator-Definitions/"}], "FamilyBike (in #print and Structure Types)": [{"id": "FamilyBike-_LPAR_in-___print--and-Structure-Types_RPAR_", "data": {"/The-Type-System/Inductive-Types/#FamilyBike-_LPAR_in-___print--and-Structure-Types_RPAR_": {"display": "FamilyBike", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Structure Declarations", "Structure Inheritance", "#print and Structure Types"]}}, "address": "/The-Type-System/Inductive-Types/"}], "ExtFun": [{"id": "ExtFun", "data": {"/The-Type-System/Quotients/#ExtFun": {"display": "ExtFun", "context": ["The Lean Language Reference", "The Type System", "Quotients", "Quotients and Function Extensionality"]}}, "address": "/The-Type-System/Quotients/"}], "Exp.var (in Mutual Structural Recursion Over Mutual Types)": [{"id": "Exp___var-_LPAR_in-Mutual-Structural-Recursion-Over-Mutual-Types_RPAR_", "data": {"/Definitions/Recursive-Definitions/#Exp___var-_LPAR_in-Mutual-Structural-Recursion-Over-Mutual-Types_RPAR_": {"display": "var", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Structural Recursion", "Mutual Structural Recursion", "Mutual Structural Recursion Over Mutual Types"]}}, "address": "/Definitions/Recursive-Definitions/"}], "Exp.size (in Mutual Structural Recursion Over Mutual Types)": [{"id": "Exp___size-_LPAR_in-Mutual-Structural-Recursion-Over-Mutual-Types_RPAR_", "data": {"/Definitions/Recursive-Definitions/#Exp___size-_LPAR_in-Mutual-Structural-Recursion-Over-Mutual-Types_RPAR_": {"display": "Exp.size", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Structural Recursion", "Mutual Structural Recursion", "Mutual Structural Recursion Over Mutual Types"]}}, "address": "/Definitions/Recursive-Definitions/"}], "Exp.app (in Mutual Structural Recursion Over Mutual Types)": [{"id": "Exp___app-_LPAR_in-Mutual-Structural-Recursion-Over-Mutual-Types_RPAR_", "data": {"/Definitions/Recursive-Definitions/#Exp___app-_LPAR_in-Mutual-Structural-Recursion-Over-Mutual-Types_RPAR_": {"display": "app", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Structural Recursion", "Mutual Structural Recursion", "Mutual Structural Recursion Over Mutual Types"]}}, "address": "/Definitions/Recursive-Definitions/"}], "Exp (in Mutual Structural Recursion Over Mutual Types)": [{"id": "Exp-_LPAR_in-Mutual-Structural-Recursion-Over-Mutual-Types_RPAR_", "data": {"/Definitions/Recursive-Definitions/#Exp-_LPAR_in-Mutual-Structural-Recursion-Over-Mutual-Types_RPAR_": {"display": "Exp", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Structural Recursion", "Mutual Structural Recursion", "Mutual Structural Recursion Over Mutual Types"]}}, "address": "/Definitions/Recursive-Definitions/"}], "Exceptions.mkFresh_spec": [{"id": "Exceptions___mkFresh_spec", "data": {"/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/#Exceptions___mkFresh_spec": {"display": "mkFresh_spec", "context": ["The Lean Language Reference", "The mvcgen tactic", "Tutorial: Verifying Imperative Programs Using mvcgen", "Exceptions"]}}, "address": "/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/"}], "Exceptions.mkFreshN_spec": [{"id": "Exceptions___mkFreshN_spec", "data": {"/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/#Exceptions___mkFreshN_spec": {"display": "mkFreshN_spec", "context": ["The Lean Language Reference", "The mvcgen tactic", "Tutorial: Verifying Imperative Programs Using mvcgen", "Exceptions"]}}, "address": "/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/"}], "Exceptions.mkFreshN_correct": [{"id": "Exceptions___mkFreshN_correct", "data": {"/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/#Exceptions___mkFreshN_correct": {"display": "mkFreshN_correct", "context": ["The Lean Language Reference", "The mvcgen tactic", "Tutorial: Verifying Imperative Programs Using mvcgen", "Exceptions"]}}, "address": "/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/"}], "Exceptions.mkFreshN": [{"id": "Exceptions___mkFreshN", "data": {"/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/#Exceptions___mkFreshN": {"display": "mkFreshN", "context": ["The Lean Language Reference", "The mvcgen tactic", "Tutorial: Verifying Imperative Programs Using mvcgen", "Exceptions"]}}, "address": "/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/"}], "Exceptions.mkFresh": [{"id": "Exceptions___mkFresh", "data": {"/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/#Exceptions___mkFresh": {"display": "mkFresh", "context": ["The Lean Language Reference", "The mvcgen tactic", "Tutorial: Verifying Imperative Programs Using mvcgen", "Exceptions"]}}, "address": "/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/"}], "Exceptions.Supply.property": [{"id": "Exceptions___Supply___property", "data": {"/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/#Exceptions___Supply___property": {"display": "property", "context": ["The Lean Language Reference", "The mvcgen tactic", "Tutorial: Verifying Imperative Programs Using mvcgen", "Exceptions"]}}, "address": "/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/"}], "Exceptions.Supply.limit": [{"id": "Exceptions___Supply___limit", "data": {"/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/#Exceptions___Supply___limit": {"display": "limit", "context": ["The Lean Language Reference", "The mvcgen tactic", "Tutorial: Verifying Imperative Programs Using mvcgen", "Exceptions"]}}, "address": "/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/"}], "Exceptions.Supply.counter": [{"id": "Exceptions___Supply___counter", "data": {"/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/#Exceptions___Supply___counter": {"display": "counter", "context": ["The Lean Language Reference", "The mvcgen tactic", "Tutorial: Verifying Imperative Programs Using mvcgen", "Exceptions"]}}, "address": "/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/"}], "Exceptions.Supply": [{"id": "Exceptions___Supply", "data": {"/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/#Exceptions___Supply": {"display": "Supply", "context": ["The Lean Language Reference", "The mvcgen tactic", "Tutorial: Verifying Imperative Programs Using mvcgen", "Exceptions"]}}, "address": "/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/"}], "ExamplePropagators.propagateAndUp": [{"id": "ExamplePropagators___propagateAndUp", "data": {"/The--grind--tactic/Constraint-Propagation/#ExamplePropagators___propagateAndUp": {"display": "propagateAndUp", "context": ["The Lean Language Reference", "The grind tactic", "Constraint Propagation"]}}, "address": "/The--grind--tactic/Constraint-Propagation/"}], "ExamplePropagators.propagateAndDown": [{"id": "ExamplePropagators___propagateAndDown", "data": {"/The--grind--tactic/Constraint-Propagation/#ExamplePropagators___propagateAndDown": {"display": "propagateAndDown", "context": ["The Lean Language Reference", "The grind tactic", "Constraint Propagation"]}}, "address": "/The--grind--tactic/Constraint-Propagation/"}], "EvenPrime.notOne (in No structure subtyping)": [{"id": "EvenPrime___notOne-_LPAR_in-No-structure-subtyping_RPAR_", "data": {"/The-Type-System/Inductive-Types/#EvenPrime___notOne-_LPAR_in-No-structure-subtyping_RPAR_": {"display": "notOne", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Structure Declarations", "Structure Inheritance", "No structure subtyping"]}}, "address": "/The-Type-System/Inductive-Types/"}], "EvenPrime.isPrime (in No structure subtyping)": [{"id": "EvenPrime___isPrime-_LPAR_in-No-structure-subtyping_RPAR_", "data": {"/The-Type-System/Inductive-Types/#EvenPrime___isPrime-_LPAR_in-No-structure-subtyping_RPAR_": {"display": "isPrime", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Structure Declarations", "Structure Inheritance", "No structure subtyping"]}}, "address": "/The-Type-System/Inductive-Types/"}], "EvenPrime (in No structure subtyping)": [{"id": "EvenPrime-_LPAR_in-No-structure-subtyping_RPAR_", "data": {"/The-Type-System/Inductive-Types/#EvenPrime-_LPAR_in-No-structure-subtyping_RPAR_": {"display": "EvenPrime", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Structure Declarations", "Structure Inheritance", "No structure subtyping"]}}, "address": "/The-Type-System/Inductive-Types/"}], "EvenOddList.nil (in Recursor with parameters and indices)": [{"id": "EvenOddList___nil-_LPAR_in-Recursor-with-parameters-and-indices_RPAR_", "data": {"/The-Type-System/Inductive-Types/#EvenOddList___nil-_LPAR_in-Recursor-with-parameters-and-indices_RPAR_": {"display": "nil", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Logical Model", "Recursors", "Recursor Types", "Recursor with parameters and indices"]}}, "address": "/The-Type-System/Inductive-Types/"}], "EvenOddList.nil (in A type with parameter and index)": [{"id": "EvenOddList___nil-_LPAR_in-A-type-with-parameter-and-index_RPAR_", "data": {"/The-Type-System/Inductive-Types/#EvenOddList___nil-_LPAR_in-A-type-with-parameter-and-index_RPAR_": {"display": "nil", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Inductive Type Declarations", "Example Inductive Types", "A type with parameter and index"]}}, "address": "/The-Type-System/Inductive-Types/"}], "EvenOddList.cons (in Recursor with parameters and indices)": [{"id": "EvenOddList___cons-_LPAR_in-Recursor-with-parameters-and-indices_RPAR_", "data": {"/The-Type-System/Inductive-Types/#EvenOddList___cons-_LPAR_in-Recursor-with-parameters-and-indices_RPAR_": {"display": "cons", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Logical Model", "Recursors", "Recursor Types", "Recursor with parameters and indices"]}}, "address": "/The-Type-System/Inductive-Types/"}], "EvenOddList.cons (in A type with parameter and index)": [{"id": "EvenOddList___cons-_LPAR_in-A-type-with-parameter-and-index_RPAR_", "data": {"/The-Type-System/Inductive-Types/#EvenOddList___cons-_LPAR_in-A-type-with-parameter-and-index_RPAR_": {"display": "cons", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Inductive Type Declarations", "Example Inductive Types", "A type with parameter and index"]}}, "address": "/The-Type-System/Inductive-Types/"}], "EvenOddList (in Recursor with parameters and indices)": [{"id": "EvenOddList-_LPAR_in-Recursor-with-parameters-and-indices_RPAR_", "data": {"/The-Type-System/Inductive-Types/#EvenOddList-_LPAR_in-Recursor-with-parameters-and-indices_RPAR_": {"display": "EvenOddList", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Logical Model", "Recursors", "Recursor Types", "Recursor with parameters and indices"]}}, "address": "/The-Type-System/Inductive-Types/"}], "EvenOddList (in A type with parameter and index)": [{"id": "EvenOddList-_LPAR_in-A-type-with-parameter-and-index_RPAR_", "data": {"/The-Type-System/Inductive-Types/#EvenOddList-_LPAR_in-A-type-with-parameter-and-index_RPAR_": {"display": "EvenOddList", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Inductive Type Declarations", "Example Inductive Types", "A type with parameter and index"]}}, "address": "/The-Type-System/Inductive-Types/"}], "EvenNumber.val (in No structure subtyping)": [{"id": "EvenNumber___val-_LPAR_in-No-structure-subtyping_RPAR_", "data": {"/The-Type-System/Inductive-Types/#EvenNumber___val-_LPAR_in-No-structure-subtyping_RPAR_": {"display": "val", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Structure Declarations", "Structure Inheritance", "No structure subtyping"]}}, "address": "/The-Type-System/Inductive-Types/"}], "EvenNumber.isEven (in No structure subtyping)": [{"id": "EvenNumber___isEven-_LPAR_in-No-structure-subtyping_RPAR_", "data": {"/The-Type-System/Inductive-Types/#EvenNumber___isEven-_LPAR_in-No-structure-subtyping_RPAR_": {"display": "isEven", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Structure Declarations", "Structure Inheritance", "No structure subtyping"]}}, "address": "/The-Type-System/Inductive-Types/"}], "EvenNumber (in No structure subtyping)": [{"id": "EvenNumber-_LPAR_in-No-structure-subtyping_RPAR_", "data": {"/The-Type-System/Inductive-Types/#EvenNumber-_LPAR_in-No-structure-subtyping_RPAR_": {"display": "EvenNumber", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Structure Declarations", "Structure Inheritance", "No structure subtyping"]}}, "address": "/The-Type-System/Inductive-Types/"}], "EvenList.nil (in Mutually Defined Inductive Types)": [{"id": "EvenList___nil-_LPAR_in-Mutually-Defined-Inductive-Types_RPAR_", "data": {"/The-Type-System/Inductive-Types/#EvenList___nil-_LPAR_in-Mutually-Defined-Inductive-Types_RPAR_": {"display": "nil", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Mutual Inductive Types", "Mutually Defined Inductive Types"]}}, "address": "/The-Type-System/Inductive-Types/"}], "EvenList.cons (in Mutually Defined Inductive Types)": [{"id": "EvenList___cons-_LPAR_in-Mutually-Defined-Inductive-Types_RPAR_", "data": {"/The-Type-System/Inductive-Types/#EvenList___cons-_LPAR_in-Mutually-Defined-Inductive-Types_RPAR_": {"display": "cons", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Mutual Inductive Types", "Mutually Defined Inductive Types"]}}, "address": "/The-Type-System/Inductive-Types/"}], "EvenList (in Mutually Defined Inductive Types)": [{"id": "EvenList-_LPAR_in-Mutually-Defined-Inductive-Types_RPAR_", "data": {"/The-Type-System/Inductive-Types/#EvenList-_LPAR_in-Mutually-Defined-Inductive-Types_RPAR_": {"display": "EvenList", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Mutual Inductive Types", "Mutually Defined Inductive Types"]}}, "address": "/The-Type-System/Inductive-Types/"}], "Even.zero (in Splitting Predicates)": [{"id": "Even___zero-_LPAR_in-Splitting-Predicates_RPAR_", "data": {"/The--grind--tactic/Case-Analysis/#Even___zero-_LPAR_in-Splitting-Predicates_RPAR_": {"display": "zero", "context": ["The Lean Language Reference", "The grind tactic", "Case Analysis", "Selection Heuristics", "Splitting Predicates"]}}, "address": "/The--grind--tactic/Case-Analysis/"}], "Even.zero (in Even and odd)": [{"id": "Even___zero-_LPAR_in-Even-and-odd_RPAR_", "data": {"/The-Type-System/Inductive-Types/#Even___zero-_LPAR_in-Even-and-odd_RPAR_": {"display": "zero", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Mutual Inductive Types", "Recursors", "Even and odd"]}}, "address": "/The-Type-System/Inductive-Types/"}], "Even.zero (in Even Numbers)": [{"id": "Even___zero-_LPAR_in-Even-Numbers_RPAR_", "data": {"/Introduction/#Even___zero-_LPAR_in-Even-Numbers_RPAR_": {"display": "zero", "context": ["The Lean Language Reference", "Introduction", "Typographical Conventions", "Examples", "Even Numbers"]}}, "address": "/Introduction/"}], "Even.zero": [{"id": "Even___zero", "data": {"/Introduction/#Even___zero": {"display": "zero", "context": ["The Lean Language Reference", "Introduction", "Typographical Conventions", "Constant, Syntax, and Tactic References"]}}, "address": "/Introduction/"}], "Even.succ (in Even and odd)": [{"id": "Even___succ-_LPAR_in-Even-and-odd_RPAR_", "data": {"/The-Type-System/Inductive-Types/#Even___succ-_LPAR_in-Even-and-odd_RPAR_": {"display": "succ", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Mutual Inductive Types", "Recursors", "Even and odd"]}}, "address": "/The-Type-System/Inductive-Types/"}], "Even.step (in Splitting Predicates)": [{"id": "Even___step-_LPAR_in-Splitting-Predicates_RPAR_", "data": {"/The--grind--tactic/Case-Analysis/#Even___step-_LPAR_in-Splitting-Predicates_RPAR_": {"display": "step", "context": ["The Lean Language Reference", "The grind tactic", "Case Analysis", "Selection Heuristics", "Splitting Predicates"]}}, "address": "/The--grind--tactic/Case-Analysis/"}], "Even.plusTwo (in Even Numbers)": [{"id": "Even___plusTwo-_LPAR_in-Even-Numbers_RPAR_", "data": {"/Introduction/#Even___plusTwo-_LPAR_in-Even-Numbers_RPAR_": {"display": "plusTwo", "context": ["The Lean Language Reference", "Introduction", "Typographical Conventions", "Examples", "Even Numbers"]}}, "address": "/Introduction/"}], "Even.plusTwo": [{"id": "Even___plusTwo", "data": {"/Introduction/#Even___plusTwo": {"display": "plusTwo", "context": ["The Lean Language Reference", "Introduction", "Typographical Conventions", "Constant, Syntax, and Tactic References"]}}, "address": "/Introduction/"}], "Even.number (in Defining Coercions)": [{"id": "Even___number-_LPAR_in-Defining-Coercions_RPAR_", "data": {"/Coercions/Coercing-Between-Types/#Even___number-_LPAR_in-Defining-Coercions_RPAR_": {"display": "number", "context": ["The Lean Language Reference", "Coercions", "Coercing Between Types", "Defining Coercions"]}}, "address": "/Coercions/Coercing-Between-Types/"}], "Even.isEven (in Defining Coercions)": [{"id": "Even___isEven-_LPAR_in-Defining-Coercions_RPAR_", "data": {"/Coercions/Coercing-Between-Types/#Even___isEven-_LPAR_in-Defining-Coercions_RPAR_": {"display": "isEven", "context": ["The Lean Language Reference", "Coercions", "Coercing Between Types", "Defining Coercions"]}}, "address": "/Coercions/Coercing-Between-Types/"}], "Even.half (in Default Instances)": [{"id": "Even___half-_LPAR_in-Default-Instances_RPAR_", "data": {"/Type-Classes/Instance-Declarations/#Even___half-_LPAR_in-Default-Instances_RPAR_": {"display": "half", "context": ["The Lean Language Reference", "Type Classes", "Instance Declarations", "Default Instances", "Default Instances"]}}, "address": "/Type-Classes/Instance-Declarations/"}], "Even (in Splitting Predicates)": [{"id": "Even-_LPAR_in-Splitting-Predicates_RPAR_", "data": {"/The--grind--tactic/Case-Analysis/#Even-_LPAR_in-Splitting-Predicates_RPAR_": {"display": "Even", "context": ["The Lean Language Reference", "The grind tactic", "Case Analysis", "Selection Heuristics", "Splitting Predicates"]}}, "address": "/The--grind--tactic/Case-Analysis/"}], "Even (in Even and odd)": [{"id": "Even-_LPAR_in-Even-and-odd_RPAR_", "data": {"/The-Type-System/Inductive-Types/#Even-_LPAR_in-Even-and-odd_RPAR_": {"display": "Even", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Mutual Inductive Types", "Recursors", "Even and odd"]}}, "address": "/The-Type-System/Inductive-Types/"}], "Even (in Even Numbers)": [{"id": "Even-_LPAR_in-Even-Numbers_RPAR_", "data": {"/Introduction/#Even-_LPAR_in-Even-Numbers_RPAR_": {"display": "Even", "context": ["The Lean Language Reference", "Introduction", "Typographical Conventions", "Examples", "Even Numbers"]}}, "address": "/Introduction/"}], "Even (in Defining Coercions)": [{"id": "Even-_LPAR_in-Defining-Coercions_RPAR_", "data": {"/Coercions/Coercing-Between-Types/#Even-_LPAR_in-Defining-Coercions_RPAR_": {"display": "Even", "context": ["The Lean Language Reference", "Coercions", "Coercing Between Types", "Defining Coercions"]}}, "address": "/Coercions/Coercing-Between-Types/"}], "Even (in Default Instances)": [{"id": "Even-_LPAR_in-Default-Instances_RPAR_", "data": {"/Type-Classes/Instance-Declarations/#Even-_LPAR_in-Default-Instances_RPAR_": {"display": "Even", "context": ["The Lean Language Reference", "Type Classes", "Instance Declarations", "Default Instances", "Default Instances"]}}, "address": "/Type-Classes/Instance-Declarations/"}], "Even": [{"id": "Even", "data": {"/Introduction/#Even": {"display": "Even", "context": ["The Lean Language Reference", "Introduction", "Typographical Conventions", "Constant, Syntax, and Tactic References"]}}, "address": "/Introduction/"}], "Error.integerOverflow": [{"id": "Error___integerOverflow", "data": {"/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/#Error___integerOverflow": {"display": "integerOverflow", "context": ["The Lean Language Reference", "The mvcgen tactic", "Tutorial: Verifying Imperative Programs Using mvcgen", "Extending mvcgen With Support for Custom Monads"]}}, "address": "/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/"}], "Error": [{"id": "Error", "data": {"/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/#Error": {"display": "Error", "context": ["The Lean Language Reference", "The mvcgen tactic", "Tutorial: Verifying Imperative Programs Using mvcgen", "Extending mvcgen With Support for Custom Monads"]}}, "address": "/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/"}], "Eq.unique": [{"id": "Eq___unique", "data": {"/Basic-Propositions/Propositional-Equality/#Eq___unique": {"display": "Eq.unique", "context": ["The Lean Language Reference", "Basic Propositions", "Propositional Equality", "Uniqueness of Equality Proofs"]}}, "address": "/Basic-Propositions/Propositional-Equality/"}], "Env.get (in Coercing to Function Types)": [{"id": "Env___get-_LPAR_in-Coercing-to-Function-Types_RPAR_", "data": {"/Coercions/Coercing-to-Function-Types/#Env___get-_LPAR_in-Coercing-to-Function-Types_RPAR_": {"display": "Env.get", "context": ["The Lean Language Reference", "Coercions", "Coercing to Function Types", "Coercing to Function Types"]}}, "address": "/Coercions/Coercing-to-Function-Types/"}], "Env.extend (in Coercing to Function Types)": [{"id": "Env___extend-_LPAR_in-Coercing-to-Function-Types_RPAR_", "data": {"/Coercions/Coercing-to-Function-Types/#Env___extend-_LPAR_in-Coercing-to-Function-Types_RPAR_": {"display": "Env.extend", "context": ["The Lean Language Reference", "Coercions", "Coercing to Function Types", "Coercing to Function Types"]}}, "address": "/Coercions/Coercing-to-Function-Types/"}], "Env.empty (in Coercing to Function Types)": [{"id": "Env___empty-_LPAR_in-Coercing-to-Function-Types_RPAR_", "data": {"/Coercions/Coercing-to-Function-Types/#Env___empty-_LPAR_in-Coercing-to-Function-Types_RPAR_": {"display": "Env.empty", "context": ["The Lean Language Reference", "Coercions", "Coercing to Function Types", "Coercing to Function Types"]}}, "address": "/Coercions/Coercing-to-Function-Types/"}], "Env (in Coercing to Function Types)": [{"id": "Env-_LPAR_in-Coercing-to-Function-Types_RPAR_", "data": {"/Coercions/Coercing-to-Function-Types/#Env-_LPAR_in-Coercing-to-Function-Types_RPAR_": {"display": "Env", "context": ["The Lean Language Reference", "Coercions", "Coercing to Function Types", "Coercing to Function Types"]}}, "address": "/Coercions/Coercing-to-Function-Types/"}], "ElectricVehicle.batteries (in #print and Structure Types)": [{"id": "ElectricVehicle___batteries-_LPAR_in-___print--and-Structure-Types_RPAR_", "data": {"/The-Type-System/Inductive-Types/#ElectricVehicle___batteries-_LPAR_in-___print--and-Structure-Types_RPAR_": {"display": "batteries", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Structure Declarations", "Structure Inheritance", "#print and Structure Types"]}}, "address": "/The-Type-System/Inductive-Types/"}], "ElectricVehicle (in #print and Structure Types)": [{"id": "ElectricVehicle-_LPAR_in-___print--and-Structure-Types_RPAR_", "data": {"/The-Type-System/Inductive-Types/#ElectricVehicle-_LPAR_in-___print--and-Structure-Types_RPAR_": {"display": "ElectricVehicle", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Structure Declarations", "Structure Inheritance", "#print and Structure Types"]}}, "address": "/The-Type-System/Inductive-Types/"}], "ElectricFamilyBike (in #print and Structure Types)": [{"id": "ElectricFamilyBike-_LPAR_in-___print--and-Structure-Types_RPAR_", "data": {"/The-Type-System/Inductive-Types/#ElectricFamilyBike-_LPAR_in-___print--and-Structure-Types_RPAR_": {"display": "ElectricFamilyBike", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Structure Declarations", "Structure Inheritance", "#print and Structure Types"]}}, "address": "/The-Type-System/Inductive-Types/"}], "ElectricBike (in #print and Structure Types)": [{"id": "ElectricBike-_LPAR_in-___print--and-Structure-Types_RPAR_", "data": {"/The-Type-System/Inductive-Types/#ElectricBike-_LPAR_in-___print--and-Structure-Types_RPAR_": {"display": "ElectricBike", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Structure Declarations", "Structure Inheritance", "#print and Structure Types"]}}, "address": "/The-Type-System/Inductive-Types/"}], "Either.right (in Parameters before and after the colon)": [{"id": "Either___right-_LPAR_in-Parameters-before-and-after-the-colon_RPAR_", "data": {"/The-Type-System/Inductive-Types/#Either___right-_LPAR_in-Parameters-before-and-after-the-colon_RPAR_": {"display": "right", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Inductive Type Declarations", "Example Inductive Types", "Parameters before and after the colon"]}}, "address": "/The-Type-System/Inductive-Types/"}], "Either.left (in Parameters before and after the colon)": [{"id": "Either___left-_LPAR_in-Parameters-before-and-after-the-colon_RPAR_", "data": {"/The-Type-System/Inductive-Types/#Either___left-_LPAR_in-Parameters-before-and-after-the-colon_RPAR_": {"display": "left", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Inductive Type Declarations", "Example Inductive Types", "Parameters before and after the colon"]}}, "address": "/The-Type-System/Inductive-Types/"}], "Either.inr (in Universes, constructors, and parameters)": [{"id": "Either___inr-_LPAR_in-Universes___-constructors___-and-parameters_RPAR_", "data": {"/The-Type-System/Inductive-Types/#Either___inr-_LPAR_in-Universes___-constructors___-and-parameters_RPAR_": {"display": "inr", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Logical Model", "Well-Formedness Requirements", "Universe Levels", "Universes, constructors, and parameters"]}}, "address": "/The-Type-System/Inductive-Types/"}], "Either.inl (in Universes, constructors, and parameters)": [{"id": "Either___inl-_LPAR_in-Universes___-constructors___-and-parameters_RPAR_", "data": {"/The-Type-System/Inductive-Types/#Either___inl-_LPAR_in-Universes___-constructors___-and-parameters_RPAR_": {"display": "inl", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Logical Model", "Well-Formedness Requirements", "Universe Levels", "Universes, constructors, and parameters"]}}, "address": "/The-Type-System/Inductive-Types/"}], "Either''.right (in Parameters before and after the colon)": [{"id": "Either_________right-_LPAR_in-Parameters-before-and-after-the-colon_RPAR_", "data": {"/The-Type-System/Inductive-Types/#Either_________right-_LPAR_in-Parameters-before-and-after-the-colon_RPAR_": {"display": "right", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Inductive Type Declarations", "Example Inductive Types", "Parameters before and after the colon"]}}, "address": "/The-Type-System/Inductive-Types/"}], "Either''.left (in Parameters before and after the colon)": [{"id": "Either_________left-_LPAR_in-Parameters-before-and-after-the-colon_RPAR_", "data": {"/The-Type-System/Inductive-Types/#Either_________left-_LPAR_in-Parameters-before-and-after-the-colon_RPAR_": {"display": "left", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Inductive Type Declarations", "Example Inductive Types", "Parameters before and after the colon"]}}, "address": "/The-Type-System/Inductive-Types/"}], "Either'' (in Parameters before and after the colon)": [{"id": "Either______-_LPAR_in-Parameters-before-and-after-the-colon_RPAR_", "data": {"/The-Type-System/Inductive-Types/#Either______-_LPAR_in-Parameters-before-and-after-the-colon_RPAR_": {"display": "Either''", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Inductive Type Declarations", "Example Inductive Types", "Parameters before and after the colon"]}}, "address": "/The-Type-System/Inductive-Types/"}], "Either' (in Parameters before and after the colon)": [{"id": "Either___-_LPAR_in-Parameters-before-and-after-the-colon_RPAR_", "data": {"/The-Type-System/Inductive-Types/#Either___-_LPAR_in-Parameters-before-and-after-the-colon_RPAR_": {"display": "Either'", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Inductive Type Declarations", "Example Inductive Types", "Parameters before and after the colon"]}}, "address": "/The-Type-System/Inductive-Types/"}], "Either (in Universes, constructors, and parameters)": [{"id": "Either-_LPAR_in-Universes___-constructors___-and-parameters_RPAR_", "data": {"/The-Type-System/Inductive-Types/#Either-_LPAR_in-Universes___-constructors___-and-parameters_RPAR_": {"display": "Either", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Logical Model", "Well-Formedness Requirements", "Universe Levels", "Universes, constructors, and parameters"]}}, "address": "/The-Type-System/Inductive-Types/"}], "Either (in Parameters before and after the colon)": [{"id": "Either-_LPAR_in-Parameters-before-and-after-the-colon_RPAR_", "data": {"/The-Type-System/Inductive-Types/#Either-_LPAR_in-Parameters-before-and-after-the-colon_RPAR_": {"display": "Either", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Inductive Type Declarations", "Example Inductive Types", "Parameters before and after the colon"]}}, "address": "/The-Type-System/Inductive-Types/"}], "DivBy3 (in Subtype Coercions)": [{"id": "DivBy3-_LPAR_in-Subtype-Coercions_RPAR_", "data": {"/Basic-Types/Subtypes/#DivBy3-_LPAR_in-Subtype-Coercions_RPAR_": {"display": "DivBy3", "context": ["The Lean Language Reference", "Basic Types", "Subtypes", "Subtype Coercions"]}}, "address": "/Basic-Types/Subtypes/"}], "Dessert.cupcake (in Using in for Local Scopes)": [{"id": "Dessert___cupcake-_LPAR_in-Using--in--for-Local-Scopes_RPAR_", "data": {"/Namespaces-and-Sections/#Dessert___cupcake-_LPAR_in-Using--in--for-Local-Scopes_RPAR_": {"display": "Dessert.cupcake", "context": ["The Lean Language Reference", "Namespaces and Sections", "Section Scopes", "Controlling Section Scopes", "Using in for Local Scopes"]}}, "address": "/Namespaces-and-Sections/"}], "Decreasing.singleton (in Patterns for Constructors)": [{"id": "Decreasing___singleton-_LPAR_in-Patterns-for-Constructors_RPAR_", "data": {"/The--grind--tactic/E___matching/#Decreasing___singleton-_LPAR_in-Patterns-for-Constructors_RPAR_": {"display": "singleton", "context": ["The Lean Language Reference", "The grind tactic", "E‑matching", "Patterns", "Patterns for Constructors"]}}, "address": "/The--grind--tactic/E___matching/"}], "Decreasing.nil (in Patterns for Constructors)": [{"id": "Decreasing___nil-_LPAR_in-Patterns-for-Constructors_RPAR_", "data": {"/The--grind--tactic/E___matching/#Decreasing___nil-_LPAR_in-Patterns-for-Constructors_RPAR_": {"display": "nil", "context": ["The Lean Language Reference", "The grind tactic", "E‑matching", "Patterns", "Patterns for Constructors"]}}, "address": "/The--grind--tactic/E___matching/"}], "Decreasing.cons (in Patterns for Constructors)": [{"id": "Decreasing___cons-_LPAR_in-Patterns-for-Constructors_RPAR_", "data": {"/The--grind--tactic/E___matching/#Decreasing___cons-_LPAR_in-Patterns-for-Constructors_RPAR_": {"display": "cons", "context": ["The Lean Language Reference", "The grind tactic", "E‑matching", "Patterns", "Patterns for Constructors"]}}, "address": "/The--grind--tactic/E___matching/"}], "Decreasing (in Patterns for Constructors)": [{"id": "Decreasing-_LPAR_in-Patterns-for-Constructors_RPAR_", "data": {"/The--grind--tactic/E___matching/#Decreasing-_LPAR_in-Patterns-for-Constructors_RPAR_": {"display": "Decreasing", "context": ["The Lean Language Reference", "The grind tactic", "E‑matching", "Patterns", "Patterns for Constructors"]}}, "address": "/The--grind--tactic/E___matching/"}], "Decision.yes (in CoeOut vs Coe instances)": [{"id": "Decision___yes-_LPAR_in-CoeOut--vs--Coe--instances_RPAR_", "data": {"/Coercions/Coercing-Between-Types/#Decision___yes-_LPAR_in-CoeOut--vs--Coe--instances_RPAR_": {"display": "yes", "context": ["The Lean Language Reference", "Coercions", "Coercing Between Types", "CoeOut vs Coe instances"]}}, "address": "/Coercions/Coercing-Between-Types/"}], "Decision.ofBool (in CoeOut vs Coe instances)": [{"id": "Decision___ofBool-_LPAR_in-CoeOut--vs--Coe--instances_RPAR_", "data": {"/Coercions/Coercing-Between-Types/#Decision___ofBool-_LPAR_in-CoeOut--vs--Coe--instances_RPAR_": {"display": "Decision.ofBool", "context": ["The Lean Language Reference", "Coercions", "Coercing Between Types", "CoeOut vs Coe instances"]}}, "address": "/Coercions/Coercing-Between-Types/"}], "Decision.no (in CoeOut vs Coe instances)": [{"id": "Decision___no-_LPAR_in-CoeOut--vs--Coe--instances_RPAR_", "data": {"/Coercions/Coercing-Between-Types/#Decision___no-_LPAR_in-CoeOut--vs--Coe--instances_RPAR_": {"display": "no", "context": ["The Lean Language Reference", "Coercions", "Coercing Between Types", "CoeOut vs Coe instances"]}}, "address": "/Coercions/Coercing-Between-Types/"}], "Decision.maybe (in CoeOut vs Coe instances)": [{"id": "Decision___maybe-_LPAR_in-CoeOut--vs--Coe--instances_RPAR_", "data": {"/Coercions/Coercing-Between-Types/#Decision___maybe-_LPAR_in-CoeOut--vs--Coe--instances_RPAR_": {"display": "maybe", "context": ["The Lean Language Reference", "Coercions", "Coercing Between Types", "CoeOut vs Coe instances"]}}, "address": "/Coercions/Coercing-Between-Types/"}], "Decision (in CoeOut vs Coe instances)": [{"id": "Decision-_LPAR_in-CoeOut--vs--Coe--instances_RPAR_", "data": {"/Coercions/Coercing-Between-Types/#Decision-_LPAR_in-CoeOut--vs--Coe--instances_RPAR_": {"display": "Decision", "context": ["The Lean Language Reference", "Coercions", "Coercing Between Types", "CoeOut vs Coe instances"]}}, "address": "/Coercions/Coercing-Between-Types/"}], "Decimal.toNat (in Defining Coercions: Decimal Numbers)": [{"id": "Decimal___toNat-_LPAR_in-Defining-Coercions___-Decimal-Numbers_RPAR_", "data": {"/Coercions/#Decimal___toNat-_LPAR_in-Defining-Coercions___-Decimal-Numbers_RPAR_": {"display": "Decimal.toNat", "context": ["The Lean Language Reference", "Coercions", "Defining Coercions: Decimal Numbers"]}}, "address": "/Coercions/"}], "Decimal.digits (in Defining Coercions: Decimal Numbers)": [{"id": "Decimal___digits-_LPAR_in-Defining-Coercions___-Decimal-Numbers_RPAR_", "data": {"/Coercions/#Decimal___digits-_LPAR_in-Defining-Coercions___-Decimal-Numbers_RPAR_": {"display": "digits", "context": ["The Lean Language Reference", "Coercions", "Defining Coercions: Decimal Numbers"]}}, "address": "/Coercions/"}], "Decimal (in Defining Coercions: Decimal Numbers)": [{"id": "Decimal-_LPAR_in-Defining-Coercions___-Decimal-Numbers_RPAR_", "data": {"/Coercions/#Decimal-_LPAR_in-Defining-Coercions___-Decimal-Numbers_RPAR_": {"display": "Decimal", "context": ["The Lean Language Reference", "Coercions", "Defining Coercions: Decimal Numbers"]}}, "address": "/Coercions/"}], "Day.we (in Implementing Ranges)": [{"id": "Day___we-_LPAR_in-Implementing-Ranges_RPAR_", "data": {"/Basic-Types/Ranges/#Day___we-_LPAR_in-Implementing-Ranges_RPAR_": {"display": "we", "context": ["The Lean Language Reference", "Basic Types", "Ranges", "Implementing Ranges", "Implementing Ranges"]}}, "address": "/Basic-Types/Ranges/"}], "Day.tu (in Implementing Ranges)": [{"id": "Day___tu-_LPAR_in-Implementing-Ranges_RPAR_", "data": {"/Basic-Types/Ranges/#Day___tu-_LPAR_in-Implementing-Ranges_RPAR_": {"display": "tu", "context": ["The Lean Language Reference", "Basic Types", "Ranges", "Implementing Ranges", "Implementing Ranges"]}}, "address": "/Basic-Types/Ranges/"}], "Day.toNat (in Implementing Ranges)": [{"id": "Day___toNat-_LPAR_in-Implementing-Ranges_RPAR_", "data": {"/Basic-Types/Ranges/#Day___toNat-_LPAR_in-Implementing-Ranges_RPAR_": {"display": "Day.toNat", "context": ["The Lean Language Reference", "Basic Types", "Ranges", "Implementing Ranges", "Implementing Ranges"]}}, "address": "/Basic-Types/Ranges/"}], "Day.th (in Implementing Ranges)": [{"id": "Day___th-_LPAR_in-Implementing-Ranges_RPAR_", "data": {"/Basic-Types/Ranges/#Day___th-_LPAR_in-Implementing-Ranges_RPAR_": {"display": "th", "context": ["The Lean Language Reference", "Basic Types", "Ranges", "Implementing Ranges", "Implementing Ranges"]}}, "address": "/Basic-Types/Ranges/"}], "Day.succMany?_zero (in Implementing Ranges)": [{"id": "Day___succMany____zero-_LPAR_in-Implementing-Ranges_RPAR_", "data": {"/Basic-Types/Ranges/#Day___succMany____zero-_LPAR_in-Implementing-Ranges_RPAR_": {"display": "Day.succMany?_zero", "context": ["The Lean Language Reference", "Basic Types", "Ranges", "Implementing Ranges", "Implementing Ranges"]}}, "address": "/Basic-Types/Ranges/"}], "Day.succMany?_steps (in Implementing Ranges)": [{"id": "Day___succMany____steps-_LPAR_in-Implementing-Ranges_RPAR_", "data": {"/Basic-Types/Ranges/#Day___succMany____steps-_LPAR_in-Implementing-Ranges_RPAR_": {"display": "Day.succMany?_steps", "context": ["The Lean Language Reference", "Basic Types", "Ranges", "Implementing Ranges", "Implementing Ranges"]}}, "address": "/Basic-Types/Ranges/"}], "Day.succMany?_add_one (in Implementing Ranges)": [{"id": "Day___succMany____add_one-_LPAR_in-Implementing-Ranges_RPAR_", "data": {"/Basic-Types/Ranges/#Day___succMany____add_one-_LPAR_in-Implementing-Ranges_RPAR_": {"display": "Day.succMany?_add_one", "context": ["The Lean Language Reference", "Basic Types", "Ranges", "Implementing Ranges", "Implementing Ranges"]}}, "address": "/Basic-Types/Ranges/"}], "Day.succ? (in Implementing Ranges)": [{"id": "Day___succ___-_LPAR_in-Implementing-Ranges_RPAR_", "data": {"/Basic-Types/Ranges/#Day___succ___-_LPAR_in-Implementing-Ranges_RPAR_": {"display": "Day.succ?", "context": ["The Lean Language Reference", "Basic Types", "Ranges", "Implementing Ranges", "Implementing Ranges"]}}, "address": "/Basic-Types/Ranges/"}], "Day.su (in Implementing Ranges)": [{"id": "Day___su-_LPAR_in-Implementing-Ranges_RPAR_", "data": {"/Basic-Types/Ranges/#Day___su-_LPAR_in-Implementing-Ranges_RPAR_": {"display": "su", "context": ["The Lean Language Reference", "Basic Types", "Ranges", "Implementing Ranges", "Implementing Ranges"]}}, "address": "/Basic-Types/Ranges/"}], "Day.sa (in Implementing Ranges)": [{"id": "Day___sa-_LPAR_in-Implementing-Ranges_RPAR_", "data": {"/Basic-Types/Ranges/#Day___sa-_LPAR_in-Implementing-Ranges_RPAR_": {"display": "sa", "context": ["The Lean Language Reference", "Basic Types", "Ranges", "Implementing Ranges", "Implementing Ranges"]}}, "address": "/Basic-Types/Ranges/"}], "Day.mo (in Implementing Ranges)": [{"id": "Day___mo-_LPAR_in-Implementing-Ranges_RPAR_", "data": {"/Basic-Types/Ranges/#Day___mo-_LPAR_in-Implementing-Ranges_RPAR_": {"display": "mo", "context": ["The Lean Language Reference", "Basic Types", "Ranges", "Implementing Ranges", "Implementing Ranges"]}}, "address": "/Basic-Types/Ranges/"}], "Day.isWeekday (in Implementing Ranges)": [{"id": "Day___isWeekday-_LPAR_in-Implementing-Ranges_RPAR_", "data": {"/Basic-Types/Ranges/#Day___isWeekday-_LPAR_in-Implementing-Ranges_RPAR_": {"display": "Day.isWeekday", "context": ["The Lean Language Reference", "Basic Types", "Ranges", "Implementing Ranges", "Implementing Ranges"]}}, "address": "/Basic-Types/Ranges/"}], "Day.fr (in Implementing Ranges)": [{"id": "Day___fr-_LPAR_in-Implementing-Ranges_RPAR_", "data": {"/Basic-Types/Ranges/#Day___fr-_LPAR_in-Implementing-Ranges_RPAR_": {"display": "fr", "context": ["The Lean Language Reference", "Basic Types", "Ranges", "Implementing Ranges", "Implementing Ranges"]}}, "address": "/Basic-Types/Ranges/"}], "Day (in Implementing Ranges)": [{"id": "Day-_LPAR_in-Implementing-Ranges_RPAR_", "data": {"/Basic-Types/Ranges/#Day-_LPAR_in-Implementing-Ranges_RPAR_": {"display": "Day", "context": ["The Lean Language Reference", "Basic Types", "Ranges", "Implementing Ranges", "Implementing Ranges"]}}, "address": "/Basic-Types/Ranges/"}], "DRTree (in Invalid Nested Inductive Types)": [{"id": "DRTree-_LPAR_in-Invalid-Nested-Inductive-Types_RPAR_", "data": {"/The-Type-System/Inductive-Types/#DRTree-_LPAR_in-Invalid-Nested-Inductive-Types_RPAR_": {"display": "DRTree", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Mutual Inductive Types", "Nested Inductive Types", "Invalid Nested Inductive Types"]}}, "address": "/The-Type-System/Inductive-Types/"}], "D.x (in Disambiguation via Typing)": [{"id": "D___x-_LPAR_in-Disambiguation-via-Typing_RPAR_", "data": {"/Terms/Identifiers/#D___x-_LPAR_in-Disambiguation-via-Typing_RPAR_": {"display": "D.x", "context": ["The Lean Language Reference", "Terms", "Identifiers", "Disambiguation via Typing"]}}, "address": "/Terms/Identifiers/"}], "CustomUnit.customUnit (in Definitional Equality of Unit-Like Types)": [{"id": "CustomUnit___customUnit-_LPAR_in-Definitional-Equality-of-Unit-Like-Types_RPAR_", "data": {"/Basic-Types/The-Unit-Type/#CustomUnit___customUnit-_LPAR_in-Definitional-Equality-of-Unit-Like-Types_RPAR_": {"display": "customUnit", "context": ["The Lean Language Reference", "Basic Types", "The Unit Type", "Definitional Equality", "Definitional Equality of Unit-Like Types"]}}, "address": "/Basic-Types/The-Unit-Type/"}], "CustomUnit (in Definitional Equality of Unit-Like Types)": [{"id": "CustomUnit-_LPAR_in-Definitional-Equality-of-Unit-Like-Types_RPAR_", "data": {"/Basic-Types/The-Unit-Type/#CustomUnit-_LPAR_in-Definitional-Equality-of-Unit-Like-Types_RPAR_": {"display": "CustomUnit", "context": ["The Lean Language Reference", "Basic Types", "The Unit Type", "Definitional Equality", "Definitional Equality of Unit-Like Types"]}}, "address": "/Basic-Types/The-Unit-Type/"}], "Complex.real (in Private Field Values)": [{"id": "Complex___real-_LPAR_in-Private-Field-Values_RPAR_", "data": {"/The-Type-System/Inductive-Types/#Complex___real-_LPAR_in-Private-Field-Values_RPAR_": {"display": "real", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Structure Declarations", "Structure Constructors", "Private Field Values"]}}, "address": "/The-Type-System/Inductive-Types/"}], "Complex.imaginary (in Private Field Values)": [{"id": "Complex___imaginary-_LPAR_in-Private-Field-Values_RPAR_", "data": {"/The-Type-System/Inductive-Types/#Complex___imaginary-_LPAR_in-Private-Field-Values_RPAR_": {"display": "imaginary", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Structure Declarations", "Structure Constructors", "Private Field Values"]}}, "address": "/The-Type-System/Inductive-Types/"}], "Complex (in Private Field Values)": [{"id": "Complex-_LPAR_in-Private-Field-Values_RPAR_", "data": {"/The-Type-System/Inductive-Types/#Complex-_LPAR_in-Private-Field-Values_RPAR_": {"display": "Complex", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Structure Declarations", "Structure Constructors", "Private Field Values"]}}, "address": "/The-Type-System/Inductive-Types/"}], "Colors.hasYellow (in Postfix Ascription vs show)": [{"id": "Colors___hasYellow-_LPAR_in-Postfix-Ascription-vs--show_RPAR_", "data": {"/Terms/Type-Ascription/#Colors___hasYellow-_LPAR_in-Postfix-Ascription-vs--show_RPAR_": {"display": "Colors.hasYellow", "context": ["The Lean Language Reference", "Terms", "Type Ascription", "Postfix Ascription vs show"]}}, "address": "/Terms/Type-Ascription/"}], "Colors (in Postfix Ascription vs show)": [{"id": "Colors-_LPAR_in-Postfix-Ascription-vs--show_RPAR_", "data": {"/Terms/Type-Ascription/#Colors-_LPAR_in-Postfix-Ascription-vs--show_RPAR_": {"display": "Colors", "context": ["The Lean Language Reference", "Terms", "Type Ascription", "Postfix Ascription vs show"]}}, "address": "/Terms/Type-Ascription/"}], "ColdDrink.water (in Current Namespace)": [{"id": "ColdDrink___water-_LPAR_in-Current-Namespace_RPAR_", "data": {"/Namespaces-and-Sections/#ColdDrink___water-_LPAR_in-Current-Namespace_RPAR_": {"display": "water", "context": ["The Lean Language Reference", "Namespaces and Sections", "Namespaces", "Namespaces and Section Scopes", "Current Namespace"]}}, "address": "/Namespaces-and-Sections/"}], "ColdDrink.toString (in Current Namespace)": [{"id": "ColdDrink___toString-_LPAR_in-Current-Namespace_RPAR_", "data": {"/Namespaces-and-Sections/#ColdDrink___toString-_LPAR_in-Current-Namespace_RPAR_": {"display": "_root_.ColdDrink.toString", "context": ["The Lean Language Reference", "Namespaces and Sections", "Namespaces", "Namespaces and Section Scopes", "Current Namespace"]}}, "address": "/Namespaces-and-Sections/"}], "ColdDrink.juice (in Current Namespace)": [{"id": "ColdDrink___juice-_LPAR_in-Current-Namespace_RPAR_", "data": {"/Namespaces-and-Sections/#ColdDrink___juice-_LPAR_in-Current-Namespace_RPAR_": {"display": "juice", "context": ["The Lean Language Reference", "Namespaces and Sections", "Namespaces", "Namespaces and Section Scopes", "Current Namespace"]}}, "address": "/Namespaces-and-Sections/"}], "ColdDrink (in Current Namespace)": [{"id": "ColdDrink-_LPAR_in-Current-Namespace_RPAR_", "data": {"/Namespaces-and-Sections/#ColdDrink-_LPAR_in-Current-Namespace_RPAR_": {"display": "ColdDrink", "context": ["The Lean Language Reference", "Namespaces and Sections", "Namespaces", "Namespaces and Section Scopes", "Current Namespace"]}}, "address": "/Namespaces-and-Sections/"}], "Codec.type (in Universe level expressions)": [{"id": "Codec___type-_LPAR_in-Universe-level-expressions_RPAR_", "data": {"/The-Type-System/Universes/#Codec___type-_LPAR_in-Universe-level-expressions_RPAR_": {"display": "type", "context": ["The Lean Language Reference", "The Type System", "Universes", "Polymorphism", "Universe level expressions"]}}, "address": "/The-Type-System/Universes/"}], "Codec.encode (in Universe level expressions)": [{"id": "Codec___encode-_LPAR_in-Universe-level-expressions_RPAR_", "data": {"/The-Type-System/Universes/#Codec___encode-_LPAR_in-Universe-level-expressions_RPAR_": {"display": "encode", "context": ["The Lean Language Reference", "The Type System", "Universes", "Polymorphism", "Universe level expressions"]}}, "address": "/The-Type-System/Universes/"}], "Codec.decode (in Universe level expressions)": [{"id": "Codec___decode-_LPAR_in-Universe-level-expressions_RPAR_", "data": {"/The-Type-System/Universes/#Codec___decode-_LPAR_in-Universe-level-expressions_RPAR_": {"display": "decode", "context": ["The Lean Language Reference", "The Type System", "Universes", "Polymorphism", "Universe level expressions"]}}, "address": "/The-Type-System/Universes/"}], "Codec.char (in Universe level expressions)": [{"id": "Codec___char-_LPAR_in-Universe-level-expressions_RPAR_", "data": {"/The-Type-System/Universes/#Codec___char-_LPAR_in-Universe-level-expressions_RPAR_": {"display": "Codec.char", "context": ["The Lean Language Reference", "The Type System", "Universes", "Polymorphism", "Universe level expressions"]}}, "address": "/The-Type-System/Universes/"}], "Clause (in Reducibility and Instance Synthesis)": [{"id": "Clause-_LPAR_in-Reducibility-and-Instance-Synthesis_RPAR_", "data": {"/Definitions/Recursive-Definitions/#Clause-_LPAR_in-Reducibility-and-Instance-Synthesis_RPAR_": {"display": "Clause", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Controlling Reduction", "Reducibility and Instance Synthesis"]}}, "address": "/Definitions/Recursive-Definitions/"}], "Children (in Invalid Nested Inductive Types)": [{"id": "Children-_LPAR_in-Invalid-Nested-Inductive-Types_RPAR_", "data": {"/The-Type-System/Inductive-Types/#Children-_LPAR_in-Invalid-Nested-Inductive-Types_RPAR_": {"display": "Children", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Mutual Inductive Types", "Nested Inductive Types", "Invalid Nested Inductive Types"]}}, "address": "/The-Type-System/Inductive-Types/"}], "CanRepr.mk (in Universes, constructors, and parameters)": [{"id": "CanRepr___mk-_LPAR_in-Universes___-constructors___-and-parameters_RPAR_", "data": {"/The-Type-System/Inductive-Types/#CanRepr___mk-_LPAR_in-Universes___-constructors___-and-parameters_RPAR_": {"display": "mk", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Logical Model", "Well-Formedness Requirements", "Universe Levels", "Universes, constructors, and parameters"]}}, "address": "/The-Type-System/Inductive-Types/"}], "CanRepr (in Universes, constructors, and parameters)": [{"id": "CanRepr-_LPAR_in-Universes___-constructors___-and-parameters_RPAR_", "data": {"/The-Type-System/Inductive-Types/#CanRepr-_LPAR_in-Universes___-constructors___-and-parameters_RPAR_": {"display": "CanRepr", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Logical Model", "Well-Formedness Requirements", "Universe Levels", "Universes, constructors, and parameters"]}}, "address": "/The-Type-System/Inductive-Types/"}], "C2.Semigroup.op_assoc (in Class vs Structure Constructors)": [{"id": "C2___Semigroup___op_assoc-_LPAR_in-Class-vs-Structure-Constructors_RPAR_", "data": {"/Type-Classes/Class-Declarations/#C2___Semigroup___op_assoc-_LPAR_in-Class-vs-Structure-Constructors_RPAR_": {"display": "op_assoc", "context": ["The Lean Language Reference", "Type Classes", "Class Declarations", "Class vs Structure Constructors"]}}, "address": "/Type-Classes/Class-Declarations/"}], "C2.Semigroup (in Class vs Structure Constructors)": [{"id": "C2___Semigroup-_LPAR_in-Class-vs-Structure-Constructors_RPAR_", "data": {"/Type-Classes/Class-Declarations/#C2___Semigroup-_LPAR_in-Class-vs-Structure-Constructors_RPAR_": {"display": "Semigroup", "context": ["The Lean Language Reference", "Type Classes", "Class Declarations", "Class vs Structure Constructors"]}}, "address": "/Type-Classes/Class-Declarations/"}], "C2.Monoid.ident_right (in Class vs Structure Constructors)": [{"id": "C2___Monoid___ident_right-_LPAR_in-Class-vs-Structure-Constructors_RPAR_", "data": {"/Type-Classes/Class-Declarations/#C2___Monoid___ident_right-_LPAR_in-Class-vs-Structure-Constructors_RPAR_": {"display": "ident_right", "context": ["The Lean Language Reference", "Type Classes", "Class Declarations", "Class vs Structure Constructors"]}}, "address": "/Type-Classes/Class-Declarations/"}], "C2.Monoid.ident_left (in Class vs Structure Constructors)": [{"id": "C2___Monoid___ident_left-_LPAR_in-Class-vs-Structure-Constructors_RPAR_", "data": {"/Type-Classes/Class-Declarations/#C2___Monoid___ident_left-_LPAR_in-Class-vs-Structure-Constructors_RPAR_": {"display": "ident_left", "context": ["The Lean Language Reference", "Type Classes", "Class Declarations", "Class vs Structure Constructors"]}}, "address": "/Type-Classes/Class-Declarations/"}], "C2.Monoid.ident (in Class vs Structure Constructors)": [{"id": "C2___Monoid___ident-_LPAR_in-Class-vs-Structure-Constructors_RPAR_", "data": {"/Type-Classes/Class-Declarations/#C2___Monoid___ident-_LPAR_in-Class-vs-Structure-Constructors_RPAR_": {"display": "ident", "context": ["The Lean Language Reference", "Type Classes", "Class Declarations", "Class vs Structure Constructors"]}}, "address": "/Type-Classes/Class-Declarations/"}], "C2.Monoid (in Class vs Structure Constructors)": [{"id": "C2___Monoid-_LPAR_in-Class-vs-Structure-Constructors_RPAR_", "data": {"/Type-Classes/Class-Declarations/#C2___Monoid-_LPAR_in-Class-vs-Structure-Constructors_RPAR_": {"display": "Monoid", "context": ["The Lean Language Reference", "Type Classes", "Class Declarations", "Class vs Structure Constructors"]}}, "address": "/Type-Classes/Class-Declarations/"}], "C2.Magma.op (in Class vs Structure Constructors)": [{"id": "C2___Magma___op-_LPAR_in-Class-vs-Structure-Constructors_RPAR_", "data": {"/Type-Classes/Class-Declarations/#C2___Magma___op-_LPAR_in-Class-vs-Structure-Constructors_RPAR_": {"display": "op", "context": ["The Lean Language Reference", "Type Classes", "Class Declarations", "Class vs Structure Constructors"]}}, "address": "/Type-Classes/Class-Declarations/"}], "C2.Magma (in Class vs Structure Constructors)": [{"id": "C2___Magma-_LPAR_in-Class-vs-Structure-Constructors_RPAR_", "data": {"/Type-Classes/Class-Declarations/#C2___Magma-_LPAR_in-Class-vs-Structure-Constructors_RPAR_": {"display": "Magma", "context": ["The Lean Language Reference", "Type Classes", "Class Declarations", "Class vs Structure Constructors"]}}, "address": "/Type-Classes/Class-Declarations/"}], "C1.Monoid.ident_right (in Class vs Structure Constructors)": [{"id": "C1___Monoid___ident_right-_LPAR_in-Class-vs-Structure-Constructors_RPAR_", "data": {"/Type-Classes/Class-Declarations/#C1___Monoid___ident_right-_LPAR_in-Class-vs-Structure-Constructors_RPAR_": {"display": "ident_right", "context": ["The Lean Language Reference", "Type Classes", "Class Declarations", "Class vs Structure Constructors"]}}, "address": "/Type-Classes/Class-Declarations/"}], "C1.Monoid.ident_left (in Class vs Structure Constructors)": [{"id": "C1___Monoid___ident_left-_LPAR_in-Class-vs-Structure-Constructors_RPAR_", "data": {"/Type-Classes/Class-Declarations/#C1___Monoid___ident_left-_LPAR_in-Class-vs-Structure-Constructors_RPAR_": {"display": "ident_left", "context": ["The Lean Language Reference", "Type Classes", "Class Declarations", "Class vs Structure Constructors"]}}, "address": "/Type-Classes/Class-Declarations/"}], "C1.Monoid.ident (in Class vs Structure Constructors)": [{"id": "C1___Monoid___ident-_LPAR_in-Class-vs-Structure-Constructors_RPAR_", "data": {"/Type-Classes/Class-Declarations/#C1___Monoid___ident-_LPAR_in-Class-vs-Structure-Constructors_RPAR_": {"display": "ident", "context": ["The Lean Language Reference", "Type Classes", "Class Declarations", "Class vs Structure Constructors"]}}, "address": "/Type-Classes/Class-Declarations/"}], "C1.Monoid (in Class vs Structure Constructors)": [{"id": "C1___Monoid-_LPAR_in-Class-vs-Structure-Constructors_RPAR_", "data": {"/Type-Classes/Class-Declarations/#C1___Monoid-_LPAR_in-Class-vs-Structure-Constructors_RPAR_": {"display": "Monoid", "context": ["The Lean Language Reference", "Type Classes", "Class Declarations", "Class vs Structure Constructors"]}}, "address": "/Type-Classes/Class-Declarations/"}], "C.x (in Disambiguation via Typing)": [{"id": "C___x-_LPAR_in-Disambiguation-via-Typing_RPAR_", "data": {"/Terms/Identifiers/#C___x-_LPAR_in-Disambiguation-via-Typing_RPAR_": {"display": "C.x", "context": ["The Lean Language Reference", "Terms", "Identifiers", "Disambiguation via Typing"]}}, "address": "/Terms/Identifiers/"}], "C.a6 (in Opening Nested Namespaces)": [{"id": "C___a6-_LPAR_in-Opening-Nested-Namespaces_RPAR_", "data": {"/Namespaces-and-Sections/#C___a6-_LPAR_in-Opening-Nested-Namespaces_RPAR_": {"display": "a6", "context": ["The Lean Language Reference", "Namespaces and Sections", "Namespaces", "Namespaces and Section Scopes", "Opening Nested Namespaces"]}}, "address": "/Namespaces-and-Sections/"}], "Book.title (in Structure type inheritance with overlapping fields)": [{"id": "Book___title-_LPAR_in-Structure-type-inheritance-with-overlapping-fields_RPAR_", "data": {"/The-Type-System/Inductive-Types/#Book___title-_LPAR_in-Structure-type-inheritance-with-overlapping-fields_RPAR_": {"display": "title", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Structure Declarations", "Structure Inheritance", "Structure type inheritance with overlapping fields"]}}, "address": "/The-Type-System/Inductive-Types/"}], "Book.author (in Structure type inheritance with overlapping fields)": [{"id": "Book___author-_LPAR_in-Structure-type-inheritance-with-overlapping-fields_RPAR_", "data": {"/The-Type-System/Inductive-Types/#Book___author-_LPAR_in-Structure-type-inheritance-with-overlapping-fields_RPAR_": {"display": "author", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Structure Declarations", "Structure Inheritance", "Structure type inheritance with overlapping fields"]}}, "address": "/The-Type-System/Inductive-Types/"}], "Book (in Structure type inheritance with overlapping fields)": [{"id": "Book-_LPAR_in-Structure-type-inheritance-with-overlapping-fields_RPAR_", "data": {"/The-Type-System/Inductive-Types/#Book-_LPAR_in-Structure-type-inheritance-with-overlapping-fields_RPAR_": {"display": "Book", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Structure Declarations", "Structure Inheritance", "Structure type inheritance with overlapping fields"]}}, "address": "/The-Type-System/Inductive-Types/"}], "Binding (in Mutual strict positivity)": [{"id": "Binding-_LPAR_in-Mutual-strict-positivity_RPAR_", "data": {"/The-Type-System/Inductive-Types/#Binding-_LPAR_in-Mutual-strict-positivity_RPAR_": {"display": "Binding", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Mutual Inductive Types", "Requirements", "Positivity", "Mutual strict positivity"]}}, "address": "/The-Type-System/Inductive-Types/"}], "Bin.zero (in Coercions and OfNat)": [{"id": "Bin___zero-_LPAR_in-Coercions-and--OfNat_RPAR_", "data": {"/Coercions/#Bin___zero-_LPAR_in-Coercions-and--OfNat_RPAR_": {"display": "zero", "context": ["The Lean Language Reference", "Coercions", "Coercions and OfNat"]}}, "address": "/Coercions/"}], "Bin.toString (in Coercions and OfNat)": [{"id": "Bin___toString-_LPAR_in-Coercions-and--OfNat_RPAR_", "data": {"/Coercions/#Bin___toString-_LPAR_in-Coercions-and--OfNat_RPAR_": {"display": "Bin.toString", "context": ["The Lean Language Reference", "Coercions", "Coercions and OfNat"]}}, "address": "/Coercions/"}], "Bin.succ (in Coercions and OfNat)": [{"id": "Bin___succ-_LPAR_in-Coercions-and--OfNat_RPAR_", "data": {"/Coercions/#Bin___succ-_LPAR_in-Coercions-and--OfNat_RPAR_": {"display": "Bin.succ", "context": ["The Lean Language Reference", "Coercions", "Coercions and OfNat"]}}, "address": "/Coercions/"}], "Bin.one (in Coercions and OfNat)": [{"id": "Bin___one-_LPAR_in-Coercions-and--OfNat_RPAR_", "data": {"/Coercions/#Bin___one-_LPAR_in-Coercions-and--OfNat_RPAR_": {"display": "one", "context": ["The Lean Language Reference", "Coercions", "Coercions and OfNat"]}}, "address": "/Coercions/"}], "Bin.ofNat (in Coercions and OfNat)": [{"id": "Bin___ofNat-_LPAR_in-Coercions-and--OfNat_RPAR_", "data": {"/Coercions/#Bin___ofNat-_LPAR_in-Coercions-and--OfNat_RPAR_": {"display": "Bin.ofNat", "context": ["The Lean Language Reference", "Coercions", "Coercions and OfNat"]}}, "address": "/Coercions/"}], "Bin.done (in Coercions and OfNat)": [{"id": "Bin___done-_LPAR_in-Coercions-and--OfNat_RPAR_", "data": {"/Coercions/#Bin___done-_LPAR_in-Coercions-and--OfNat_RPAR_": {"display": "done", "context": ["The Lean Language Reference", "Coercions", "Coercions and OfNat"]}}, "address": "/Coercions/"}], "Bin (in Coercions and OfNat)": [{"id": "Bin-_LPAR_in-Coercions-and--OfNat_RPAR_", "data": {"/Coercions/#Bin-_LPAR_in-Coercions-and--OfNat_RPAR_": {"display": "Bin", "context": ["The Lean Language Reference", "Coercions", "Coercions and OfNat"]}}, "address": "/Coercions/"}], "Bicycle (in #print and Structure Types)": [{"id": "Bicycle-_LPAR_in-___print--and-Structure-Types_RPAR_", "data": {"/The-Type-System/Inductive-Types/#Bicycle-_LPAR_in-___print--and-Structure-Types_RPAR_": {"display": "Bicycle", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Structure Declarations", "Structure Inheritance", "#print and Structure Types"]}}, "address": "/The-Type-System/Inductive-Types/"}], "BalancedTree.rbranch (in Type Refinement)": [{"id": "BalancedTree___rbranch-_LPAR_in-Type-Refinement_RPAR_", "data": {"/Terms/Pattern-Matching/#BalancedTree___rbranch-_LPAR_in-Type-Refinement_RPAR_": {"display": "rbranch", "context": ["The Lean Language Reference", "Terms", "Pattern Matching", "Types", "Type Refinement"]}}, "address": "/Terms/Pattern-Matching/"}], "BalancedTree.lbranch (in Type Refinement)": [{"id": "BalancedTree___lbranch-_LPAR_in-Type-Refinement_RPAR_", "data": {"/Terms/Pattern-Matching/#BalancedTree___lbranch-_LPAR_in-Type-Refinement_RPAR_": {"display": "lbranch", "context": ["The Lean Language Reference", "Terms", "Pattern Matching", "Types", "Type Refinement"]}}, "address": "/Terms/Pattern-Matching/"}], "BalancedTree.isPerfectlyBalanced (in Type Refinement)": [{"id": "BalancedTree___isPerfectlyBalanced-_LPAR_in-Type-Refinement_RPAR_", "data": {"/Terms/Pattern-Matching/#BalancedTree___isPerfectlyBalanced-_LPAR_in-Type-Refinement_RPAR_": {"display": "BalancedTree.isPerfectlyBalanced", "context": ["The Lean Language Reference", "Terms", "Pattern Matching", "Types", "Type Refinement"]}}, "address": "/Terms/Pattern-Matching/"}], "BalancedTree.filledWith (in Type Refinement)": [{"id": "BalancedTree___filledWith-_LPAR_in-Type-Refinement_RPAR_-next", "data": {"/Terms/Pattern-Matching/#BalancedTree___filledWith-_LPAR_in-Type-Refinement_RPAR_-next": {"display": "BalancedTree.filledWith", "context": ["The Lean Language Reference", "Terms", "Pattern Matching", "Types", "Type Refinement"]}, "/Terms/Pattern-Matching/#BalancedTree___filledWith-_LPAR_in-Type-Refinement_RPAR_": {"display": "BalancedTree.filledWith", "context": ["The Lean Language Reference", "Terms", "Pattern Matching", "Types", "Type Refinement"]}}, "address": "/Terms/Pattern-Matching/"}, {"id": "BalancedTree___filledWith-_LPAR_in-Type-Refinement_RPAR_", "data": {"/Terms/Pattern-Matching/#BalancedTree___filledWith-_LPAR_in-Type-Refinement_RPAR_-next": {"display": "BalancedTree.filledWith", "context": ["The Lean Language Reference", "Terms", "Pattern Matching", "Types", "Type Refinement"]}, "/Terms/Pattern-Matching/#BalancedTree___filledWith-_LPAR_in-Type-Refinement_RPAR_": {"display": "BalancedTree.filledWith", "context": ["The Lean Language Reference", "Terms", "Pattern Matching", "Types", "Type Refinement"]}}, "address": "/Terms/Pattern-Matching/"}], "BalancedTree.empty (in Type Refinement)": [{"id": "BalancedTree___empty-_LPAR_in-Type-Refinement_RPAR_", "data": {"/Terms/Pattern-Matching/#BalancedTree___empty-_LPAR_in-Type-Refinement_RPAR_": {"display": "empty", "context": ["The Lean Language Reference", "Terms", "Pattern Matching", "Types", "Type Refinement"]}}, "address": "/Terms/Pattern-Matching/"}], "BalancedTree.branch (in Type Refinement)": [{"id": "BalancedTree___branch-_LPAR_in-Type-Refinement_RPAR_", "data": {"/Terms/Pattern-Matching/#BalancedTree___branch-_LPAR_in-Type-Refinement_RPAR_": {"display": "branch", "context": ["The Lean Language Reference", "Terms", "Pattern Matching", "Types", "Type Refinement"]}}, "address": "/Terms/Pattern-Matching/"}], "BalancedTree (in Type Refinement)": [{"id": "BalancedTree-_LPAR_in-Type-Refinement_RPAR_", "data": {"/Terms/Pattern-Matching/#BalancedTree-_LPAR_in-Type-Refinement_RPAR_": {"display": "BalancedTree", "context": ["The Lean Language Reference", "Terms", "Pattern Matching", "Types", "Type Refinement"]}}, "address": "/Terms/Pattern-Matching/"}], "Bad (in Non-strictly-positive inductive types)": [{"id": "Bad-_LPAR_in-Non-strictly-positive-inductive-types_RPAR_", "data": {"/The-Type-System/Inductive-Types/#Bad-_LPAR_in-Non-strictly-positive-inductive-types_RPAR_-next": {"display": "Bad", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Logical Model", "Well-Formedness Requirements", "Strict Positivity", "Non-strictly-positive inductive types"]}, "/The-Type-System/Inductive-Types/#Bad-_LPAR_in-Non-strictly-positive-inductive-types_RPAR_": {"display": "Bad", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Logical Model", "Well-Formedness Requirements", "Strict Positivity", "Non-strictly-positive inductive types"]}}, "address": "/The-Type-System/Inductive-Types/"}, {"id": "Bad-_LPAR_in-Non-strictly-positive-inductive-types_RPAR_-next", "data": {"/The-Type-System/Inductive-Types/#Bad-_LPAR_in-Non-strictly-positive-inductive-types_RPAR_-next": {"display": "Bad", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Logical Model", "Well-Formedness Requirements", "Strict Positivity", "Non-strictly-positive inductive types"]}, "/The-Type-System/Inductive-Types/#Bad-_LPAR_in-Non-strictly-positive-inductive-types_RPAR_": {"display": "Bad", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Logical Model", "Well-Formedness Requirements", "Strict Positivity", "Non-strictly-positive inductive types"]}}, "address": "/The-Type-System/Inductive-Types/"}], "BRTree (in Invalid Nested Inductive Types)": [{"id": "BRTree-_LPAR_in-Invalid-Nested-Inductive-Types_RPAR_", "data": {"/The-Type-System/Inductive-Types/#BRTree-_LPAR_in-Invalid-Nested-Inductive-Types_RPAR_": {"display": "BRTree", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Mutual Inductive Types", "Nested Inductive Types", "Invalid Nested Inductive Types"]}}, "address": "/The-Type-System/Inductive-Types/"}], "B.y (in Longer Identifier Prefixes Take Precedence)": [{"id": "B___y-_LPAR_in-Longer-Identifier-Prefixes-Take-Precedence_RPAR_", "data": {"/Terms/Identifiers/#B___y-_LPAR_in-Longer-Identifier-Prefixes-Take-Precedence_RPAR_": {"display": "y", "context": ["The Lean Language Reference", "Terms", "Identifiers", "Longer Identifier Prefixes Take Precedence"]}}, "address": "/Terms/Identifiers/"}], "B.x (in Current Namespace Contents Take Precedence Over Opened Namespaces)": [{"id": "B___x-_LPAR_in-Current-Namespace-Contents-Take-Precedence-Over-Opened-Namespaces_RPAR_", "data": {"/Terms/Identifiers/#B___x-_LPAR_in-Current-Namespace-Contents-Take-Precedence-Over-Opened-Namespaces_RPAR_": {"display": "x", "context": ["The Lean Language Reference", "Terms", "Identifiers", "Current Namespace Contents Take Precedence Over Opened Namespaces"]}}, "address": "/Terms/Identifiers/"}], "B.x (in Ambiguous Identifiers)": [{"id": "B___x-_LPAR_in-Ambiguous-Identifiers_RPAR_", "data": {"/Terms/Identifiers/#B___x-_LPAR_in-Ambiguous-Identifiers_RPAR_": {"display": "B.x", "context": ["The Lean Language Reference", "Terms", "Identifiers", "Ambiguous Identifiers"]}}, "address": "/Terms/Identifiers/"}], "B.a4 (in Opening Nested Namespaces)": [{"id": "B___a4-_LPAR_in-Opening-Nested-Namespaces_RPAR_", "data": {"/Namespaces-and-Sections/#B___a4-_LPAR_in-Opening-Nested-Namespaces_RPAR_": {"display": "a4", "context": ["The Lean Language Reference", "Namespaces and Sections", "Namespaces", "Namespaces and Section Scopes", "Opening Nested Namespaces"]}}, "address": "/Namespaces-and-Sections/"}], "B.C.a5 (in Opening Nested Namespaces)": [{"id": "B___C___a5-_LPAR_in-Opening-Nested-Namespaces_RPAR_", "data": {"/Namespaces-and-Sections/#B___C___a5-_LPAR_in-Opening-Nested-Namespaces_RPAR_": {"display": "a5", "context": ["The Lean Language Reference", "Namespaces and Sections", "Namespaces", "Namespaces and Section Scopes", "Opening Nested Namespaces"]}}, "address": "/Namespaces-and-Sections/"}], "B (in Longer Identifier Prefixes Take Precedence)": [{"id": "B-_LPAR_in-Longer-Identifier-Prefixes-Take-Precedence_RPAR_", "data": {"/Terms/Identifiers/#B-_LPAR_in-Longer-Identifier-Prefixes-Take-Precedence_RPAR_": {"display": "B", "context": ["The Lean Language Reference", "Terms", "Identifiers", "Longer Identifier Prefixes Take Precedence"]}}, "address": "/Terms/Identifiers/"}], "B (in Injectivity Patterns)": [{"id": "B-_LPAR_in-Injectivity-Patterns_RPAR_", "data": {"/The--grind--tactic/E___matching/#B-_LPAR_in-Injectivity-Patterns_RPAR_": {"display": "B", "context": ["The Lean Language Reference", "The grind tactic", "E‑matching", "Patterns", "Injectivity Patterns"]}}, "address": "/The--grind--tactic/E___matching/"}], "B (in Deriving Multiple Classes)": [{"id": "B-_LPAR_in-Deriving-Multiple-Classes_RPAR_", "data": {"/Type-Classes/Deriving-Instances/#B-_LPAR_in-Deriving-Multiple-Classes_RPAR_": {"display": "B", "context": ["The Lean Language Reference", "Type Classes", "Deriving Instances", "Deriving Multiple Classes"]}}, "address": "/Type-Classes/Deriving-Instances/"}], "AugmentedIntList.list (in Patterns and default values)": [{"id": "AugmentedIntList___list-_LPAR_in-Patterns-and-default-values_RPAR_", "data": {"/The-Type-System/Inductive-Types/#AugmentedIntList___list-_LPAR_in-Patterns-and-default-values_RPAR_": {"display": "list", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Structure Declarations", "Structure Constructors", "Patterns and default values"]}}, "address": "/The-Type-System/Inductive-Types/"}], "AugmentedIntList.isEmpty (in Patterns and default values)": [{"id": "AugmentedIntList___isEmpty-_LPAR_in-Patterns-and-default-values_RPAR_", "data": {"/The-Type-System/Inductive-Types/#AugmentedIntList___isEmpty-_LPAR_in-Patterns-and-default-values_RPAR_": {"display": "AugmentedIntList.isEmpty", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Structure Declarations", "Structure Constructors", "Patterns and default values"]}}, "address": "/The-Type-System/Inductive-Types/"}], "AugmentedIntList.augmentation (in Patterns and default values)": [{"id": "AugmentedIntList___augmentation-_LPAR_in-Patterns-and-default-values_RPAR_", "data": {"/The-Type-System/Inductive-Types/#AugmentedIntList___augmentation-_LPAR_in-Patterns-and-default-values_RPAR_": {"display": "augmentation", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Structure Declarations", "Structure Constructors", "Patterns and default values"]}}, "address": "/The-Type-System/Inductive-Types/"}], "AugmentedIntList (in Patterns and default values)": [{"id": "AugmentedIntList-_LPAR_in-Patterns-and-default-values_RPAR_", "data": {"/The-Type-System/Inductive-Types/#AugmentedIntList-_LPAR_in-Patterns-and-default-values_RPAR_": {"display": "AugmentedIntList", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Structure Declarations", "Structure Constructors", "Patterns and default values"]}}, "address": "/The-Type-System/Inductive-Types/"}], "AugmentedIntArray.augmentation (in Updating arrays)": [{"id": "AugmentedIntArray___augmentation-_LPAR_in-Updating-arrays_RPAR_", "data": {"/The-Type-System/Inductive-Types/#AugmentedIntArray___augmentation-_LPAR_in-Updating-arrays_RPAR_": {"display": "augmentation", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Structure Declarations", "Structure Constructors", "Updating arrays"]}}, "address": "/The-Type-System/Inductive-Types/"}], "AugmentedIntArray.array (in Updating arrays)": [{"id": "AugmentedIntArray___array-_LPAR_in-Updating-arrays_RPAR_", "data": {"/The-Type-System/Inductive-Types/#AugmentedIntArray___array-_LPAR_in-Updating-arrays_RPAR_": {"display": "array", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Structure Declarations", "Structure Constructors", "Updating arrays"]}}, "address": "/The-Type-System/Inductive-Types/"}], "AugmentedIntArray (in Updating arrays)": [{"id": "AugmentedIntArray-_LPAR_in-Updating-arrays_RPAR_", "data": {"/The-Type-System/Inductive-Types/#AugmentedIntArray-_LPAR_in-Updating-arrays_RPAR_": {"display": "AugmentedIntArray", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Structure Declarations", "Structure Constructors", "Updating arrays"]}}, "address": "/The-Type-System/Inductive-Types/"}], "AtLeastOne.mk (in Anonymous constructors)": [{"id": "AtLeastOne___mk-_LPAR_in-Anonymous-constructors_RPAR_", "data": {"/The-Type-System/Inductive-Types/#AtLeastOne___mk-_LPAR_in-Anonymous-constructors_RPAR_": {"display": "mk", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Inductive Type Declarations", "Anonymous Constructor Syntax", "Anonymous constructors"]}}, "address": "/The-Type-System/Inductive-Types/"}], "AtLeastOne.head' (in Anonymous constructors)": [{"id": "AtLeastOne___head___-_LPAR_in-Anonymous-constructors_RPAR_", "data": {"/The-Type-System/Inductive-Types/#AtLeastOne___head___-_LPAR_in-Anonymous-constructors_RPAR_": {"display": "AtLeastOne.head'", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Inductive Type Declarations", "Anonymous Constructor Syntax", "Anonymous constructors"]}}, "address": "/The-Type-System/Inductive-Types/"}], "AtLeastOne.head (in Anonymous constructors)": [{"id": "AtLeastOne___head-_LPAR_in-Anonymous-constructors_RPAR_", "data": {"/The-Type-System/Inductive-Types/#AtLeastOne___head-_LPAR_in-Anonymous-constructors_RPAR_": {"display": "AtLeastOne.head", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Inductive Type Declarations", "Anonymous Constructor Syntax", "Anonymous constructors"]}}, "address": "/The-Type-System/Inductive-Types/"}], "AtLeastOne (in Anonymous constructors)": [{"id": "AtLeastOne-_LPAR_in-Anonymous-constructors_RPAR_", "data": {"/The-Type-System/Inductive-Types/#AtLeastOne-_LPAR_in-Anonymous-constructors_RPAR_": {"display": "AtLeastOne", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Inductive Type Declarations", "Anonymous Constructor Syntax", "Anonymous constructors"]}}, "address": "/The-Type-System/Inductive-Types/"}], "AtLeast.val_gt_i (in Iterated Automatic Implicit Parameters)": [{"id": "AtLeast___val_gt_i-_LPAR_in-Iterated-Automatic-Implicit-Parameters_RPAR_", "data": {"/Definitions/Headers-and-Signatures/#AtLeast___val_gt_i-_LPAR_in-Iterated-Automatic-Implicit-Parameters_RPAR_": {"display": "val_gt_i", "context": ["The Lean Language Reference", "Definitions", "Headers and Signatures", "Automatic Implicit Parameters", "Iterated Automatic Implicit Parameters"]}}, "address": "/Definitions/Headers-and-Signatures/"}], "AtLeast.val (in Iterated Automatic Implicit Parameters)": [{"id": "AtLeast___val-_LPAR_in-Iterated-Automatic-Implicit-Parameters_RPAR_", "data": {"/Definitions/Headers-and-Signatures/#AtLeast___val-_LPAR_in-Iterated-Automatic-Implicit-Parameters_RPAR_": {"display": "val", "context": ["The Lean Language Reference", "Definitions", "Headers and Signatures", "Automatic Implicit Parameters", "Iterated Automatic Implicit Parameters"]}}, "address": "/Definitions/Headers-and-Signatures/"}], "AtLeast.add (in Iterated Automatic Implicit Parameters)": [{"id": "AtLeast___add-_LPAR_in-Iterated-Automatic-Implicit-Parameters_RPAR_", "data": {"/Definitions/Headers-and-Signatures/#AtLeast___add-_LPAR_in-Iterated-Automatic-Implicit-Parameters_RPAR_": {"display": "AtLeast.add", "context": ["The Lean Language Reference", "Definitions", "Headers and Signatures", "Automatic Implicit Parameters", "Iterated Automatic Implicit Parameters"]}}, "address": "/Definitions/Headers-and-Signatures/"}], "AtLeast (in Iterated Automatic Implicit Parameters)": [{"id": "AtLeast-_LPAR_in-Iterated-Automatic-Implicit-Parameters_RPAR_", "data": {"/Definitions/Headers-and-Signatures/#AtLeast-_LPAR_in-Iterated-Automatic-Implicit-Parameters_RPAR_": {"display": "AtLeast", "context": ["The Lean Language Reference", "Definitions", "Headers and Signatures", "Automatic Implicit Parameters", "Iterated Automatic Implicit Parameters"]}}, "address": "/Definitions/Headers-and-Signatures/"}], "Assertion": [{"id": "Assertion", "data": {"/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/#Assertion": {"display": "Assertion", "context": ["The Lean Language Reference", "The mvcgen tactic", "Tutorial: Verifying Imperative Programs Using mvcgen", "Proof Mode for Stateful Goals"]}}, "address": "/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/"}], "ArraySized.size_eq_length (in Dependent projection types)": [{"id": "ArraySized___size_eq_length-_LPAR_in-Dependent-projection-types_RPAR_", "data": {"/The-Type-System/Inductive-Types/#ArraySized___size_eq_length-_LPAR_in-Dependent-projection-types_RPAR_": {"display": "size_eq_length", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Structure Declarations", "Fields", "Dependent projection types"]}}, "address": "/The-Type-System/Inductive-Types/"}], "ArraySized.array (in Dependent projection types)": [{"id": "ArraySized___array-_LPAR_in-Dependent-projection-types_RPAR_", "data": {"/The-Type-System/Inductive-Types/#ArraySized___array-_LPAR_in-Dependent-projection-types_RPAR_": {"display": "array", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Structure Declarations", "Fields", "Dependent projection types"]}}, "address": "/The-Type-System/Inductive-Types/"}], "ArraySized (in Dependent projection types)": [{"id": "ArraySized-_LPAR_in-Dependent-projection-types_RPAR_", "data": {"/The-Type-System/Inductive-Types/#ArraySized-_LPAR_in-Dependent-projection-types_RPAR_": {"display": "ArraySized", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Structure Declarations", "Fields", "Dependent projection types"]}}, "address": "/The-Type-System/Inductive-Types/"}], "Array.find (in Tail Recursion with Branching)": [{"id": "Array___find-_LPAR_in-Tail-Recursion-with-Branching_RPAR_", "data": {"/Definitions/Recursive-Definitions/#Array___find-_LPAR_in-Tail-Recursion-with-Branching_RPAR_": {"display": "Array.find", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Partial Fixpoint Recursion", "Tail-Recursive Functions", "Tail Recursion with Branching"]}}, "address": "/Definitions/Recursive-Definitions/"}], "App.size (in Mutual Structural Recursion Over Mutual Types)": [{"id": "App___size-_LPAR_in-Mutual-Structural-Recursion-Over-Mutual-Types_RPAR_", "data": {"/Definitions/Recursive-Definitions/#App___size-_LPAR_in-Mutual-Structural-Recursion-Over-Mutual-Types_RPAR_": {"display": "App.size", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Structural Recursion", "Mutual Structural Recursion", "Mutual Structural Recursion Over Mutual Types"]}}, "address": "/Definitions/Recursive-Definitions/"}], "App.numArgs (in Mutual Structural Recursion Over Mutual Types)": [{"id": "App___numArgs-_LPAR_in-Mutual-Structural-Recursion-Over-Mutual-Types_RPAR_", "data": {"/Definitions/Recursive-Definitions/#App___numArgs-_LPAR_in-Mutual-Structural-Recursion-Over-Mutual-Types_RPAR_": {"display": "App.numArgs", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Structural Recursion", "Mutual Structural Recursion", "Mutual Structural Recursion Over Mutual Types"]}}, "address": "/Definitions/Recursive-Definitions/"}], "App.fn (in Mutual Structural Recursion Over Mutual Types)": [{"id": "App___fn-_LPAR_in-Mutual-Structural-Recursion-Over-Mutual-Types_RPAR_", "data": {"/Definitions/Recursive-Definitions/#App___fn-_LPAR_in-Mutual-Structural-Recursion-Over-Mutual-Types_RPAR_": {"display": "fn", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Structural Recursion", "Mutual Structural Recursion", "Mutual Structural Recursion Over Mutual Types"]}}, "address": "/Definitions/Recursive-Definitions/"}], "App.app (in Mutual Structural Recursion Over Mutual Types)": [{"id": "App___app-_LPAR_in-Mutual-Structural-Recursion-Over-Mutual-Types_RPAR_", "data": {"/Definitions/Recursive-Definitions/#App___app-_LPAR_in-Mutual-Structural-Recursion-Over-Mutual-Types_RPAR_": {"display": "app", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Structural Recursion", "Mutual Structural Recursion", "Mutual Structural Recursion Over Mutual Types"]}}, "address": "/Definitions/Recursive-Definitions/"}], "App (in Mutual Structural Recursion Over Mutual Types)": [{"id": "App-_LPAR_in-Mutual-Structural-Recursion-Over-Mutual-Types_RPAR_", "data": {"/Definitions/Recursive-Definitions/#App-_LPAR_in-Mutual-Structural-Recursion-Over-Mutual-Types_RPAR_": {"display": "App", "context": ["The Lean Language Reference", "Definitions", "Recursive Definitions", "Structural Recursion", "Mutual Structural Recursion", "Mutual Structural Recursion Over Mutual Types"]}}, "address": "/Definitions/Recursive-Definitions/"}], "Answer.yes (in Relaxed vs Non-Relaxed Automatic Implicit Parameters)": [{"id": "Answer___yes-_LPAR_in-Relaxed-vs-Non-Relaxed-Automatic-Implicit-Parameters_RPAR_", "data": {"/Definitions/Headers-and-Signatures/#Answer___yes-_LPAR_in-Relaxed-vs-Non-Relaxed-Automatic-Implicit-Parameters_RPAR_": {"display": "yes", "context": ["The Lean Language Reference", "Definitions", "Headers and Signatures", "Automatic Implicit Parameters", "Relaxed vs Non-Relaxed Automatic Implicit Parameters"]}}, "address": "/Definitions/Headers-and-Signatures/"}], "Answer.no (in Relaxed vs Non-Relaxed Automatic Implicit Parameters)": [{"id": "Answer___no-_LPAR_in-Relaxed-vs-Non-Relaxed-Automatic-Implicit-Parameters_RPAR_", "data": {"/Definitions/Headers-and-Signatures/#Answer___no-_LPAR_in-Relaxed-vs-Non-Relaxed-Automatic-Implicit-Parameters_RPAR_": {"display": "no", "context": ["The Lean Language Reference", "Definitions", "Headers and Signatures", "Automatic Implicit Parameters", "Relaxed vs Non-Relaxed Automatic Implicit Parameters"]}}, "address": "/Definitions/Headers-and-Signatures/"}], "Answer.maybe (in Relaxed vs Non-Relaxed Automatic Implicit Parameters)": [{"id": "Answer___maybe-_LPAR_in-Relaxed-vs-Non-Relaxed-Automatic-Implicit-Parameters_RPAR_", "data": {"/Definitions/Headers-and-Signatures/#Answer___maybe-_LPAR_in-Relaxed-vs-Non-Relaxed-Automatic-Implicit-Parameters_RPAR_": {"display": "maybe", "context": ["The Lean Language Reference", "Definitions", "Headers and Signatures", "Automatic Implicit Parameters", "Relaxed vs Non-Relaxed Automatic Implicit Parameters"]}}, "address": "/Definitions/Headers-and-Signatures/"}], "Answer (in Relaxed vs Non-Relaxed Automatic Implicit Parameters)": [{"id": "Answer-_LPAR_in-Relaxed-vs-Non-Relaxed-Automatic-Implicit-Parameters_RPAR_", "data": {"/Definitions/Headers-and-Signatures/#Answer-_LPAR_in-Relaxed-vs-Non-Relaxed-Automatic-Implicit-Parameters_RPAR_": {"display": "Answer", "context": ["The Lean Language Reference", "Definitions", "Headers and Signatures", "Automatic Implicit Parameters", "Relaxed vs Non-Relaxed Automatic Implicit Parameters"]}}, "address": "/Definitions/Headers-and-Signatures/"}], "AlsoUnit (in Definitional Equality of Unit-Like Types)": [{"id": "AlsoUnit-_LPAR_in-Definitional-Equality-of-Unit-Like-Types_RPAR_", "data": {"/Basic-Types/The-Unit-Type/#AlsoUnit-_LPAR_in-Definitional-Equality-of-Unit-Like-Types_RPAR_": {"display": "AlsoUnit", "context": ["The Lean Language Reference", "Basic Types", "The Unit Type", "Definitional Equality", "Definitional Equality of Unit-Like Types"]}}, "address": "/Basic-Types/The-Unit-Type/"}], "AllNonZero (in Non-Dependent Functions Don't Bind Variables)": [{"id": "AllNonZero-_LPAR_in-Non-Dependent-Functions-Don___t-Bind-Variables_RPAR_", "data": {"/The-Type-System/Functions/#AllNonZero-_LPAR_in-Non-Dependent-Functions-Don___t-Bind-Variables_RPAR_-next": {"display": "AllNonZero", "context": ["The Lean Language Reference", "The Type System", "Functions", "Non-Dependent Functions Don't Bind Variables"]}, "/The-Type-System/Functions/#AllNonZero-_LPAR_in-Non-Dependent-Functions-Don___t-Bind-Variables_RPAR_": {"display": "AllNonZero", "context": ["The Lean Language Reference", "The Type System", "Functions", "Non-Dependent Functions Don't Bind Variables"]}}, "address": "/The-Type-System/Functions/"}, {"id": "AllNonZero-_LPAR_in-Non-Dependent-Functions-Don___t-Bind-Variables_RPAR_-next", "data": {"/The-Type-System/Functions/#AllNonZero-_LPAR_in-Non-Dependent-Functions-Don___t-Bind-Variables_RPAR_-next": {"display": "AllNonZero", "context": ["The Lean Language Reference", "The Type System", "Functions", "Non-Dependent Functions Don't Bind Variables"]}, "/The-Type-System/Functions/#AllNonZero-_LPAR_in-Non-Dependent-Functions-Don___t-Bind-Variables_RPAR_": {"display": "AllNonZero", "context": ["The Lean Language Reference", "The Type System", "Functions", "Non-Dependent Functions Don't Bind Variables"]}}, "address": "/The-Type-System/Functions/"}], "AddMul' (in Class Abbreviations)": [{"id": "AddMul___-_LPAR_in-Class-Abbreviations_RPAR_", "data": {"/Type-Classes/Class-Declarations/#AddMul___-_LPAR_in-Class-Abbreviations_RPAR_": {"display": "AddMul'", "context": ["The Lean Language Reference", "Type Classes", "Class Declarations", "Class Abbreviations", "Class Abbreviations"]}}, "address": "/Type-Classes/Class-Declarations/"}], "AddMul (in Class Abbreviations)": [{"id": "AddMul-_LPAR_in-Class-Abbreviations_RPAR_", "data": {"/Type-Classes/Class-Declarations/#AddMul-_LPAR_in-Class-Abbreviations_RPAR_": {"display": "AddMul", "context": ["The Lean Language Reference", "Type Classes", "Class Declarations", "Class Abbreviations", "Class Abbreviations"]}}, "address": "/Type-Classes/Class-Declarations/"}], "AddExpr.reprPrec (in Infix Syntax)": [{"id": "AddExpr___reprPrec-_LPAR_in-Infix-Syntax_RPAR_", "data": {"/Interacting-with-Lean/#AddExpr___reprPrec-_LPAR_in-Infix-Syntax_RPAR_": {"display": "AddExpr.reprPrec", "context": ["The Lean Language Reference", "Interacting with Lean", "Formatted Output", "Repr", "How To Write a Repr Instance", "Infix Syntax"]}}, "address": "/Interacting-with-Lean/"}], "AddExpr.nat (in Infix Syntax)": [{"id": "AddExpr___nat-_LPAR_in-Infix-Syntax_RPAR_", "data": {"/Interacting-with-Lean/#AddExpr___nat-_LPAR_in-Infix-Syntax_RPAR_": {"display": "nat", "context": ["The Lean Language Reference", "Interacting with Lean", "Formatted Output", "Repr", "How To Write a Repr Instance", "Infix Syntax"]}}, "address": "/Interacting-with-Lean/"}], "AddExpr.add (in Infix Syntax)": [{"id": "AddExpr___add-_LPAR_in-Infix-Syntax_RPAR_", "data": {"/Interacting-with-Lean/#AddExpr___add-_LPAR_in-Infix-Syntax_RPAR_": {"display": "add", "context": ["The Lean Language Reference", "Interacting with Lean", "Formatted Output", "Repr", "How To Write a Repr Instance", "Infix Syntax"]}}, "address": "/Interacting-with-Lean/"}], "AddExpr (in Infix Syntax)": [{"id": "AddExpr-_LPAR_in-Infix-Syntax_RPAR_", "data": {"/Interacting-with-Lean/#AddExpr-_LPAR_in-Infix-Syntax_RPAR_": {"display": "AddExpr", "context": ["The Lean Language Reference", "Interacting with Lean", "Formatted Output", "Repr", "How To Write a Repr Instance", "Infix Syntax"]}}, "address": "/Interacting-with-Lean/"}], "AcademicWork.discipline (in Structure type inheritance with overlapping fields)": [{"id": "AcademicWork___discipline-_LPAR_in-Structure-type-inheritance-with-overlapping-fields_RPAR_", "data": {"/The-Type-System/Inductive-Types/#AcademicWork___discipline-_LPAR_in-Structure-type-inheritance-with-overlapping-fields_RPAR_": {"display": "discipline", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Structure Declarations", "Structure Inheritance", "Structure type inheritance with overlapping fields"]}}, "address": "/The-Type-System/Inductive-Types/"}], "AcademicWork.author (in Structure type inheritance with overlapping fields)": [{"id": "AcademicWork___author-_LPAR_in-Structure-type-inheritance-with-overlapping-fields_RPAR_", "data": {"/The-Type-System/Inductive-Types/#AcademicWork___author-_LPAR_in-Structure-type-inheritance-with-overlapping-fields_RPAR_": {"display": "author", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Structure Declarations", "Structure Inheritance", "Structure type inheritance with overlapping fields"]}}, "address": "/The-Type-System/Inductive-Types/"}], "AcademicWork (in Structure type inheritance with overlapping fields)": [{"id": "AcademicWork-_LPAR_in-Structure-type-inheritance-with-overlapping-fields_RPAR_", "data": {"/The-Type-System/Inductive-Types/#AcademicWork-_LPAR_in-Structure-type-inheritance-with-overlapping-fields_RPAR_": {"display": "AcademicWork", "context": ["The Lean Language Reference", "The Type System", "Inductive Types", "Structure Declarations", "Structure Inheritance", "Structure type inheritance with overlapping fields"]}}, "address": "/The-Type-System/Inductive-Types/"}], "ABC.toNat (in Atomic Types and Repr)": [{"id": "ABC___toNat-_LPAR_in-Atomic-Types-and--Repr_RPAR_", "data": {"/Interacting-with-Lean/#ABC___toNat-_LPAR_in-Atomic-Types-and--Repr_RPAR_": {"display": "ABC.toNat", "context": ["The Lean Language Reference", "Interacting with Lean", "Formatted Output", "Repr", "Atomic Types", "Atomic Types and Repr"]}}, "address": "/Interacting-with-Lean/"}], "ABC.c (in Atomic Types and Repr)": [{"id": "ABC___c-_LPAR_in-Atomic-Types-and--Repr_RPAR_", "data": {"/Interacting-with-Lean/#ABC___c-_LPAR_in-Atomic-Types-and--Repr_RPAR_": {"display": "c", "context": ["The Lean Language Reference", "Interacting with Lean", "Formatted Output", "Repr", "Atomic Types", "Atomic Types and Repr"]}}, "address": "/Interacting-with-Lean/"}], "ABC.b (in Atomic Types and Repr)": [{"id": "ABC___b-_LPAR_in-Atomic-Types-and--Repr_RPAR_", "data": {"/Interacting-with-Lean/#ABC___b-_LPAR_in-Atomic-Types-and--Repr_RPAR_": {"display": "b", "context": ["The Lean Language Reference", "Interacting with Lean", "Formatted Output", "Repr", "Atomic Types", "Atomic Types and Repr"]}}, "address": "/Interacting-with-Lean/"}], "ABC.a (in Atomic Types and Repr)": [{"id": "ABC___a-_LPAR_in-Atomic-Types-and--Repr_RPAR_", "data": {"/Interacting-with-Lean/#ABC___a-_LPAR_in-Atomic-Types-and--Repr_RPAR_": {"display": "a", "context": ["The Lean Language Reference", "Interacting with Lean", "Formatted Output", "Repr", "Atomic Types", "Atomic Types and Repr"]}}, "address": "/Interacting-with-Lean/"}], "ABC (in Atomic Types and Repr)": [{"id": "ABC-_LPAR_in-Atomic-Types-and--Repr_RPAR_", "data": {"/Interacting-with-Lean/#ABC-_LPAR_in-Atomic-Types-and--Repr_RPAR_": {"display": "ABC", "context": ["The Lean Language Reference", "Interacting with Lean", "Formatted Output", "Repr", "Atomic Types", "Atomic Types and Repr"]}}, "address": "/Interacting-with-Lean/"}], "A.y (in Longer Identifier Prefixes Take Precedence)": [{"id": "A___y-_LPAR_in-Longer-Identifier-Prefixes-Take-Precedence_RPAR_", "data": {"/Terms/Identifiers/#A___y-_LPAR_in-Longer-Identifier-Prefixes-Take-Precedence_RPAR_": {"display": "y", "context": ["The Lean Language Reference", "Terms", "Identifiers", "Longer Identifier Prefixes Take Precedence"]}}, "address": "/Terms/Identifiers/"}], "A.x (in Longer Prefixes of Current Namespace Take Precedence)": [{"id": "A___x-_LPAR_in-Longer-Prefixes-of-Current-Namespace-Take-Precedence_RPAR_", "data": {"/Terms/Identifiers/#A___x-_LPAR_in-Longer-Prefixes-of-Current-Namespace-Take-Precedence_RPAR_": {"display": "x", "context": ["The Lean Language Reference", "Terms", "Identifiers", "Longer Prefixes of Current Namespace Take Precedence"]}}, "address": "/Terms/Identifiers/"}], "A.x (in Current Namespace Contents Take Precedence Over Opened Namespaces)": [{"id": "A___x-_LPAR_in-Current-Namespace-Contents-Take-Precedence-Over-Opened-Namespaces_RPAR_", "data": {"/Terms/Identifiers/#A___x-_LPAR_in-Current-Namespace-Contents-Take-Precedence-Over-Opened-Namespaces_RPAR_": {"display": "x", "context": ["The Lean Language Reference", "Terms", "Identifiers", "Current Namespace Contents Take Precedence Over Opened Namespaces"]}}, "address": "/Terms/Identifiers/"}], "A.x (in Ambiguous Identifiers)": [{"id": "A___x-_LPAR_in-Ambiguous-Identifiers_RPAR_", "data": {"/Terms/Identifiers/#A___x-_LPAR_in-Ambiguous-Identifiers_RPAR_": {"display": "A.x", "context": ["The Lean Language Reference", "Terms", "Identifiers", "Ambiguous Identifiers"]}}, "address": "/Terms/Identifiers/"}], "A.a1 (in Opening Nested Namespaces)": [{"id": "A___a1-_LPAR_in-Opening-Nested-Namespaces_RPAR_", "data": {"/Namespaces-and-Sections/#A___a1-_LPAR_in-Opening-Nested-Namespaces_RPAR_": {"display": "a1", "context": ["The Lean Language Reference", "Namespaces and Sections", "Namespaces", "Namespaces and Section Scopes", "Opening Nested Namespaces"]}}, "address": "/Namespaces-and-Sections/"}], "A.B.a2 (in Opening Nested Namespaces)": [{"id": "A___B___a2-_LPAR_in-Opening-Nested-Namespaces_RPAR_", "data": {"/Namespaces-and-Sections/#A___B___a2-_LPAR_in-Opening-Nested-Namespaces_RPAR_": {"display": "a2", "context": ["The Lean Language Reference", "Namespaces and Sections", "Namespaces", "Namespaces and Section Scopes", "Opening Nested Namespaces"]}}, "address": "/Namespaces-and-Sections/"}], "A.B.C.x (in Longer Prefixes of Current Namespace Take Precedence)": [{"id": "A___B___C___x-_LPAR_in-Longer-Prefixes-of-Current-Namespace-Take-Precedence_RPAR_", "data": {"/Terms/Identifiers/#A___B___C___x-_LPAR_in-Longer-Prefixes-of-Current-Namespace-Take-Precedence_RPAR_": {"display": "x", "context": ["The Lean Language Reference", "Terms", "Identifiers", "Longer Prefixes of Current Namespace Take Precedence"]}}, "address": "/Terms/Identifiers/"}], "A.B.C.a3 (in Opening Nested Namespaces)": [{"id": "A___B___C___a3-_LPAR_in-Opening-Nested-Namespaces_RPAR_", "data": {"/Namespaces-and-Sections/#A___B___C___a3-_LPAR_in-Opening-Nested-Namespaces_RPAR_": {"display": "a3", "context": ["The Lean Language Reference", "Namespaces and Sections", "Namespaces", "Namespaces and Section Scopes", "Opening Nested Namespaces"]}}, "address": "/Namespaces-and-Sections/"}], "A (in Longer Identifier Prefixes Take Precedence)": [{"id": "A-_LPAR_in-Longer-Identifier-Prefixes-Take-Precedence_RPAR_", "data": {"/Terms/Identifiers/#A-_LPAR_in-Longer-Identifier-Prefixes-Take-Precedence_RPAR_": {"display": "A", "context": ["The Lean Language Reference", "Terms", "Identifiers", "Longer Identifier Prefixes Take Precedence"]}}, "address": "/Terms/Identifiers/"}], "A (in Injectivity Patterns)": [{"id": "A-_LPAR_in-Injectivity-Patterns_RPAR_", "data": {"/The--grind--tactic/E___matching/#A-_LPAR_in-Injectivity-Patterns_RPAR_": {"display": "A", "context": ["The Lean Language Reference", "The grind tactic", "E‑matching", "Patterns", "Injectivity Patterns"]}}, "address": "/The--grind--tactic/E___matching/"}], "A (in Deriving Multiple Classes)": [{"id": "A-_LPAR_in-Deriving-Multiple-Classes_RPAR_", "data": {"/Type-Classes/Deriving-Instances/#A-_LPAR_in-Deriving-Multiple-Classes_RPAR_": {"display": "A", "context": ["The Lean Language Reference", "Type Classes", "Deriving Instances", "Deriving Multiple Classes"]}}, "address": "/Type-Classes/Deriving-Instances/"}]}}, "Verso.Genre.Manual.doc.tech": {"title": "Terminology", "description": "Terminology", "contents": {"ι reduction": [{"id": "--tech-term-___-reduction", "data": {"term": "ι-reduction"}, "address": "/The-Type-System/Inductive-Types/"}], "ι": [{"id": "--tech-term-___-next-next", "data": {"term": "ι"}, "address": "/The-Type-System/"}], "η equivalence": [{"id": "--tech-term-___-equivalence", "data": {"term": "η-equivalence"}, "address": "/The-Type-System/"}], "ζ": [{"id": "--tech-term-___-next-next-next", "data": {"term": "ζ"}, "address": "/The-Type-System/"}], "δ": [{"id": "--tech-term-___-next", "data": {"term": "δ"}, "address": "/The-Type-System/"}], "β": [{"id": "--tech-term-___", "data": {"term": "β"}, "address": "/The-Type-System/"}], "Σ type": [{"id": "--tech-term-___-types", "data": {"term": "Σ-types"}, "address": "/Basic-Types/Tuples/"}], "workspace": [{"id": "--tech-term-workspace", "data": {"term": "workspace"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "witnes": [{"id": "--tech-term-witness", "data": {"term": "witness"}, "address": "/Basic-Propositions/Quantifiers/"}], "whitespace": [{"id": "--tech-term-whitespace", "data": {"term": "whitespace"}, "address": "/Source-Files-and-Modules/"}], "well typed": [{"id": "--tech-term-well-typed", "data": {"term": "well-typed"}, "address": "/The-Type-System/"}], "well founded relation": [{"id": "--tech-term-well-founded-relation", "data": {"term": "well-founded relation"}, "address": "/Definitions/Recursive-Definitions/"}], "well founded recursion": [{"id": "--tech-term-well-founded-recursion-next", "data": {"term": "well-founded recursion"}, "address": "/Definitions/Recursive-Definitions/"}, {"id": "--tech-term-well-founded-recursion", "data": {"term": "well-founded recursion"}, "address": "/Elaboration-and-Compilation/"}], "weakest precondition": [{"id": "--tech-term-weakest-preconditions", "data": {"term": "weakest preconditions"}, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "verification condition": [{"id": "--tech-term-verification-conditions-next", "data": {"term": "verification conditions"}, "address": "/The--mvcgen--tactic/Overview/"}, {"id": "--tech-term-verification-conditions", "data": {"term": "verification conditions"}, "address": "/The--mvcgen--tactic/"}], "vc": [{"id": "--tech-term-VCs", "data": {"term": "VCs"}, "address": "/The--mvcgen--tactic/"}], "upward propagation": [{"id": "--tech-term-Upward-propagation", "data": {"term": "Upward propagation"}, "address": "/The--grind--tactic/Constraint-Propagation/"}], "universe polymorphism": [{"id": "--tech-term-universe-polymorphism", "data": {"term": "universe polymorphism"}, "address": "/The-Type-System/Universes/"}], "universe parameter": [{"id": "--tech-term-universe-parameters", "data": {"term": "universe parameters"}, "address": "/The-Type-System/Universes/"}], "universe lifting": [{"id": "--tech-term-universe-lifting", "data": {"term": "universe lifting"}, "address": "/The-Type-System/Universes/"}], "universe level": [{"id": "--tech-term-level", "data": {"term": "level"}, "address": "/The-Type-System/Universes/"}], "universe": [{"id": "--tech-term-universes", "data": {"term": "universes"}, "address": "/The-Type-System/Universes/"}], "unit like type": [{"id": "--tech-term-Unit-like-types", "data": {"term": "Unit-like types"}, "address": "/Basic-Types/The-Unit-Type/"}], "unexpander": [{"id": "--tech-term-unexpanders", "data": {"term": "unexpanders"}, "address": "/Notations-and-Macros/Extending-Lean___s-Output/"}], "unboxed": [{"id": "--tech-term-Unboxed", "data": {"term": "Unboxed"}, "address": "/Run-Time-Code/Boxing/"}], "type constructor": [{"id": "--tech-term-type-constructors", "data": {"term": "type constructors"}, "address": "/The-Type-System/Inductive-Types/"}], "type clas": [{"id": "--tech-term-type-class", "data": {"term": "type class"}, "address": "/Type-Classes/"}], "type ascription": [{"id": "--tech-term-Type-ascriptions", "data": {"term": "Type ascriptions"}, "address": "/Terms/Type-Ascription/"}], "transitive dependency": [{"id": "--tech-term-transitive-dependencies", "data": {"term": "transitive dependencies"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "trace file": [{"id": "--tech-term-trace-files", "data": {"term": "trace files"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "trace": [{"id": "--tech-term-traces", "data": {"term": "traces"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "total correctness interpretation": [{"id": "--tech-term-total-correctness-interpretation", "data": {"term": "total correctness interpretation"}, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "total": [{"id": "--tech-term-total", "data": {"term": "total"}, "address": "/The-Type-System/Functions/"}], "toolchain override": [{"id": "--tech-term-toolchain-override", "data": {"term": "toolchain override"}, "address": "/Build-Tools-and-Distribution/Managing-Toolchains-with-Elan/"}], "toolchain file": [{"id": "--tech-term-toolchain-file", "data": {"term": "toolchain file"}, "address": "/Build-Tools-and-Distribution/Managing-Toolchains-with-Elan/"}], "toolchain": [{"id": "--tech-term-toolchain", "data": {"term": "toolchain"}, "address": "/Build-Tools-and-Distribution/"}], "token antiquotation": [{"id": "--tech-term-token-antiquotations", "data": {"term": "token antiquotations"}, "address": "/Notations-and-Macros/Macros/"}], "token": [{"id": "--tech-term-tokens", "data": {"term": "tokens"}, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "thunk": [{"id": "--tech-term-thunk", "data": {"term": "thunk"}, "address": "/Basic-Types/Lazy-Computations/"}], "theorem": [{"id": "--tech-term-theorems", "data": {"term": "theorems"}, "address": "/Definitions/Theorems/"}], "test driver": [{"id": "--tech-term-test-driver", "data": {"term": "test driver"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "term elaborator": [{"id": "--tech-term-Term-elaborators", "data": {"term": "Term elaborators"}, "address": "/Notations-and-Macros/Elaborators/"}], "term": [{"id": "--tech-term-Terms", "data": {"term": "Terms"}, "address": "/The-Type-System/"}, {"id": "--tech-term-Terms-next", "data": {"term": "Terms"}, "address": "/Terms/"}], "technical terminology": [{"id": "--tech-term-Technical-terminology", "data": {"term": "Technical terminology"}, "address": "/Introduction/"}], "task": [{"id": "--tech-term-Tasks", "data": {"term": "Tasks"}, "address": "/IO/Tasks-and-Threads/"}], "target": [{"id": "--tech-term-target", "data": {"term": "target"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "tail position": [{"id": "--tech-term-tail-position", "data": {"term": "tail position"}, "address": "/Definitions/Recursive-Definitions/"}], "synthetic hole": [{"id": "--tech-term-synthetic-holes", "data": {"term": "synthetic holes"}, "address": "/Terms/Holes/"}], "synthetic": [{"id": "--tech-term-Synthetic", "data": {"term": "Synthetic"}, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "synthesi": [{"id": "--tech-term-synthesizes", "data": {"term": "synthesizes"}, "address": "/Type-Classes/"}], "syntax rule": [{"id": "--tech-term-syntax-rules", "data": {"term": "syntax rules"}, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "syntax kind": [{"id": "--tech-term-syntax-kind", "data": {"term": "syntax kind"}, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "syntax category": [{"id": "--tech-term-syntax-categories", "data": {"term": "syntax categories"}, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "sum type": [{"id": "--tech-term-Sum-types", "data": {"term": "Sum types"}, "address": "/Basic-Types/Sum-Types/"}], "subsingleton": [{"id": "--tech-term-subsingleton", "data": {"term": "subsingleton"}, "address": "/The-Type-System/Inductive-Types/"}], "subgoal": [{"id": "--tech-term-subgoals", "data": {"term": "subgoals"}, "address": "/Tactic-Proofs/"}], "structure instance": [{"id": "--tech-term-structure-instance", "data": {"term": "structure instance"}, "address": "/The-Type-System/Inductive-Types/"}], "structure": [{"id": "--tech-term-Structures", "data": {"term": "Structures"}, "address": "/The-Type-System/Inductive-Types/"}], "strictly positive": [{"id": "--tech-term-strictly-positive", "data": {"term": "strictly positive"}, "address": "/The-Type-System/Inductive-Types/"}], "strict sub term": [{"id": "--tech-term-strict-sub-term", "data": {"term": "strict sub-term"}, "address": "/Definitions/Recursive-Definitions/"}], "strict implicit": [{"id": "--tech-term-Strict-implicit", "data": {"term": "Strict implicit"}, "address": "/Terms/Functions/"}], "stream": [{"id": "--tech-term-Streams", "data": {"term": "Streams"}, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "state monad": [{"id": "--tech-term-State-monads", "data": {"term": "State monads"}, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "standard output": [{"id": "--tech-term-standard-output", "data": {"term": "standard output"}, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "standard input": [{"id": "--tech-term-standard-input", "data": {"term": "standard input"}, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "standard error": [{"id": "--tech-term-standard-error", "data": {"term": "standard error"}, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "splice suffix": [{"id": "--tech-term-splice-suffix", "data": {"term": "splice suffix"}, "address": "/Notations-and-Macros/Macros/"}], "splice": [{"id": "--tech-term-splices", "data": {"term": "splices"}, "address": "/Notations-and-Macros/Macros/"}], "specification lemma": [{"id": "--tech-term-Specification-lemmas", "data": {"term": "Specification lemmas"}, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "source information": [{"id": "--tech-term-source-information", "data": {"term": "source information"}, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "source file": [{"id": "--tech-term-source-file", "data": {"term": "source files"}, "address": "/Source-Files-and-Modules/"}, {"id": "--tech-term-source-files", "data": {"term": "source files"}, "address": "/Source-Files-and-Modules/"}], "source directory": [{"id": "--tech-term-source-directory", "data": {"term": "source directory"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "sort": [{"id": "--tech-term-sorts", "data": {"term": "sorts"}, "address": "/The-Type-System/Universes/"}], "simproc": [{"id": "--tech-term-simprocs", "data": {"term": "simprocs"}, "address": "/The-Simplifier/Rewrite-Rules/"}], "simp set": [{"id": "--tech-term-simp-set", "data": {"term": "simp set"}, "address": "/The-Simplifier/Simp-sets/"}], "simp normal form": [{"id": "--tech-term-simp-normal-form", "data": {"term": "simp normal form"}, "address": "/The-Simplifier/Simp-Normal-Forms/"}], "signature": [{"id": "--tech-term-signature", "data": {"term": "signature"}, "address": "/Definitions/Headers-and-Signatures/"}], "severity": [{"id": "--tech-term-severity", "data": {"term": "severity"}, "address": "/Interacting-with-Lean/"}], "setoid": [{"id": "--tech-term-setoid", "data": {"term": "setoid"}, "address": "/The-Type-System/Quotients/"}], "semireducible": [{"id": "--tech-term-Semireducible", "data": {"term": "Semireducible"}, "address": "/Definitions/Recursive-Definitions/"}], "semi output parameter": [{"id": "--tech-term-Semi-output-parameters", "data": {"term": "Semi-output parameters"}, "address": "/Type-Classes/Instance-Synthesis/"}], "section variable": [{"id": "--tech-term-Section-variables", "data": {"term": "Section variables"}, "address": "/Namespaces-and-Sections/"}], "section scope": [{"id": "--tech-term-section-scope", "data": {"term": "section scope"}, "address": "/Namespaces-and-Sections/"}], "section": [{"id": "--tech-term-section", "data": {"term": "section"}, "address": "/Namespaces-and-Sections/"}], "scientific literal": [{"id": "--tech-term-scientific-literals", "data": {"term": "scientific literals"}, "address": "/Terms/Numeric-Literals/"}], "schematic variable": [{"id": "--tech-term-schematic-variables", "data": {"term": "schematic variables"}, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "round": [{"id": "--tech-term-round", "data": {"term": "round"}, "address": "/The--grind--tactic/E___matching/"}], "root package": [{"id": "--tech-term-root-package", "data": {"term": "root package"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "root directory": [{"id": "--tech-term-root-directory", "data": {"term": "root directory"}, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "right hand side": [{"id": "--tech-term-right-hand-side", "data": {"term": "right-hand side"}, "address": "/Terms/Pattern-Matching/"}], "right fold": [{"id": "--tech-term-Right-folds", "data": {"term": "Right folds"}, "address": "/Basic-Types/Linked-Lists/"}], "right associative": [{"id": "--tech-term-Right-associative", "data": {"term": "Right-associative"}, "address": "/Notations-and-Macros/Custom-Operators/"}], "resolve": [{"id": "--tech-term-resolving", "data": {"term": "resolving"}, "address": "/Terms/Identifiers/"}, {"id": "--tech-term-resolving-next", "data": {"term": "resolving"}, "address": "/IO/Tasks-and-Threads/"}, {"id": "--tech-term-resolve", "data": {"term": "resolving"}, "address": "/IO/Tasks-and-Threads/"}], "require": [{"id": "--tech-term-require", "data": {"term": "require"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "repl": [{"id": "--tech-term-REPL", "data": {"term": "REPL"}, "address": "/Interacting-with-Lean/"}], "relevant": [{"id": "--tech-term-relevant", "data": {"term": "relevant"}, "address": "/The-Type-System/Inductive-Types/"}], "reference count": [{"id": "--tech-term-reference-counting", "data": {"term": "reference counting"}, "address": "/Run-Time-Code/Reference-Counting/"}], "reduction": [{"id": "--tech-term-reduction", "data": {"term": "reduction"}, "address": "/The-Type-System/"}], "reducible": [{"id": "--tech-term-Reducible", "data": {"term": "Reducible"}, "address": "/Definitions/Recursive-Definitions/"}], "reducibility": [{"id": "--tech-term-reducibility", "data": {"term": "reducibility"}, "address": "/Definitions/Recursive-Definitions/"}], "recursor": [{"id": "--tech-term-recursor", "data": {"term": "recursor"}, "address": "/The-Type-System/Inductive-Types/"}], "realizing": [{"id": "--tech-term-realizing", "data": {"term": "realizing"}, "address": "/Terms/Identifiers/"}], "reader monad": [{"id": "--tech-term-Reader-monads", "data": {"term": "Reader monads"}, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "raw string literal": [{"id": "--tech-term-raw-string-literals", "data": {"term": "raw string literals"}, "address": "/Basic-Types/Strings/"}], "raw identifier": [{"id": "--tech-term-raw-identifier", "data": {"term": "raw identifier"}, "address": "/Source-Files-and-Modules/"}], "raw": [{"id": "--tech-term-raw", "data": {"term": "raw"}, "address": "/Basic-Types/Maps-and-Sets/"}], "range": [{"id": "--tech-term-range", "data": {"term": "range"}, "address": "/Basic-Types/Ranges/"}], "quotient type": [{"id": "--tech-term-Quotient-types", "data": {"term": "Quotient types"}, "address": "/The-Type-System/Quotients/"}], "quotation": [{"id": "--tech-term-Quotation", "data": {"term": "Quotation"}, "address": "/Notations-and-Macros/Macros/"}], "quasiquotation": [{"id": "--tech-term-Quasiquotation", "data": {"term": "Quasiquotation"}, "address": "/Notations-and-Macros/Macros/"}], "pure iterator": [{"id": "--tech-term-pure", "data": {"term": "pure"}, "address": "/Iterators/Iterator-Definitions/"}], "public section": [{"id": "--tech-term-public-section", "data": {"term": "public section"}, "address": "/Namespaces-and-Sections/"}], "public scope": [{"id": "--tech-term-public-scope", "data": {"term": "public scope"}, "address": "/Source-Files-and-Modules/"}], "protected": [{"id": "--tech-term-protected", "data": {"term": "protected"}, "address": "/Namespaces-and-Sections/"}], "propositional extensionality": [{"id": "--tech-term-Extensionality", "data": {"term": "Extensionality"}, "address": "/The-Type-System/Propositions/"}], "propositional equality": [{"id": "--tech-term-Propositional-equality", "data": {"term": "Propositional equality"}, "address": "/Basic-Propositions/Propositional-Equality/"}], "proposition": [{"id": "--tech-term-Propositions", "data": {"term": "Propositions"}, "address": "/The-Type-System/Propositions/"}], "proof term": [{"id": "--tech-term-proof-terms", "data": {"term": "proof terms"}, "address": "/Tactic-Proofs/"}], "proof state": [{"id": "--tech-term-proof-state", "data": {"term": "proof state"}, "address": "/Tactic-Proofs/"}], "proof irrelevance": [{"id": "--tech-term-proof-irrelevance", "data": {"term": "proof irrelevance"}, "address": "/The-Type-System/"}], "projection function": [{"id": "--tech-term-projection-function", "data": {"term": "projection function"}, "address": "/The-Type-System/Inductive-Types/"}], "productive iterator": [{"id": "--tech-term-Productive", "data": {"term": "Productive"}, "address": "/Iterators/Iterator-Definitions/"}], "producer": [{"id": "--tech-term-Producers", "data": {"term": "Producers"}, "address": "/Iterators/"}], "private scope": [{"id": "--tech-term-private-scope", "data": {"term": "private scope"}, "address": "/Source-Files-and-Modules/"}], "private": [{"id": "--tech-term-private", "data": {"term": "private"}, "address": "/Definitions/Modifiers/"}], "priority": [{"id": "--tech-term-priorities", "data": {"term": "priority"}, "address": "/Type-Classes/Instance-Declarations/"}, {"id": "--tech-term-priority", "data": {"term": "priority"}, "address": "/IO/Tasks-and-Threads/"}], "prelude": [{"id": "--tech-term-prelude", "data": {"term": "prelude"}, "address": "/Source-Files-and-Modules/"}], "predicative": [{"id": "--tech-term-predicative", "data": {"term": "predicative"}, "address": "/The-Type-System/Universes/"}], "predicate transformer semantic": [{"id": "--tech-term-predicate-transformer-semantics", "data": {"term": "predicate transformer semantics"}, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "precondition": [{"id": "--tech-term-precondition", "data": {"term": "precondition"}, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "precedence": [{"id": "--tech-term-precedence", "data": {"term": "precedence"}, "address": "/Notations-and-Macros/Custom-Operators/"}], "pre resolved identifier": [{"id": "--tech-term-pre-resolved-identifiers", "data": {"term": "pre-resolved identifiers"}, "address": "/Notations-and-Macros/Macros/"}], "pre definition": [{"id": "--tech-term-pre-definition", "data": {"term": "pre-definition"}, "address": "/Elaboration-and-Compilation/"}], "postcondition shape": [{"id": "--tech-term-postcondition-shape", "data": {"term": "postcondition shape"}, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "postcondition": [{"id": "--tech-term-postcondition", "data": {"term": "postcondition"}, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "plausible step": [{"id": "--tech-term-plausible-steps", "data": {"term": "plausible steps"}, "address": "/Iterators/Iterator-Definitions/"}], "placeholder term": [{"id": "--tech-term-placeholder-term", "data": {"term": "placeholder term"}, "address": "/Terms/Holes/"}], "pattern variable": [{"id": "--tech-term-Pattern-variables", "data": {"term": "Pattern variables"}, "address": "/Terms/Pattern-Matching/"}], "pattern matching": [{"id": "--tech-term-Pattern-matching", "data": {"term": "Pattern matching"}, "address": "/Terms/Pattern-Matching/"}], "pattern": [{"id": "--tech-term-patterns", "data": {"term": "patterns"}, "address": "/Terms/Pattern-Matching/"}], "path dependency": [{"id": "--tech-term-path-dependencies", "data": {"term": "path dependencies"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "path": [{"id": "--tech-term-paths", "data": {"term": "paths"}, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "partial fixpoint": [{"id": "--tech-term-partial-fixpoint", "data": {"term": "partial fixpoint"}, "address": "/Definitions/Recursive-Definitions/"}], "partial correctness theorem": [{"id": "--tech-term-partial-correctness-theorem", "data": {"term": "partial correctness theorem"}, "address": "/Definitions/Recursive-Definitions/"}], "partial correctness interpretation": [{"id": "--tech-term-partial-correctness-interpretation", "data": {"term": "partial correctness interpretation"}, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "parent projection": [{"id": "--tech-term-parent-projections", "data": {"term": "parent projections"}, "address": "/The-Type-System/Inductive-Types/"}], "parameter": [{"id": "--tech-term-parameters", "data": {"term": "parameters"}, "address": "/The-Type-System/Inductive-Types/"}], "package directory": [{"id": "--tech-term-package-directory", "data": {"term": "package directory"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "package configuration": [{"id": "--tech-term-package-configuration", "data": {"term": "package configuration"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "package": [{"id": "--tech-term-package", "data": {"term": "package"}, "address": "/Build-Tools-and-Distribution/Lake/"}, {"id": "--tech-term-packages", "data": {"term": "package"}, "address": "/Source-Files-and-Modules/"}], "owned": [{"id": "--tech-term-owned", "data": {"term": "owned"}, "address": "/Run-Time-Code/Foreign-Function-Interface/"}], "output parameter": [{"id": "--tech-term-output-parameter", "data": {"term": "output parameter"}, "address": "/Type-Classes/Instance-Synthesis/"}], "original": [{"id": "--tech-term-Original", "data": {"term": "Original"}, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "origin": [{"id": "--tech-term-origin", "data": {"term": "origin"}, "address": "/Build-Tools-and-Distribution/Managing-Toolchains-with-Elan/"}], "optional parameter": [{"id": "--tech-term-optional-parameters", "data": {"term": "optional parameters"}, "address": "/Definitions/Headers-and-Signatures/"}], "opened namespace": [{"id": "--tech-term-opened-namespaces", "data": {"term": "opened namespaces"}, "address": "/Namespaces-and-Sections/"}], "opened": [{"id": "--tech-term-opened", "data": {"term": "opened"}, "address": "/Namespaces-and-Sections/"}], "opaque constant": [{"id": "--tech-term-Opaque-constants", "data": {"term": "Opaque constants"}, "address": "/Definitions/Definitions/"}], "olean": [{"id": "--tech-term-___olean-file-next", "data": {"term": ".olean file"}, "address": "/Source-Files-and-Modules/"}], "notation item": [{"id": "--tech-term-notation-items-next", "data": {"term": "notation items"}, "address": "/Notations-and-Macros/Notations/"}, {"id": "--tech-term-notation-items", "data": {"term": "notation items"}, "address": "/Notations-and-Macros/Notations/"}], "notation": [{"id": "--tech-term-notation", "data": {"term": "notation"}, "address": "/Notations-and-Macros/Notations/"}], "normal form": [{"id": "--tech-term-normal-form", "data": {"term": "normal form"}, "address": "/The-Type-System/"}], "non terminal simp": [{"id": "--tech-term-non-terminal-simps", "data": {"term": "non-terminal simps"}, "address": "/The-Simplifier/Terminal-vs-Non-Terminal-Positions/"}], "non dependent": [{"id": "--tech-term-Non-Dependent", "data": {"term": "Non-Dependent"}, "address": "/The-Type-System/Functions/"}], "non associative": [{"id": "--tech-term-Non-associative", "data": {"term": "Non-associative"}, "address": "/Notations-and-Macros/Custom-Operators/"}], "node": [{"id": "--tech-term-Nodes", "data": {"term": "Nodes"}, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "nested inductive type": [{"id": "--tech-term-Nested-inductive-types", "data": {"term": "Nested inductive types"}, "address": "/The-Type-System/Inductive-Types/"}], "natural number": [{"id": "--tech-term-natural-numbers", "data": {"term": "natural numbers"}, "address": "/Basic-Types/Natural-Numbers/"}], "namespace": [{"id": "--tech-term-namespaces", "data": {"term": "namespaces"}, "address": "/Namespaces-and-Sections/"}], "named pattern": [{"id": "--tech-term-Named-patterns", "data": {"term": "Named patterns"}, "address": "/Terms/Pattern-Matching/"}], "named argument": [{"id": "--tech-term-named-arguments", "data": {"term": "named arguments"}, "address": "/Terms/Function-Application/"}], "mutually recursive": [{"id": "--tech-term-mutually-recursive", "data": {"term": "mutually recursive"}, "address": "/Definitions/Recursive-Definitions/"}], "mutual block": [{"id": "--tech-term-mutual-block", "data": {"term": "mutual block"}, "address": "/Definitions/Recursive-Definitions/"}], "multi pattern": [{"id": "--tech-term-multi-pattern", "data": {"term": "multi-pattern"}, "address": "/The--grind--tactic/E___matching/"}], "motive": [{"id": "--tech-term-motive", "data": {"term": "motive"}, "address": "/The-Type-System/Inductive-Types/"}], "morally canonical": [{"id": "--tech-term-morally-canonical", "data": {"term": "morally canonical"}, "address": "/Type-Classes/Instance-Synthesis/"}], "monadic iterator": [{"id": "--tech-term-Monadic", "data": {"term": "Monadic"}, "address": "/Iterators/Iterator-Definitions/"}], "monad transformer": [{"id": "--tech-term-monad-transformer", "data": {"term": "monad transformer"}, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "monad law": [{"id": "--tech-term-monad-laws", "data": {"term": "monad laws"}, "address": "/Functors___-Monads-and--do--Notation/Laws/"}], "monad": [{"id": "--tech-term-Monad", "data": {"term": "Monad"}, "address": "/Functors___-Monads-and--do--Notation/"}], "modus ponen": [{"id": "--tech-term-modus-ponens", "data": {"term": "modus ponens"}, "address": "/Basic-Propositions/Logical-Connectives/"}], "module root": [{"id": "--tech-term-module-roots", "data": {"term": "module roots"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "module": [{"id": "--tech-term-module", "data": {"term": "module"}, "address": "/Source-Files-and-Modules/"}], "modifier": [{"id": "--tech-term-modifiers", "data": {"term": "modifiers"}, "address": "/Definitions/Modifiers/"}], "model based theory combination": [{"id": "--tech-term-model-based-theory-combination", "data": {"term": "model-based theory combination"}, "address": "/The--grind--tactic/Linear-Integer-Arithmetic/"}], "mixfix": [{"id": "--tech-term-mixfix", "data": {"term": "mixfix"}, "address": "/Notations-and-Macros/Notations/"}], "minor premise": [{"id": "--tech-term-minor-premise", "data": {"term": "minor premise"}, "address": "/The-Type-System/Inductive-Types/"}], "minimal": [{"id": "--tech-term-minimal", "data": {"term": "minimal"}, "address": "/The--grind--tactic/E___matching/"}], "method": [{"id": "--tech-term-methods", "data": {"term": "methods"}, "address": "/Type-Classes/"}], "metavariable": [{"id": "--tech-term-metavariables", "data": {"term": "metavariables"}, "address": "/Tactic-Proofs/Reading-Proof-States/"}], "metaprogramming phase": [{"id": "--tech-term-metaprogramming-phase", "data": {"term": "metaprogramming phase"}, "address": "/Source-Files-and-Modules/"}], "meta phase": [{"id": "--tech-term-meta-phase", "data": {"term": "meta phase"}, "address": "/Source-Files-and-Modules/"}], "message log": [{"id": "--tech-term-message-log", "data": {"term": "message log"}, "address": "/Interacting-with-Lean/"}], "measure": [{"id": "--tech-term-measure", "data": {"term": "measure"}, "address": "/Elaboration-and-Compilation/"}, {"id": "--tech-term-measure-next", "data": {"term": "measure"}, "address": "/Definitions/Recursive-Definitions/"}], "matcher function": [{"id": "--tech-term-matcher-functions", "data": {"term": "matcher functions"}, "address": "/Elaboration-and-Compilation/"}], "match discriminant": [{"id": "--tech-term-match-discriminants", "data": {"term": "match discriminants"}, "address": "/Terms/Pattern-Matching/"}], "match alternative": [{"id": "--tech-term-match-alternatives", "data": {"term": "match alternatives"}, "address": "/Terms/Pattern-Matching/"}], "marble diagram": [{"id": "--tech-term-marble-diagrams", "data": {"term": "marble diagrams"}, "address": "/Iterators/Iterator-Combinators/"}], "mappings file": [{"id": "--tech-term-mappings-file", "data": {"term": "mappings file"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "map": [{"id": "--tech-term-map", "data": {"term": "map"}, "address": "/Basic-Types/Maps-and-Sets/"}], "manifest": [{"id": "--tech-term-manifest", "data": {"term": "manifest"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "major premise": [{"id": "--tech-term-major-premise", "data": {"term": "major premise"}, "address": "/The-Type-System/Inductive-Types/"}], "main goal": [{"id": "--tech-term-main-goal", "data": {"term": "main goal"}, "address": "/Tactic-Proofs/"}], "macro scope": [{"id": "--tech-term-macro-scopes", "data": {"term": "macro scopes"}, "address": "/Notations-and-Macros/Macros/"}], "macro expansion": [{"id": "--tech-term-macro-expansion", "data": {"term": "macro expansion"}, "address": "/Notations-and-Macros/Macros/"}], "macro": [{"id": "--tech-term-macro", "data": {"term": "Macros"}, "address": "/Notations-and-Macros/Defining-New-Syntax/"}, {"id": "--tech-term-Macros", "data": {"term": "Macros"}, "address": "/Notations-and-Macros/Macros/"}], "loop invariant": [{"id": "--tech-term-loop-invariant", "data": {"term": "loop invariant"}, "address": "/The--mvcgen--tactic/Overview/"}], "log": [{"id": "--tech-term-log", "data": {"term": "log"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "local longest match rule": [{"id": "--tech-term-local-longest-match-rule", "data": {"term": "local longest-match rule"}, "address": "/Notations-and-Macros/Custom-Operators/"}], "local instance": [{"id": "--tech-term-Local-instances", "data": {"term": "Local instances"}, "address": "/Type-Classes/Instance-Synthesis/"}], "local cache": [{"id": "--tech-term-local-artifact-cache", "data": {"term": "local artifact cache"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "lint driver": [{"id": "--tech-term-lint-driver", "data": {"term": "lint driver"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "linearly": [{"id": "--tech-term-linearly", "data": {"term": "linearly"}, "address": "/Basic-Types/Arrays/"}], "lift": [{"id": "--tech-term-lifting", "data": {"term": "lifting"}, "address": "/Functors___-Monads-and--do--Notation/Lifting-Monads/"}], "library directory": [{"id": "--tech-term-library-directories", "data": {"term": "library directories"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "library": [{"id": "--tech-term-libraries", "data": {"term": "Libraries"}, "address": "/Source-Files-and-Modules/"}, {"id": "--tech-term-Libraries", "data": {"term": "Libraries"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "left fold": [{"id": "--tech-term-Left-folds", "data": {"term": "Left folds"}, "address": "/Basic-Types/Linked-Lists/"}], "left associative": [{"id": "--tech-term-Left-associative", "data": {"term": "Left-associative"}, "address": "/Notations-and-Macros/Custom-Operators/"}], "leading dot notation": [{"id": "--tech-term-leading-dot-notation", "data": {"term": "leading dot notation"}, "address": "/Terms/Identifiers/"}], "lazy evaluation": [{"id": "--tech-term-lazy-evaluation", "data": {"term": "lazy evaluation"}, "address": "/Basic-Types/Lazy-Computations/"}], "law": [{"id": "--tech-term-laws", "data": {"term": "laws"}, "address": "/Functors___-Monads-and--do--Notation/Laws/"}], "lake script": [{"id": "--tech-term-Lake-scripts", "data": {"term": "Lake scripts"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "lake home": [{"id": "--tech-term-Lake-home", "data": {"term": "Lake home"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "kleisli composition": [{"id": "--tech-term-Kleisli-composition", "data": {"term": "Kleisli composition"}, "address": "/Functors___-Monads-and--do--Notation/API-Reference/"}], "kind": [{"id": "--tech-term-kind", "data": {"term": "kind"}, "address": "/Elaboration-and-Compilation/"}], "kernel": [{"id": "--tech-term-kernel", "data": {"term": "kernel"}, "address": "/Elaboration-and-Compilation/"}], "iterator combinator": [{"id": "--tech-term-Combinators", "data": {"term": "Combinators"}, "address": "/Iterators/"}], "iterator": [{"id": "--tech-term-iterator", "data": {"term": "iterator"}, "address": "/Iterators/"}], "irrelevant": [{"id": "--tech-term-irrelevant", "data": {"term": "irrelevant"}, "address": "/The-Type-System/Inductive-Types/"}], "irreducible": [{"id": "--tech-term-Irreducible", "data": {"term": "Irreducible"}, "address": "/Definitions/Recursive-Definitions/"}], "interpolated string": [{"id": "--tech-term-interpolated-string", "data": {"term": "interpolated string"}, "address": "/Basic-Types/Strings/"}], "intensional": [{"id": "--tech-term-intensional", "data": {"term": "intensional"}, "address": "/The-Type-System/Functions/"}], "instance implicit": [{"id": "--tech-term-instance-implicit-next", "data": {"term": "instance-implicit"}, "address": "/Type-Classes/"}, {"id": "--tech-term-instance-implicit", "data": {"term": "instance-implicit"}, "address": "/Terms/Functions/"}], "instance": [{"id": "--tech-term-instances", "data": {"term": "instances"}, "address": "/Type-Classes/"}], "injection": [{"id": "--tech-term-injections", "data": {"term": "injections"}, "address": "/Basic-Types/Sum-Types/"}], "initialize": [{"id": "--tech-term-initialized", "data": {"term": "initialized"}, "address": "/Run-Time-Code/Foreign-Function-Interface/"}], "initialization": [{"id": "--tech-term-initialization", "data": {"term": "initialization"}, "address": "/Elaboration-and-Compilation/"}], "initial target": [{"id": "--tech-term-initial-targets", "data": {"term": "initial targets"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "info tree": [{"id": "--tech-term-info-trees", "data": {"term": "info trees"}, "address": "/Elaboration-and-Compilation/"}], "inductive type": [{"id": "--tech-term-Inductive-types", "data": {"term": "Inductive types"}, "address": "/The-Type-System/Inductive-Types/"}], "indexed family": [{"id": "--tech-term-indexed-families", "data": {"term": "indexed families"}, "address": "/The-Type-System/Inductive-Types/"}], "indexable": [{"id": "--tech-term-indexable", "data": {"term": "indexable"}, "address": "/The--grind--tactic/E___matching/"}], "index": [{"id": "--tech-term-indices", "data": {"term": "indices"}, "address": "/The-Type-System/Inductive-Types/"}], "incremental build": [{"id": "--tech-term-incremental-build", "data": {"term": "incremental build"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "inaccessible pattern": [{"id": "--tech-term-Inaccessible-patterns", "data": {"term": "Inaccessible patterns"}, "address": "/Terms/Pattern-Matching/"}], "inaccessible": [{"id": "--tech-term-inaccessible", "data": {"term": "inaccessible"}, "address": "/Tactic-Proofs/Reading-Proof-States/"}], "impredicative": [{"id": "--tech-term-impredicative", "data": {"term": "impredicative"}, "address": "/The-Type-System/Universes/"}], "import statement": [{"id": "--tech-term-import-statements", "data": {"term": "import statements"}, "address": "/Source-Files-and-Modules/"}], "import name": [{"id": "--tech-term-import-name", "data": {"term": "import name"}, "address": "/Source-Files-and-Modules/"}], "implicit": [{"id": "--tech-term-implicit", "data": {"term": "implicit"}, "address": "/Terms/Functions/"}], "identifier component": [{"id": "--tech-term-Identifier-components", "data": {"term": "Identifier components"}, "address": "/Source-Files-and-Modules/"}], "identifier capture": [{"id": "--tech-term-Identifier-capture", "data": {"term": "Identifier capture"}, "address": "/Notations-and-Macros/Macros/"}], "identifier": [{"id": "--tech-term-Identifiers", "data": {"term": "Identifiers"}, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "hygiene": [{"id": "--tech-term-hygienic", "data": {"term": "hygienic"}, "address": "/Notations-and-Macros/Macros/"}], "hole": [{"id": "--tech-term-hole", "data": {"term": "hole"}, "address": "/Terms/Holes/"}], "hoare triple": [{"id": "--tech-term-Hoare-triple", "data": {"term": "Hoare triple"}, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "hierarchical identifier": [{"id": "--tech-term-hierarchical-identifiers", "data": {"term": "hierarchical identifiers"}, "address": "/Source-Files-and-Modules/"}], "heterogeneous equality": [{"id": "--tech-term-Heterogeneous-equality", "data": {"term": "Heterogeneous equality"}, "address": "/Basic-Propositions/Propositional-Equality/"}], "header": [{"id": "--tech-term-header", "data": {"term": "header"}, "address": "/Definitions/Headers-and-Signatures/"}], "guillemet": [{"id": "--tech-term-guillemets", "data": {"term": "guillemets"}, "address": "/Source-Files-and-Modules/"}], "goal": [{"id": "--tech-term-goals", "data": {"term": "goals"}, "address": "/Tactic-Proofs/"}], "global instance": [{"id": "--tech-term-Global-instances", "data": {"term": "Global instances"}, "address": "/Type-Classes/Instance-Synthesis/"}], "glob": [{"id": "--tech-term-globs", "data": {"term": "globs"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "git dependency": [{"id": "--tech-term-Git-dependencies", "data": {"term": "Git dependencies"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "generation": [{"id": "--tech-term-generation", "data": {"term": "generation"}, "address": "/The--grind--tactic/E___matching/"}], "generalized field notation": [{"id": "--tech-term-generalized-field-notation", "data": {"term": "generalized field notation"}, "address": "/Terms/Function-Application/"}], "gap": [{"id": "--tech-term-gaps", "data": {"term": "gaps"}, "address": "/Basic-Types/Strings/"}], "gadget": [{"id": "--tech-term-gadgets", "data": {"term": "gadgets"}, "address": "/Type-Classes/Class-Declarations/"}], "functor": [{"id": "--tech-term-Functor", "data": {"term": "Functor"}, "address": "/Functors___-Monads-and--do--Notation/"}], "function type": [{"id": "--tech-term-function-types", "data": {"term": "function types"}, "address": "/The-Type-System/Functions/"}], "function abstraction": [{"id": "--tech-term-function-abstractions", "data": {"term": "function abstractions"}, "address": "/The-Type-System/Functions/"}], "function": [{"id": "--tech-term-Functions", "data": {"term": "Functions"}, "address": "/The-Type-System/Functions/"}], "framing": [{"id": "--tech-term-framing", "data": {"term": "framing"}, "address": "/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/"}], "frame": [{"id": "--tech-term-frame", "data": {"term": "frame"}, "address": "/The--mvcgen--tactic/Tutorial___-Verifying-Imperative-Programs-Using--mvcgen/"}], "forward rule": [{"id": "--tech-term-forward-rules", "data": {"term": "forward rules"}, "address": "/The--grind--tactic/Constraint-Propagation/"}], "force": [{"id": "--tech-term-forcing", "data": {"term": "forcing"}, "address": "/Basic-Types/Lazy-Computations/"}], "fixed prefix": [{"id": "--tech-term-fixed-prefix", "data": {"term": "fixed prefix"}, "address": "/Definitions/Recursive-Definitions/"}], "fixed parameter": [{"id": "--tech-term-fixed-parameter", "data": {"term": "fixed parameter"}, "address": "/Definitions/Recursive-Definitions/"}], "finite iterator": [{"id": "--tech-term-Finite", "data": {"term": "Finite"}, "address": "/Iterators/Iterator-Definitions/"}], "file header": [{"id": "--tech-term-file-header", "data": {"term": "file header"}, "address": "/Source-Files-and-Modules/"}], "file handle": [{"id": "--tech-term-File-Handles", "data": {"term": "File Handles"}, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "file": [{"id": "--tech-term-Files", "data": {"term": "Files"}, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "field resolution order": [{"id": "--tech-term-field-resolution-order", "data": {"term": "field resolution order"}, "address": "/The-Type-System/Inductive-Types/"}], "field notation": [{"id": "--tech-term-field-notation", "data": {"term": "field notation"}, "address": "/Terms/Function-Application/"}], "facet": [{"id": "--tech-term-facet", "data": {"term": "facet"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "external library": [{"id": "--tech-term-External-libraries", "data": {"term": "External libraries"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "extensional map": [{"id": "--tech-term-Extensional-maps", "data": {"term": "Extensional maps"}, "address": "/Basic-Types/Maps-and-Sets/"}], "extension": [{"id": "--tech-term-extensions", "data": {"term": "extensions"}, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "extended splice": [{"id": "--tech-term-extended-splices", "data": {"term": "extended splices"}, "address": "/Notations-and-Macros/Macros/"}], "expression": [{"id": "--tech-term-expressions", "data": {"term": "expressions"}, "address": "/The-Type-System/"}], "exposed": [{"id": "--tech-term-exposed", "data": {"term": "exposed"}, "address": "/Source-Files-and-Modules/"}], "exporting": [{"id": "--tech-term-Exporting", "data": {"term": "Exporting"}, "address": "/Namespaces-and-Sections/"}], "expected type's namespace": [{"id": "--tech-term-expected-type___s-namespace", "data": {"term": "expected type's namespace"}, "address": "/Terms/Identifiers/"}], "expansion": [{"id": "--tech-term-expansion", "data": {"term": "expansion"}, "address": "/Notations-and-Macros/Custom-Operators/"}], "executable": [{"id": "--tech-term-executables", "data": {"term": "Executables"}, "address": "/Source-Files-and-Modules/"}, {"id": "--tech-term-Executables", "data": {"term": "Executables"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "exception monad": [{"id": "--tech-term-Exception-monads", "data": {"term": "Exception monads"}, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "example": [{"id": "--tech-term-example", "data": {"term": "example"}, "address": "/Definitions/Example-Declarations/"}], "erasing": [{"id": "--tech-term-erasing", "data": {"term": "erasing"}, "address": "/Attributes/"}], "equivalence relation": [{"id": "--tech-term-equivalence-relation", "data": {"term": "equivalence relation"}, "address": "/The-Type-System/Quotients/"}], "equational lemma": [{"id": "--tech-term-equational-lemmas", "data": {"term": "equational lemmas"}, "address": "/Elaboration-and-Compilation/"}], "environment extension": [{"id": "--tech-term-environment-extensions", "data": {"term": "environment extensions"}, "address": "/Elaboration-and-Compilation/"}], "environment": [{"id": "--tech-term-environments", "data": {"term": "environments"}, "address": "/Elaboration-and-Compilation/"}], "enum inductive": [{"id": "--tech-term-enum-inductive", "data": {"term": "enum inductive"}, "address": "/The-Type-System/Inductive-Types/"}], "ellipsi": [{"id": "--tech-term-ellipsis", "data": {"term": "ellipsis"}, "address": "/Terms/Function-Application/"}], "elaborator": [{"id": "--tech-term-Elaboration", "data": {"term": "elaborators"}, "address": "/Elaboration-and-Compilation/"}, {"id": "--tech-term-elaborators", "data": {"term": "elaborators"}, "address": "/Notations-and-Macros/Elaborators/"}], "elaboration": [{"id": "--tech-term-elaboration", "data": {"term": "elaboration"}, "address": "/Elaboration-and-Compilation/"}], "e matching instance": [{"id": "--tech-term-instance", "data": {"term": "instance"}, "address": "/The--grind--tactic/E___matching/"}], "e matching": [{"id": "--tech-term-E-matching", "data": {"term": "E-matching"}, "address": "/The--grind--tactic/E___matching/"}], "dynamic array": [{"id": "--tech-term-dynamic-arrays", "data": {"term": "dynamic arrays"}, "address": "/Basic-Types/Arrays/"}], "downward propagation": [{"id": "--tech-term-downward-propagation", "data": {"term": "downward propagation"}, "address": "/The--grind--tactic/Constraint-Propagation/"}], "domain": [{"id": "--tech-term-domain", "data": {"term": "domain"}, "address": "/The-Type-System/Functions/"}], "documentation comment": [{"id": "--tech-term-Documentation-comments", "data": {"term": "Documentation comments"}, "address": "/Definitions/Modifiers/"}], "documentation": [{"id": "--tech-term-documentation", "data": {"term": "documentation"}, "address": "/Source-Files-and-Modules/"}], "do notation": [{"id": "--tech-term-do-notation", "data": {"term": "do-notation"}, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}], "do item": [{"id": "--tech-term-do-items", "data": {"term": "do items"}, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}], "discriminant refinement": [{"id": "--tech-term-discriminant-refinement", "data": {"term": "discriminant refinement"}, "address": "/Terms/Pattern-Matching/"}], "directory": [{"id": "--tech-term-Directories", "data": {"term": "Directories"}, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "direct dependency": [{"id": "--tech-term-direct-dependencies", "data": {"term": "direct dependencies"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "dictionary": [{"id": "--tech-term-dictionaries", "data": {"term": "dictionaries"}, "address": "/Basic-Types/Maps-and-Sets/"}], "diamond": [{"id": "--tech-term-Diamonds", "data": {"term": "Diamonds"}, "address": "/Type-Classes/Instance-Synthesis/"}], "deriving handler": [{"id": "--tech-term-deriving-handlers", "data": {"term": "deriving handlers"}, "address": "/Type-Classes/Deriving-Instances/"}], "deriving": [{"id": "--tech-term-deriving", "data": {"term": "deriving"}, "address": "/Type-Classes/Deriving-Instances/"}], "derivation": [{"id": "--tech-term-derivation", "data": {"term": "derivation"}, "address": "/The-Type-System/"}], "dependent sum": [{"id": "--tech-term-dependent-sums", "data": {"term": "dependent sums"}, "address": "/Basic-Types/Tuples/"}], "dependent product": [{"id": "--tech-term-dependent-products", "data": {"term": "dependent products"}, "address": "/The-Type-System/Functions/"}], "dependent pair": [{"id": "--tech-term-Dependent-pairs", "data": {"term": "Dependent pairs"}, "address": "/Basic-Types/Tuples/"}], "dependent map": [{"id": "--tech-term-dependent-map", "data": {"term": "dependent map"}, "address": "/Basic-Types/Maps-and-Sets/"}], "dependent coercion": [{"id": "--tech-term-Dependent-coercions", "data": {"term": "Dependent coercions"}, "address": "/Coercions/Coercing-Between-Types/"}], "dependent": [{"id": "--tech-term-Dependent", "data": {"term": "Dependent"}, "address": "/The-Type-System/Functions/"}], "delaborator": [{"id": "--tech-term-delaborators", "data": {"term": "delaborators"}, "address": "/Notations-and-Macros/Extending-Lean___s-Output/"}], "definitional equality": [{"id": "--tech-term-definitional-equality", "data": {"term": "definitional equality"}, "address": "/The-Type-System/"}], "defined constant": [{"id": "--tech-term-defined-constants", "data": {"term": "defined constants"}, "address": "/The-Type-System/"}], "default toolchain": [{"id": "--tech-term-default-toolchain", "data": {"term": "default toolchain"}, "address": "/Build-Tools-and-Distribution/Managing-Toolchains-with-Elan/"}], "default target": [{"id": "--tech-term-default-targets", "data": {"term": "default targets"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "default simp set": [{"id": "--tech-term-default-simp-set", "data": {"term": "default simp set"}, "address": "/The-Simplifier/Simp-sets/"}], "default instance": [{"id": "--tech-term-default-instances", "data": {"term": "default instances"}, "address": "/Type-Classes/Instance-Synthesis/"}], "default facet": [{"id": "--tech-term-default-facet", "data": {"term": "default facet"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "decreasing parameter": [{"id": "--tech-term-decreasing-parameter", "data": {"term": "decreasing parameter"}, "address": "/Definitions/Recursive-Definitions/"}], "declaration name": [{"id": "--tech-term-declaration-name", "data": {"term": "declaration name"}, "address": "/Definitions/Headers-and-Signatures/"}], "decidable": [{"id": "--tech-term-decidable", "data": {"term": "decidable"}, "address": "/Type-Classes/Basic-Classes/"}], "de bruijn indice": [{"id": "--tech-term-de-Bruijn-indices", "data": {"term": "de Bruijn indices"}, "address": "/The--grind--tactic/E___matching/"}], "cycle": [{"id": "--tech-term-cycles", "data": {"term": "cycles"}, "address": "/Type-Classes/Instance-Synthesis/"}], "custom toolchain name": [{"id": "--tech-term-custom-toolchain-name", "data": {"term": "custom toolchain name"}, "address": "/Build-Tools-and-Distribution/Managing-Toolchains-with-Elan/"}], "custom target": [{"id": "--tech-term-Custom-targets", "data": {"term": "Custom targets"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "custom simp set": [{"id": "--tech-term-Custom-simp-sets", "data": {"term": "Custom simp sets"}, "address": "/The-Simplifier/Simp-sets/"}], "custom eliminator": [{"id": "--tech-term-Custom-eliminators", "data": {"term": "Custom eliminators"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "currying": [{"id": "--tech-term-currying", "data": {"term": "currying"}, "address": "/The-Type-System/Functions/"}], "current namespace": [{"id": "--tech-term-current-namespace", "data": {"term": "current namespace"}, "address": "/Namespaces-and-Sections/"}, {"id": "--tech-term-current-namespace-next", "data": {"term": "current namespace"}, "address": "/Namespaces-and-Sections/"}], "current do block": [{"id": "--tech-term-current-do-block", "data": {"term": "current do block"}, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}], "cumulative": [{"id": "--tech-term-cumulative", "data": {"term": "cumulative"}, "address": "/The-Type-System/Universes/"}], "coverage": [{"id": "--tech-term-coverage", "data": {"term": "coverage"}, "address": "/The--grind--tactic/E___matching/"}], "cover": [{"id": "--tech-term-cover", "data": {"term": "cover"}, "address": "/The--grind--tactic/E___matching/"}], "course of values recursion": [{"id": "--tech-term-course-of-values-recursion", "data": {"term": "course-of-values recursion"}, "address": "/Definitions/Recursive-Definitions/"}], "consumer": [{"id": "--tech-term-Consumers", "data": {"term": "Consumers"}, "address": "/Iterators/"}], "constructor": [{"id": "--tech-term-constructors", "data": {"term": "constructors"}, "address": "/The-Type-System/Inductive-Types/"}], "constraint propagation": [{"id": "--tech-term-Constraint-propagation", "data": {"term": "Constraint propagation"}, "address": "/The--grind--tactic/Constraint-Propagation/"}], "conjunctive": [{"id": "--tech-term-conjunctive", "data": {"term": "conjunctive"}, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "congruence closure": [{"id": "--tech-term-Congruence-closure", "data": {"term": "Congruence closure"}, "address": "/The--grind--tactic/Congruence-Closure/"}], "configure package": [{"id": "--tech-term-Configuring", "data": {"term": "Configuring"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "configuration item": [{"id": "--tech-term-configuration-items", "data": {"term": "configuration items"}, "address": "/Tactic-Proofs/The-Tactic-Language/"}], "command elaborator": [{"id": "--tech-term-Command-elaborators", "data": {"term": "Command elaborators"}, "address": "/Notations-and-Macros/Elaborators/"}], "command": [{"id": "--tech-term-commands", "data": {"term": "commands"}, "address": "/Source-Files-and-Modules/"}], "coercion insertion": [{"id": "--tech-term-coercion-insertion", "data": {"term": "coercion insertion"}, "address": "/Coercions/Coercion-Insertion/"}], "coercion": [{"id": "--tech-term-coercion", "data": {"term": "coercion"}, "address": "/Coercions/"}], "codomain": [{"id": "--tech-term-codomain", "data": {"term": "codomain"}, "address": "/The-Type-System/Functions/"}], "class abbreviation": [{"id": "--tech-term-class-abbreviations", "data": {"term": "class abbreviations"}, "address": "/Type-Classes/Class-Declarations/"}], "choice node": [{"id": "--tech-term-choice-node", "data": {"term": "choice node"}, "address": "/Elaboration-and-Compilation/"}], "channel": [{"id": "--tech-term-channel", "data": {"term": "channel"}, "address": "/Build-Tools-and-Distribution/Managing-Toolchains-with-Elan/"}], "cast": [{"id": "--tech-term-casts", "data": {"term": "casts"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "case label": [{"id": "--tech-term-case-label", "data": {"term": "case label"}, "address": "/Tactic-Proofs/Reading-Proof-States/"}], "canonical": [{"id": "--tech-term-canonical", "data": {"term": "canonical"}, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "candidate measure": [{"id": "--tech-term-Candidate-measures", "data": {"term": "Candidate measures"}, "address": "/Definitions/Recursive-Definitions/"}], "cancel": [{"id": "--tech-term-cancelled", "data": {"term": "cancelled"}, "address": "/IO/Tasks-and-Threads/"}], "cache scope": [{"id": "--tech-term-cache-scope", "data": {"term": "cache scope"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "build directory": [{"id": "--tech-term-build-directory", "data": {"term": "build directory"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "build": [{"id": "--tech-term-build", "data": {"term": "build"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "buffered": [{"id": "--tech-term-buffered", "data": {"term": "buffered"}, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "bracketed binder": [{"id": "--tech-term-bracketed-binders", "data": {"term": "bracketed binders"}, "address": "/Definitions/Headers-and-Signatures/"}], "boxed": [{"id": "--tech-term-Boxed", "data": {"term": "Boxed"}, "address": "/Run-Time-Code/Boxing/"}], "borrowed": [{"id": "--tech-term-borrowed", "data": {"term": "borrowed"}, "address": "/Run-Time-Code/Foreign-Function-Interface/"}], "binary directory": [{"id": "--tech-term-binary-directory", "data": {"term": "binary directory"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "basic termination measure": [{"id": "--tech-term-basic-termination-measures", "data": {"term": "basic termination measures"}, "address": "/Definitions/Recursive-Definitions/"}], "axiom": [{"id": "--tech-term-Axioms", "data": {"term": "Axioms"}, "address": "/Axioms/"}], "auxiliary matching function": [{"id": "--tech-term-auxiliary-matching-functions", "data": {"term": "auxiliary matching functions"}, "address": "/Elaboration-and-Compilation/"}], "automatic parameter": [{"id": "--tech-term-automatic-parameters", "data": {"term": "automatic parameters"}, "address": "/Definitions/Headers-and-Signatures/"}], "automatic implicit parameter": [{"id": "--tech-term-automatic-implicit-parameters", "data": {"term": "automatic implicit parameters"}, "address": "/Definitions/Headers-and-Signatures/"}], "attribute instance": [{"id": "--tech-term-attribute-instances", "data": {"term": "attribute instances"}, "address": "/Attributes/"}], "attribute": [{"id": "--tech-term-Attributes", "data": {"term": "Attributes"}, "address": "/Attributes/"}], "atomic": [{"id": "--tech-term-atomic", "data": {"term": "atomic"}, "address": "/Tactic-Proofs/Reading-Proof-States/"}], "atom": [{"id": "--tech-term-Atoms", "data": {"term": "Atoms"}, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "associativity": [{"id": "--tech-term-associativity", "data": {"term": "associativity"}, "address": "/Notations-and-Macros/Custom-Operators/"}], "associative array": [{"id": "--tech-term-associative-arrays", "data": {"term": "associative arrays"}, "address": "/Basic-Types/Maps-and-Sets/"}], "artifact": [{"id": "--tech-term-artifact", "data": {"term": "artifact"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "applicative functor": [{"id": "--tech-term-Applicative-functors", "data": {"term": "Applicative functors"}, "address": "/Functors___-Monads-and--do--Notation/"}], "application binary interface": [{"id": "--tech-term-Application-Binary-Interface", "data": {"term": "Application Binary Interface"}, "address": "/Run-Time-Code/Foreign-Function-Interface/"}], "antiquotation": [{"id": "--tech-term-antiquotations", "data": {"term": "antiquotations"}, "address": "/Notations-and-Macros/Macros/"}], "anonymous constructor syntax": [{"id": "--tech-term-anonymous-constructor-syntax", "data": {"term": "anonymous constructor syntax"}, "address": "/The-Type-System/Inductive-Types/"}], "adequacy lemma": [{"id": "--tech-term-Adequacy-lemmas", "data": {"term": "Adequacy lemmas"}, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "ad hoc polymorphism": [{"id": "--tech-term-ad-hoc-polymorphism", "data": {"term": "ad-hoc polymorphism"}, "address": "/Type-Classes/"}], "absolute path": [{"id": "--tech-term-Absolute-paths", "data": {"term": "Absolute paths"}, "address": "/IO/Files___-File-Handles___-and-Streams/"}], ".olean file": [{"id": "--tech-term-___olean-file", "data": {"term": ".olean file"}, "address": "/Elaboration-and-Compilation/"}]}}, "Verso.Genre.Manual.doc.tactic.conv": {"title": "Conversion Tactics", "description": "Conversion Tactics", "contents": {"Lean.Parser.Tactic.Conv.«conv·._»": [{"id": "Lean___Parser___Tactic___Conv____FLQQ_conv________FLQQ_-next", "data": {"userName": "· ..."}, "address": "/Tactic-Proofs/Targeted-Rewriting-with--conv/"}, {"id": "Lean___Parser___Tactic___Conv____FLQQ_conv________FLQQ_", "data": {"userName": "· ..."}, "address": "/Tactic-Proofs/Targeted-Rewriting-with--conv/"}], "Lean.Parser.Tactic.Conv.«conv_<;>_»": [{"id": "Lean___Parser___Tactic___Conv____FLQQ_conv__LT__SEMI__GT___FLQQ_", "data": {"userName": "<;>"}, "address": "/Tactic-Proofs/Targeted-Rewriting-with--conv/"}], "Lean.Parser.Tactic.Conv.«convNext__=>_»": [{"id": "Lean___Parser___Tactic___Conv____FLQQ_convNext______GT___FLQQ_", "data": {"userName": "next ... => ..."}, "address": "/Tactic-Proofs/Targeted-Rewriting-with--conv/"}], "Lean.Parser.Tactic.Conv.zeta": [{"id": "Lean___Parser___Tactic___Conv___zeta", "data": {"userName": "zeta"}, "address": "/Tactic-Proofs/Targeted-Rewriting-with--conv/"}], "Lean.Parser.Tactic.Conv.whnf": [{"id": "Lean___Parser___Tactic___Conv___whnf", "data": {"userName": "whnf"}, "address": "/Tactic-Proofs/Targeted-Rewriting-with--conv/"}], "Lean.Parser.Tactic.Conv.unfold": [{"id": "Lean___Parser___Tactic___Conv___unfold", "data": {"userName": "unfold"}, "address": "/Tactic-Proofs/Targeted-Rewriting-with--conv/"}], "Lean.Parser.Tactic.Conv.skip": [{"id": "Lean___Parser___Tactic___Conv___skip", "data": {"userName": "skip"}, "address": "/Tactic-Proofs/Targeted-Rewriting-with--conv/"}], "Lean.Parser.Tactic.Conv.simpMatch": [{"id": "Lean___Parser___Tactic___Conv___simpMatch", "data": {"userName": "simp_match"}, "address": "/Tactic-Proofs/Targeted-Rewriting-with--conv/"}], "Lean.Parser.Tactic.Conv.simp": [{"id": "Lean___Parser___Tactic___Conv___simp", "data": {"userName": "simp"}, "address": "/Tactic-Proofs/Targeted-Rewriting-with--conv/"}], "Lean.Parser.Tactic.Conv.rhs": [{"id": "Lean___Parser___Tactic___Conv___rhs", "data": {"userName": "rhs"}, "address": "/Tactic-Proofs/Targeted-Rewriting-with--conv/"}], "Lean.Parser.Tactic.Conv.rewrite": [{"id": "Lean___Parser___Tactic___Conv___rewrite", "data": {"userName": "rewrite"}, "address": "/Tactic-Proofs/Targeted-Rewriting-with--conv/"}], "Lean.Parser.Tactic.Conv.reduce": [{"id": "Lean___Parser___Tactic___Conv___reduce", "data": {"userName": "reduce"}, "address": "/Tactic-Proofs/Targeted-Rewriting-with--conv/"}], "Lean.Parser.Tactic.Conv.pattern": [{"id": "Lean___Parser___Tactic___Conv___pattern", "data": {"userName": "pattern"}, "address": "/Tactic-Proofs/Targeted-Rewriting-with--conv/"}], "Lean.Parser.Tactic.Conv.paren": [{"id": "Lean___Parser___Tactic___Conv___paren", "data": {"userName": "( ... )"}, "address": "/Tactic-Proofs/Targeted-Rewriting-with--conv/"}], "Lean.Parser.Tactic.Conv.normCast": [{"id": "Lean___Parser___Tactic___Conv___normCast", "data": {"userName": "norm_cast"}, "address": "/Tactic-Proofs/Targeted-Rewriting-with--conv/"}], "Lean.Parser.Tactic.Conv.nestedTacticCore": [{"id": "Lean___Parser___Tactic___Conv___nestedTacticCore", "data": {"userName": "tactic'"}, "address": "/Tactic-Proofs/Targeted-Rewriting-with--conv/"}], "Lean.Parser.Tactic.Conv.nestedTactic": [{"id": "Lean___Parser___Tactic___Conv___nestedTactic", "data": {"userName": "tactic"}, "address": "/Tactic-Proofs/Targeted-Rewriting-with--conv/"}], "Lean.Parser.Tactic.Conv.nestedConv": [{"id": "Lean___Parser___Tactic___Conv___nestedConv", "data": {"userName": "{ ... }"}, "address": "/Tactic-Proofs/Targeted-Rewriting-with--conv/"}], "Lean.Parser.Tactic.Conv.lhs": [{"id": "Lean___Parser___Tactic___Conv___lhs", "data": {"userName": "lhs"}, "address": "/Tactic-Proofs/Targeted-Rewriting-with--conv/"}], "Lean.Parser.Tactic.Conv.fun": [{"id": "Lean___Parser___Tactic___Conv___fun", "data": {"userName": "fun"}, "address": "/Tactic-Proofs/Targeted-Rewriting-with--conv/"}], "Lean.Parser.Tactic.Conv.focus": [{"id": "Lean___Parser___Tactic___Conv___focus", "data": {"userName": "focus"}, "address": "/Tactic-Proofs/Targeted-Rewriting-with--conv/"}], "Lean.Parser.Tactic.Conv.first": [{"id": "Lean___Parser___Tactic___Conv___first", "data": {"userName": "first"}, "address": "/Tactic-Proofs/Targeted-Rewriting-with--conv/"}], "Lean.Parser.Tactic.Conv.failIfSuccess": [{"id": "Lean___Parser___Tactic___Conv___failIfSuccess", "data": {"userName": "fail_if_success"}, "address": "/Tactic-Proofs/Targeted-Rewriting-with--conv/"}], "Lean.Parser.Tactic.Conv.ext": [{"id": "Lean___Parser___Tactic___Conv___ext", "data": {"userName": "ext"}, "address": "/Tactic-Proofs/Targeted-Rewriting-with--conv/"}], "Lean.Parser.Tactic.Conv.enter": [{"id": "Lean___Parser___Tactic___Conv___enter", "data": {"userName": "enter"}, "address": "/Tactic-Proofs/Targeted-Rewriting-with--conv/"}], "Lean.Parser.Tactic.Conv.dsimp": [{"id": "Lean___Parser___Tactic___Conv___dsimp", "data": {"userName": "dsimp"}, "address": "/Tactic-Proofs/Targeted-Rewriting-with--conv/"}], "Lean.Parser.Tactic.Conv.delta": [{"id": "Lean___Parser___Tactic___Conv___delta", "data": {"userName": "delta"}, "address": "/Tactic-Proofs/Targeted-Rewriting-with--conv/"}], "Lean.Parser.Tactic.Conv.convTry_": [{"id": "Lean___Parser___Tactic___Conv___convTry_", "data": {"userName": "try"}, "address": "/Tactic-Proofs/Targeted-Rewriting-with--conv/"}], "Lean.Parser.Tactic.Conv.convTrace_state": [{"id": "Lean___Parser___Tactic___Conv___convTrace_state", "data": {"userName": "trace_state"}, "address": "/Tactic-Proofs/Targeted-Rewriting-with--conv/"}], "Lean.Parser.Tactic.Conv.convRw__": [{"id": "Lean___Parser___Tactic___Conv___convRw__", "data": {"userName": "rw"}, "address": "/Tactic-Proofs/Targeted-Rewriting-with--conv/"}], "Lean.Parser.Tactic.Conv.convRight": [{"id": "Lean___Parser___Tactic___Conv___convRight", "data": {"userName": "right"}, "address": "/Tactic-Proofs/Targeted-Rewriting-with--conv/"}], "Lean.Parser.Tactic.Conv.convRfl": [{"id": "Lean___Parser___Tactic___Conv___convRfl", "data": {"userName": "rfl"}, "address": "/Tactic-Proofs/Targeted-Rewriting-with--conv/"}], "Lean.Parser.Tactic.Conv.convRepeat_": [{"id": "Lean___Parser___Tactic___Conv___convRepeat_", "data": {"userName": "repeat"}, "address": "/Tactic-Proofs/Targeted-Rewriting-with--conv/"}], "Lean.Parser.Tactic.Conv.convLeft": [{"id": "Lean___Parser___Tactic___Conv___convLeft", "data": {"userName": "left"}, "address": "/Tactic-Proofs/Targeted-Rewriting-with--conv/"}], "Lean.Parser.Tactic.Conv.convIntro___": [{"id": "Lean___Parser___Tactic___Conv___convIntro___", "data": {"userName": "intro"}, "address": "/Tactic-Proofs/Targeted-Rewriting-with--conv/"}], "Lean.Parser.Tactic.Conv.convErw__": [{"id": "Lean___Parser___Tactic___Conv___convErw__", "data": {"userName": "erw"}, "address": "/Tactic-Proofs/Targeted-Rewriting-with--conv/"}], "Lean.Parser.Tactic.Conv.convDone": [{"id": "Lean___Parser___Tactic___Conv___convDone", "data": {"userName": "done"}, "address": "/Tactic-Proofs/Targeted-Rewriting-with--conv/"}], "Lean.Parser.Tactic.Conv.convConvSeq": [{"id": "Lean___Parser___Tactic___Conv___convConvSeq", "data": {"userName": "conv => ..."}, "address": "/Tactic-Proofs/Targeted-Rewriting-with--conv/"}], "Lean.Parser.Tactic.Conv.convArgs": [{"id": "Lean___Parser___Tactic___Conv___convArgs", "data": {"userName": "args"}, "address": "/Tactic-Proofs/Targeted-Rewriting-with--conv/"}], "Lean.Parser.Tactic.Conv.convApply_": [{"id": "Lean___Parser___Tactic___Conv___convApply_", "data": {"userName": "apply"}, "address": "/Tactic-Proofs/Targeted-Rewriting-with--conv/"}], "Lean.Parser.Tactic.Conv.congr": [{"id": "Lean___Parser___Tactic___Conv___congr", "data": {"userName": "congr"}, "address": "/Tactic-Proofs/Targeted-Rewriting-with--conv/"}], "Lean.Parser.Tactic.Conv.change": [{"id": "Lean___Parser___Tactic___Conv___change", "data": {"userName": "change"}, "address": "/Tactic-Proofs/Targeted-Rewriting-with--conv/"}], "Lean.Parser.Tactic.Conv.case'": [{"id": "Lean___Parser___Tactic___Conv___case___", "data": {"userName": "case' ... => ..."}, "address": "/Tactic-Proofs/Targeted-Rewriting-with--conv/"}], "Lean.Parser.Tactic.Conv.case": [{"id": "Lean___Parser___Tactic___Conv___case", "data": {"userName": "case ... => ..."}, "address": "/Tactic-Proofs/Targeted-Rewriting-with--conv/"}], "Lean.Parser.Tactic.Conv.arg": [{"id": "Lean___Parser___Tactic___Conv___arg", "data": {"userName": "arg [@]i"}, "address": "/Tactic-Proofs/Targeted-Rewriting-with--conv/"}], "Lean.Parser.Tactic.Conv.anyGoals": [{"id": "Lean___Parser___Tactic___Conv___anyGoals", "data": {"userName": "any_goals"}, "address": "/Tactic-Proofs/Targeted-Rewriting-with--conv/"}], "Lean.Parser.Tactic.Conv.allGoals": [{"id": "Lean___Parser___Tactic___Conv___allGoals", "data": {"userName": "all_goals"}, "address": "/Tactic-Proofs/Targeted-Rewriting-with--conv/"}]}}, "Verso.Genre.Manual.doc.tactic": {"title": "Tactic Documentation", "description": "Tactic Documentation", "contents": {"«tacticBy_cases_:_»": [{"id": "by_cases", "data": {"userName": "by_cases"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "tacticSimp_wf": [{"id": "simp_wf", "data": {"userName": "simp_wf"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "tacticGet_elem_tactic_trivial": [{"id": "get_elem_tactic_trivial", "data": {"userName": "get_elem_tactic_trivial"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "tacticGet_elem_tactic": [{"id": "get_elem_tactic", "data": {"userName": "get_elem_tactic"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "tacticFunext___": [{"id": "funext-next", "data": {"userName": "funext"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "tacticDecreasing_with_": [{"id": "decreasing_with", "data": {"userName": "decreasing_with"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "tacticDecreasing_trivial": [{"id": "decreasing_trivial", "data": {"userName": "decreasing_trivial"}, "address": "/Definitions/Recursive-Definitions/"}], "tacticDecreasing_tactic": [{"id": "decreasing_tactic", "data": {"userName": "decreasing_tactic"}, "address": "/Definitions/Recursive-Definitions/"}], "Lean.solveTactic": [{"id": "solve", "data": {"userName": "solve"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.cdot": [{"id": "___", "data": {"userName": "Lean.cdot"}, "address": "/Tactic-Proofs/The-Tactic-Language/"}], "Lean.calcTactic": [{"id": "calc", "data": {"userName": "calc"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.«tactic_<;>_»": [{"id": "_LT__SEMI__GT_", "data": {"userName": "<;>"}, "address": "/Tactic-Proofs/The-Tactic-Language/"}], "Lean.Parser.Tactic.«tacticNomatch_,,»": [{"id": "nomatch", "data": {"userName": "nomatch"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.«tacticNext_=>_»": [{"id": "next", "data": {"userName": "next"}, "address": "/Tactic-Proofs/The-Tactic-Language/"}], "Lean.Parser.Tactic.«tacticExists_,,»": [{"id": "exists", "data": {"userName": "exists"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.withUnfoldingAll": [{"id": "with_unfolding_all-next", "data": {"userName": "with_unfolding_all"}, "address": "/Tactic-Proofs/Tactic-Reference/"}, {"id": "with_unfolding_all", "data": {"userName": "with_unfolding_all"}, "address": "/Tactic-Proofs/The-Tactic-Language/"}], "Lean.Parser.Tactic.withReducibleAndInstances": [{"id": "with_reducible_and_instances", "data": {"userName": "with_reducible_and_instances"}, "address": "/Tactic-Proofs/The-Tactic-Language/"}, {"id": "with_reducible_and_instances-next", "data": {"userName": "with_reducible_and_instances"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.withReducible": [{"id": "with_reducible-next", "data": {"userName": "with_reducible"}, "address": "/Tactic-Proofs/Tactic-Reference/"}, {"id": "with_reducible", "data": {"userName": "with_reducible"}, "address": "/Tactic-Proofs/The-Tactic-Language/"}], "Lean.Parser.Tactic.unfold": [{"id": "unfold", "data": {"userName": "unfold"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.traceState": [{"id": "trace_state", "data": {"userName": "trace_state"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.traceMessage": [{"id": "trace", "data": {"userName": "trace"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.tacticUnhygienic_": [{"id": "unhygienic", "data": {"userName": "unhygienic"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.tacticTry_": [{"id": "try", "data": {"userName": "try"}, "address": "/Tactic-Proofs/The-Tactic-Language/"}], "Lean.Parser.Tactic.tacticTrivial": [{"id": "trivial", "data": {"userName": "trivial"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.tacticSuffices_": [{"id": "suffices", "data": {"userName": "suffices"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.tacticStop_": [{"id": "stop", "data": {"userName": "stop"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.tacticSorry": [{"id": "sorry", "data": {"userName": "sorry"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.tacticSimpa?_": [{"id": "simpa___-next", "data": {"userName": "simpa?"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.tacticSimpa?!_": [{"id": "simpa______", "data": {"userName": "simpa?!"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.tacticSimpa!_": [{"id": "simpa___", "data": {"userName": "simpa!"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.tacticSimp_all?!_": [{"id": "simp_all______", "data": {"userName": "simp_all?!"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.tacticSimp?!_": [{"id": "simp______", "data": {"userName": "simp?!"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.tacticRwa__": [{"id": "rwa", "data": {"userName": "rwa"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.tacticRw_mod_cast___": [{"id": "rw_mod_cast", "data": {"userName": "rw_mod_cast"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.tacticRfl'": [{"id": "rfl___", "data": {"userName": "rfl'"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.tacticRfl": [{"id": "rfl", "data": {"userName": "rfl"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.tacticRepeat_": [{"id": "repeat", "data": {"userName": "repeat"}, "address": "/Tactic-Proofs/The-Tactic-Language/"}], "Lean.Parser.Tactic.tacticNorm_cast__": [{"id": "norm_cast", "data": {"userName": "norm_cast"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.tacticNofun": [{"id": "nofun", "data": {"userName": "nofun"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.tacticLet__": [{"id": "let", "data": {"userName": "let"}, "address": "/Tactic-Proofs/The-Tactic-Language/"}], "Lean.Parser.Tactic.tacticLetI__": [{"id": "letI", "data": {"userName": "letI"}, "address": "/Tactic-Proofs/The-Tactic-Language/"}], "Lean.Parser.Tactic.tacticLet'__": [{"id": "let___", "data": {"userName": "let'"}, "address": "/Tactic-Proofs/The-Tactic-Language/"}], "Lean.Parser.Tactic.tacticIterate____": [{"id": "iterate", "data": {"userName": "iterate"}, "address": "/Tactic-Proofs/The-Tactic-Language/"}], "Lean.Parser.Tactic.tacticInfer_instance": [{"id": "infer_instance", "data": {"userName": "infer_instance"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.tacticHave__": [{"id": "have-next", "data": {"userName": "have"}, "address": "/Tactic-Proofs/The-Tactic-Language/"}, {"id": "have", "data": {"userName": "have"}, "address": "/Tactic-Proofs/The-Tactic-Language/"}], "Lean.Parser.Tactic.tacticHave'": [{"id": "have___", "data": {"userName": "have'"}, "address": "/Tactic-Proofs/The-Tactic-Language/"}], "Lean.Parser.Tactic.tacticExfalso": [{"id": "exfalso", "data": {"userName": "exfalso"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.tacticExact_mod_cast_": [{"id": "exact_mod_cast", "data": {"userName": "exact_mod_cast"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.tacticErw___": [{"id": "erw", "data": {"userName": "erw"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.tacticDsimp?!_": [{"id": "dsimp______", "data": {"userName": "dsimp?!"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.tacticBv_omega": [{"id": "bv_omega", "data": {"userName": "bv_omega"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.tacticAssumption_mod_cast_": [{"id": "assumption_mod_cast", "data": {"userName": "assumption_mod_cast"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.tacticApply_mod_cast_": [{"id": "apply_mod_cast", "data": {"userName": "apply_mod_cast"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.tacticAnd_intros": [{"id": "and_intros", "data": {"userName": "and_intros"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.tacticAdmit": [{"id": "admit", "data": {"userName": "admit"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.tacticAc_nf_": [{"id": "ac_nf", "data": {"userName": "ac_nf"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.tacIfThenElse": [{"id": "if-_________-then-_________-else-_________", "data": {"userName": "Lean.Parser.Tactic.tacIfThenElse"}, "address": "/Tactic-Proofs/The-Tactic-Language/"}], "Lean.Parser.Tactic.tacDepIfThenElse": [{"id": "if-h-___-_________-then-_________-else-_________", "data": {"userName": "Lean.Parser.Tactic.tacDepIfThenElse"}, "address": "/Tactic-Proofs/The-Tactic-Language/"}], "Lean.Parser.Tactic.symmSaturate": [{"id": "symm_saturate", "data": {"userName": "symm_saturate"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.symm": [{"id": "symm", "data": {"userName": "symm"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.substVars": [{"id": "subst_vars", "data": {"userName": "subst_vars"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.substEqs": [{"id": "subst_eqs", "data": {"userName": "subst_eqs"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.subst": [{"id": "subst", "data": {"userName": "subst"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.split": [{"id": "split", "data": {"userName": "split"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.specialize": [{"id": "specialize", "data": {"userName": "specialize"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.solveByElim": [{"id": "solve_by_elim", "data": {"userName": "solve_by_elim"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.sleep": [{"id": "sleep", "data": {"userName": "sleep"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.skip": [{"id": "skip", "data": {"userName": "skip"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.simpa": [{"id": "simpa", "data": {"userName": "simpa"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.simpTrace": [{"id": "simp___-next", "data": {"userName": "simp?"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.simpAutoUnfold": [{"id": "simp___", "data": {"userName": "simp!"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.simpArithBang": [{"id": "simp_arith___", "data": {"userName": "simp_arith!"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.simpArith": [{"id": "simp_arith", "data": {"userName": "simp_arith"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.simpAllTrace": [{"id": "simp_all___-next", "data": {"userName": "simp_all?"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.simpAllAutoUnfold": [{"id": "simp_all___", "data": {"userName": "simp_all!"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.simpAllArithBang": [{"id": "simp_all_arith___", "data": {"userName": "simp_all_arith!"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.simpAllArith": [{"id": "simp_all_arith", "data": {"userName": "simp_all_arith"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.simpAll": [{"id": "simp_all", "data": {"userName": "simp_all"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.simp": [{"id": "simp", "data": {"userName": "simp"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.showTerm": [{"id": "show_term", "data": {"userName": "show_term"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.show": [{"id": "show", "data": {"userName": "show"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.set_option": [{"id": "set_option", "data": {"userName": "Lean.Parser.Tactic.set_option"}, "address": "/Tactic-Proofs/The-Tactic-Language/"}], "Lean.Parser.Tactic.rwSeq": [{"id": "rw", "data": {"userName": "rw"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.runTac": [{"id": "run_tac", "data": {"userName": "run_tac"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.rotateRight": [{"id": "rotate_right", "data": {"userName": "rotate_right"}, "address": "/Tactic-Proofs/The-Tactic-Language/"}], "Lean.Parser.Tactic.rotateLeft": [{"id": "rotate_left", "data": {"userName": "rotate_left"}, "address": "/Tactic-Proofs/The-Tactic-Language/"}], "Lean.Parser.Tactic.rintro": [{"id": "rintro", "data": {"userName": "rintro"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.right": [{"id": "right", "data": {"userName": "right"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.rewrites?": [{"id": "rw___", "data": {"userName": "rw?"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.rewriteSeq": [{"id": "rewrite", "data": {"userName": "rewrite"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.revert": [{"id": "revert", "data": {"userName": "revert"}, "address": "/Tactic-Proofs/The-Tactic-Language/"}], "Lean.Parser.Tactic.replace": [{"id": "replace", "data": {"userName": "replace"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.repeat1'": [{"id": "repeat1___", "data": {"userName": "repeat1'"}, "address": "/Tactic-Proofs/The-Tactic-Language/"}], "Lean.Parser.Tactic.repeat'": [{"id": "repeat___", "data": {"userName": "repeat'"}, "address": "/Tactic-Proofs/The-Tactic-Language/"}], "Lean.Parser.Tactic.renameI": [{"id": "rename_i", "data": {"userName": "rename_i"}, "address": "/Tactic-Proofs/The-Tactic-Language/"}], "Lean.Parser.Tactic.rename": [{"id": "rename", "data": {"userName": "rename"}, "address": "/Tactic-Proofs/The-Tactic-Language/"}], "Lean.Parser.Tactic.refine'": [{"id": "refine___", "data": {"userName": "refine'"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.refine": [{"id": "refine", "data": {"userName": "refine"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.rcases": [{"id": "rcases", "data": {"userName": "rcases"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.pushCast": [{"id": "push_cast", "data": {"userName": "push_cast"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.open": [{"id": "open", "data": {"userName": "Lean.Parser.Tactic.open"}, "address": "/Tactic-Proofs/The-Tactic-Language/"}], "Lean.Parser.Tactic.omega": [{"id": "omega", "data": {"userName": "omega"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.obtain": [{"id": "obtain", "data": {"userName": "obtain"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.nativeDecide": [{"id": "native_decide", "data": {"userName": "native_decide"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.mvcgenMacro": [{"id": "mvcgen", "data": {"userName": "mvcgen"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.mstopMacro": [{"id": "mstop", "data": {"userName": "mstop"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.mstartMacro": [{"id": "mstart", "data": {"userName": "mstart"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.mspecializePureMacro": [{"id": "mspecialize_pure", "data": {"userName": "mspecialize_pure"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.mspecializeMacro": [{"id": "mspecialize", "data": {"userName": "mspecialize"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.mspecMacro": [{"id": "mspec", "data": {"userName": "mspec"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.mrightMacro": [{"id": "mright", "data": {"userName": "mright"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.mreplaceMacro": [{"id": "mreplace", "data": {"userName": "mreplace"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.mrenameIMacro": [{"id": "mrename_i", "data": {"userName": "mrename_i"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.mrefineMacro": [{"id": "mrefine", "data": {"userName": "mrefine"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.mpureMacro": [{"id": "mpure", "data": {"userName": "mpure"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.mpureIntroMacro": [{"id": "mpure_intro", "data": {"userName": "mpure_intro"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.mleftMacro": [{"id": "mleft", "data": {"userName": "mleft"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.mleaveMacro": [{"id": "mleave", "data": {"userName": "mleave"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.mintroMacro": [{"id": "mintro", "data": {"userName": "mintro"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.mhaveMacro": [{"id": "mhave", "data": {"userName": "mhave"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.mframeMacro": [{"id": "mframe", "data": {"userName": "mframe"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.mexistsMacro": [{"id": "mexists", "data": {"userName": "mexists"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.mexfalsoMacro": [{"id": "mexfalso", "data": {"userName": "mexfalso"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.mexactMacro": [{"id": "mexact", "data": {"userName": "mexact"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.mdup": [{"id": "mdup", "data": {"userName": "mdup"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.mconstructorMacro": [{"id": "mconstructor", "data": {"userName": "mconstructor"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.mclearMacro": [{"id": "mclear", "data": {"userName": "mclear"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.mcasesMacro": [{"id": "mcases", "data": {"userName": "mcases"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.match": [{"id": "match", "data": {"userName": "Lean.Parser.Tactic.match"}, "address": "/Tactic-Proofs/The-Tactic-Language/"}], "Lean.Parser.Tactic.massumptionMacro": [{"id": "massumption", "data": {"userName": "massumption"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.letrec": [{"id": "let-rec", "data": {"userName": "let"}, "address": "/Tactic-Proofs/The-Tactic-Language/"}], "Lean.Parser.Tactic.left": [{"id": "left", "data": {"userName": "left"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.intros": [{"id": "intros", "data": {"userName": "intros"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.introMatch": [{"id": "intro-___-_________-____GT_-_________-___-_________-____GT_-_________", "data": {"userName": "Lean.Parser.Tactic.introMatch"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.intro": [{"id": "intro", "data": {"userName": "intro"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.injections": [{"id": "injections", "data": {"userName": "injections"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.injection": [{"id": "injection", "data": {"userName": "injection"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.induction": [{"id": "induction", "data": {"userName": "induction"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.guardTarget": [{"id": "guard_target", "data": {"userName": "guard_target"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.guardHyp": [{"id": "guard_hyp", "data": {"userName": "guard_hyp"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.guardExpr": [{"id": "guard_expr", "data": {"userName": "guard_expr"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.grind": [{"id": "grind", "data": {"userName": "grind"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.generalize": [{"id": "generalize", "data": {"userName": "generalize"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.funInduction": [{"id": "fun_induction", "data": {"userName": "fun_induction"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.funCases": [{"id": "fun_cases", "data": {"userName": "fun_cases"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.focus": [{"id": "focus", "data": {"userName": "focus"}, "address": "/Tactic-Proofs/The-Tactic-Language/"}], "Lean.Parser.Tactic.first": [{"id": "first", "data": {"userName": "first"}, "address": "/Tactic-Proofs/The-Tactic-Language/"}], "Lean.Parser.Tactic.falseOrByContra": [{"id": "false_or_by_contra", "data": {"userName": "false_or_by_contra"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.failIfSuccess": [{"id": "fail_if_success", "data": {"userName": "fail_if_success"}, "address": "/Tactic-Proofs/The-Tactic-Language/"}], "Lean.Parser.Tactic.fail": [{"id": "fail", "data": {"userName": "fail"}, "address": "/Tactic-Proofs/The-Tactic-Language/"}], "Lean.Parser.Tactic.exposeNames": [{"id": "expose_names", "data": {"userName": "expose_names"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.exact?": [{"id": "exact___", "data": {"userName": "exact?"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.exact": [{"id": "exact", "data": {"userName": "exact"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.eqRefl": [{"id": "eq_refl", "data": {"userName": "eq_refl"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.dsimpTrace": [{"id": "dsimp___-next", "data": {"userName": "dsimp?"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.dsimpAutoUnfold": [{"id": "dsimp___", "data": {"userName": "dsimp!"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.dsimp": [{"id": "dsimp", "data": {"userName": "dsimp"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.done": [{"id": "done", "data": {"userName": "done"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.delta": [{"id": "delta", "data": {"userName": "delta"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.decide": [{"id": "decide", "data": {"userName": "decide"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.dbgTrace": [{"id": "dbg_trace", "data": {"userName": "dbg_trace"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.contradiction": [{"id": "contradiction", "data": {"userName": "contradiction"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.constructor": [{"id": "constructor", "data": {"userName": "constructor"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.congr": [{"id": "congr", "data": {"userName": "congr"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.clear": [{"id": "clear", "data": {"userName": "clear"}, "address": "/Tactic-Proofs/The-Tactic-Language/"}], "Lean.Parser.Tactic.classical": [{"id": "classical", "data": {"userName": "classical"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.changeWith": [{"id": "change-_________-with-_________", "data": {"userName": "change"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.change": [{"id": "change", "data": {"userName": "change"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.cases": [{"id": "cases", "data": {"userName": "cases"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.case'": [{"id": "case___", "data": {"userName": "case'"}, "address": "/Tactic-Proofs/The-Tactic-Language/"}], "Lean.Parser.Tactic.case": [{"id": "case", "data": {"userName": "case"}, "address": "/Tactic-Proofs/The-Tactic-Language/"}], "Lean.Parser.Tactic.bvTraceMacro": [{"id": "bv_decide___", "data": {"userName": "bv_decide?"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.bvNormalizeMacro": [{"id": "bv_normalize", "data": {"userName": "bv_normalize"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.bvDecideMacro": [{"id": "bv_decide", "data": {"userName": "bv_decide"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.bvCheck": [{"id": "bv_check", "data": {"userName": "bv_check"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.assumption": [{"id": "assumption", "data": {"userName": "assumption"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.as_aux_lemma": [{"id": "as_aux_lemma", "data": {"userName": "as_aux_lemma"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.applyRules": [{"id": "apply_rules", "data": {"userName": "apply_rules"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.applyRfl": [{"id": "apply_rfl", "data": {"userName": "apply_rfl"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.applyAssumption": [{"id": "apply_assumption", "data": {"userName": "apply_assumption"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.apply?": [{"id": "apply___", "data": {"userName": "apply?"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.apply": [{"id": "apply", "data": {"userName": "apply"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.anyGoals": [{"id": "any_goals", "data": {"userName": "any_goals"}, "address": "/Tactic-Proofs/The-Tactic-Language/"}], "Lean.Parser.Tactic.allGoals": [{"id": "all_goals", "data": {"userName": "all_goals"}, "address": "/Tactic-Proofs/The-Tactic-Language/"}], "Lean.Parser.Tactic.acRfl": [{"id": "ac_rfl", "data": {"userName": "ac_rfl"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.acNf0": [{"id": "ac_nf0", "data": {"userName": "ac_nf0"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Tactic.Conv.convTactic": [{"id": "conv___", "data": {"userName": "conv'"}, "address": "/Tactic-Proofs/Targeted-Rewriting-with--conv/"}, {"id": "conv___-next", "data": {"userName": "conv'"}, "address": "/Tactic-Proofs/Targeted-Rewriting-with--conv/"}], "Lean.Parser.Tactic.Conv.conv": [{"id": "conv-next", "data": {"userName": "conv"}, "address": "/Tactic-Proofs/Targeted-Rewriting-with--conv/"}], "Lean.Elab.Tactic.Ext.tacticExt1___": [{"id": "ext1", "data": {"userName": "ext1"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Elab.Tactic.Ext.ext": [{"id": "ext", "data": {"userName": "ext"}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Elab.Tactic.Ext.applyExtTheorem": [{"id": "apply_ext_theorem", "data": {"userName": "apply_ext_theorem"}, "address": "/Tactic-Proofs/Tactic-Reference/"}]}}, "Verso.Genre.Manual.doc.syntaxKind": {"title": "Verso.Genre.Manual.doc.syntaxKind", "description": "Verso.Genre.Manual.doc.syntaxKind", "contents": {"«term∃_,_»": [{"id": "_FLQQ_term_________FLQQ_", "data": null, "address": "/Basic-Propositions/Quantifiers/"}, {"id": "_FLQQ_term_________FLQQ_-next", "data": null, "address": "/Basic-Propositions/Quantifiers/"}], "«term‹_›»": [{"id": "_FLQQ_term_FLQ___FRQ__FLQQ_", "data": null, "address": "/Tactic-Proofs/Reading-Proof-States/"}], "«termΣ_,_»": [{"id": "_FLQQ_term_________FLQQ_-next-next-next-next-next", "data": null, "address": "/Basic-Types/Tuples/"}, {"id": "_FLQQ_term_________FLQQ_-next-next-next-next-next-next", "data": null, "address": "/Basic-Types/Tuples/"}], "«termΣ'_,_»": [{"id": "_FLQQ_term____________FLQQ_", "data": null, "address": "/Basic-Types/Tuples/"}, {"id": "_FLQQ_term____________FLQQ_-next", "data": null, "address": "/Basic-Types/Tuples/"}], "«term¬_»": [{"id": "_FLQQ_term_____FLQQ_", "data": null, "address": "/Basic-Propositions/Logical-Connectives/"}], "«term{_:_//_}»": [{"id": "_FLQQ_term___________________FLQQ_", "data": null, "address": "/Basic-Types/Subtypes/"}, {"id": "_FLQQ_term___________________FLQQ_-next", "data": null, "address": "/Basic-Types/Subtypes/"}], "«term_⊕_»": [{"id": "_FLQQ_term______FLQQ_-next-next-next-next-next-next-next-next-next", "data": null, "address": "/Basic-Types/Sum-Types/"}], "«term_⊕'_»": [{"id": "_FLQQ_term_________FLQQ_-next-next-next-next-next-next-next", "data": null, "address": "/Basic-Types/Sum-Types/"}], "«term_≥_»": [{"id": "_FLQQ_term______FLQQ_-next-next", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "«term_≤_»": [{"id": "_FLQQ_term______FLQQ_-next", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "«term_≍_»": [{"id": "_FLQQ_term______FLQQ_-next-next-next-next-next-next-next", "data": null, "address": "/Basic-Propositions/Propositional-Equality/"}], "«term_≈_»": [{"id": "_FLQQ_term______FLQQ_", "data": null, "address": "/The-Type-System/Quotients/"}], "«term_∨_»": [{"id": "_FLQQ_term______FLQQ_-next-next-next-next", "data": null, "address": "/Basic-Propositions/Logical-Connectives/"}], "«term_∧_»": [{"id": "_FLQQ_term______FLQQ_-next-next-next", "data": null, "address": "/Basic-Propositions/Logical-Connectives/"}], "«term_↔_»": [{"id": "_FLQQ_term______FLQQ_-next-next-next-next-next", "data": null, "address": "/Basic-Propositions/Logical-Connectives/"}], "«term_×_»": [{"id": "_FLQQ_term______FLQQ_-next-next-next-next-next-next-next-next", "data": null, "address": "/Basic-Types/Tuples/"}], "«term_×__1»": [{"id": "_FLQQ_term______1_FLQQ_", "data": null, "address": "/Basic-Types/Tuples/"}], "«term_×'_»": [{"id": "_FLQQ_term_________FLQQ_-next-next-next-next", "data": null, "address": "/Basic-Types/Tuples/"}], "«term_||_»": [{"id": "_FLQQ_term_________FLQQ_-next-next-next", "data": null, "address": "/Basic-Types/Booleans/"}], "«term_|>_»": [{"id": "_FLQQ_term_____GT___FLQQ_", "data": null, "address": "/Terms/Function-Application/"}], "«term_>_»": [{"id": "_FLQQ_term__GT___FLQQ_", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "«term_>>=_»": [{"id": "_FLQQ_term__GT__GT______FLQQ_", "data": null, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}], "«term_>=>_»": [{"id": "_FLQQ_term__GT_____GT___FLQQ_", "data": null, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}], "«term_=_»": [{"id": "_FLQQ_term______FLQQ_-next-next-next-next-next-next", "data": null, "address": "/Basic-Propositions/Propositional-Equality/"}], "«term_=<<_»": [{"id": "_FLQQ_term_____LT__LT___FLQQ_", "data": null, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}], "«term_<|_»": [{"id": "_FLQQ_term__LT______FLQQ_", "data": null, "address": "/Terms/Function-Application/"}], "«term_<|>_»": [{"id": "_FLQQ_term__LT_____GT___FLQQ_-next-next-next", "data": null, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}], "«term_<_»": [{"id": "_FLQQ_term__LT___FLQQ_", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "«term_<=<_»": [{"id": "_FLQQ_term__LT_____LT___FLQQ_", "data": null, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}], "«term_<*_»": [{"id": "_FLQQ_term__LT______FLQQ_-next", "data": null, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}], "«term_<*>_»": [{"id": "_FLQQ_term__LT_____GT___FLQQ_-next-next", "data": null, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}], "«term_<&>_»": [{"id": "_FLQQ_term__LT_____GT___FLQQ_-next", "data": null, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}], "«term_<$>_»": [{"id": "_FLQQ_term__LT_____GT___FLQQ_", "data": null, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}], "«term_::_»": [{"id": "_FLQQ_term_________FLQQ_-next-next-next-next-next-next-next-next", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "«term_*>_»": [{"id": "_FLQQ_term_____GT___FLQQ_-next", "data": null, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}], "«term_&&_»": [{"id": "_FLQQ_term_________FLQQ_-next-next", "data": null, "address": "/Basic-Types/Booleans/"}], "«term[_]»": [{"id": "_FLQQ_term_LSQ___RSQ__FLQQ_-next", "data": null, "address": "/Basic-Types/Linked-Lists/"}, {"id": "_FLQQ_term_LSQ___RSQ__FLQQ_", "data": null, "address": "/Terms/Numeric-Literals/"}], "«termExists_,_»": [{"id": "_FLQQ_termExists______FLQQ_", "data": null, "address": "/Basic-Propositions/Quantifiers/"}, {"id": "_FLQQ_termExists______FLQQ_-next", "data": null, "address": "/Basic-Propositions/Quantifiers/"}], "«term#[_,]»": [{"id": "_FLQQ_term____LSQ______RSQ__FLQQ_-next", "data": null, "address": "/Basic-Types/Arrays/"}, {"id": "_FLQQ_term____LSQ______RSQ__FLQQ_", "data": null, "address": "/Terms/Numeric-Literals/"}], "«stx_<|>_»": [{"id": "_FLQQ_stx__LT_____GT___FLQQ_", "data": null, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "«stx_,+»": [{"id": "_FLQQ_stx________FLQQ_-next", "data": null, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "«stx_,+,?»": [{"id": "_FLQQ_stx______________FLQQ_-next", "data": null, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "«stx_,*»": [{"id": "_FLQQ_stx________FLQQ_", "data": null, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "«stx_,*,?»": [{"id": "_FLQQ_stx______________FLQQ_", "data": null, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "«stx_+»": [{"id": "_FLQQ_stx_____FLQQ_-next", "data": null, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "«stx_*»": [{"id": "_FLQQ_stx_____FLQQ_", "data": null, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "«prio(_)»": [{"id": "_FLQQ_prio_LPAR___RPAR__FLQQ_", "data": null, "address": "/Type-Classes/Instance-Declarations/"}], "«prec(_)»": [{"id": "_FLQQ_prec_LPAR___RPAR__FLQQ_", "data": null, "address": "/Notations-and-Macros/Precedence/"}], "termIfThenElse": [{"id": "termIfThenElse", "data": null, "address": "/Terms/Conditionals/"}], "termIfLet": [{"id": "termIfLet", "data": null, "address": "/Terms/Conditionals/"}], "termDepIfThenElse": [{"id": "termDepIfThenElse", "data": null, "address": "/Terms/Conditionals/"}], "term!_": [{"id": "term____", "data": null, "address": "/Basic-Types/Booleans/"}], "stx_?": [{"id": "stx____", "data": null, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "stx!_": [{"id": "stx____-next", "data": null, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "str.antiquot": [{"id": "str___antiquot", "data": null, "address": "/Notations-and-Macros/Notations/"}], "prioMid": [{"id": "prioMid", "data": null, "address": "/Type-Classes/Instance-Declarations/"}], "prioLow": [{"id": "prioLow", "data": null, "address": "/Type-Classes/Instance-Declarations/"}], "prioHigh": [{"id": "prioHigh", "data": null, "address": "/Type-Classes/Instance-Declarations/"}], "prioDefault": [{"id": "prioDefault", "data": null, "address": "/Type-Classes/Instance-Declarations/"}], "precMin": [{"id": "precMin", "data": null, "address": "/Notations-and-Macros/Precedence/"}], "precMax": [{"id": "precMax", "data": null, "address": "/Notations-and-Macros/Precedence/"}], "precLead": [{"id": "precLead", "data": null, "address": "/Notations-and-Macros/Precedence/"}], "precArg": [{"id": "precArg", "data": null, "address": "/Notations-and-Macros/Precedence/"}], "num.antiquot": [{"id": "num___antiquot-next", "data": null, "address": "/Notations-and-Macros/Precedence/"}, {"id": "num___antiquot", "data": null, "address": "/Type-Classes/Instance-Declarations/"}], "ident.antiquot": [{"id": "ident___antiquot", "data": null, "address": "/Terms/Functions/"}], "coeSortNotation": [{"id": "coeSortNotation", "data": null, "address": "/Coercions/Coercing-to-Sorts/"}], "coeNotation": [{"id": "coeNotation", "data": null, "address": "/Coercions/Coercing-Between-Types/"}], "coeFunNotation": [{"id": "coeFunNotation", "data": null, "address": "/Coercions/Coercing-to-Function-Types/"}], "boolIfThenElse": [{"id": "boolIfThenElse", "data": null, "address": "/Terms/Conditionals/"}], "Std.«term_<..._»": [{"id": "Std____FLQQ_term__LT____________FLQQ_", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.«term_<...=_»": [{"id": "Std____FLQQ_term__LT_______________FLQQ_", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.«term_<...<_»": [{"id": "Std____FLQQ_term__LT___________LT___FLQQ_", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.«term_<...*»": [{"id": "Std____FLQQ_term__LT______________FLQQ_", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.«term_..._»": [{"id": "Std____FLQQ_term____________FLQQ_", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.«term_...=_»": [{"id": "Std____FLQQ_term_______________FLQQ_", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.«term_...<_»": [{"id": "Std____FLQQ_term___________LT___FLQQ_", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.«term_...*»": [{"id": "Std____FLQQ_term______________FLQQ_", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.«term*..._»": [{"id": "Std____FLQQ_term______________FLQQ_-next", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.«term*...=_»": [{"id": "Std____FLQQ_term_________________FLQQ_", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.«term*...<_»": [{"id": "Std____FLQQ_term_____________LT___FLQQ_", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.«term*...*»": [{"id": "Std____FLQQ_term________________FLQQ_", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Tactic.Do.mgoalStx": [{"id": "Std___Tactic___Do___mgoalStx-next", "data": null, "address": "/The--mvcgen--tactic/Proof-Mode/"}], "Std.HashMap.«term_~m_»": [{"id": "Std___HashMap____FLQQ_term____m__FLQQ_", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}, {"id": "Std___HashMap____FLQQ_term____m__FLQQ_-next", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.Do.«term⌜_⌝»": [{"id": "Std___Do____FLQQ_term________FLQQ_", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.«term⊢ₛ_»": [{"id": "Std___Do____FLQQ_term_VDASH______FLQQ_", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.«term_⊣⊢ₛ_»": [{"id": "Std___Do____FLQQ_term_____VDASH______FLQQ_", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.«term_⊢ₛ_»": [{"id": "Std___Do____FLQQ_term__VDASH______FLQQ_", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.«term_⊢ₚ_»": [{"id": "Std___Do____FLQQ_term__VDASH______FLQQ_-next", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.«term_∧ₚ_»": [{"id": "Std___Do____FLQQ_term_________FLQQ_", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.«term_⇓_=>_»": [{"id": "Std___Do____FLQQ_term_________GT___FLQQ_", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}, {"id": "Std___Do____FLQQ_term_________GT___FLQQ_-next", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.«term_⇓?_=>_»": [{"id": "Std___Do____FLQQ_term____________GT___FLQQ_", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.«term_→ₚ_»": [{"id": "Std___Do____FLQQ_term__ARR______FLQQ_", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.«termWp⟦_:_⟧»": [{"id": "Std___Do____FLQQ_termWp____________FLQQ_", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.«termTerm(_)»": [{"id": "Std___Do____FLQQ_termTerm_LPAR___RPAR__FLQQ_", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.«termSpred(_)»": [{"id": "Std___Do____FLQQ_termSpred_LPAR___RPAR__FLQQ_-next-next-next-next-next-next", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}, {"id": "Std___Do____FLQQ_termSpred_LPAR___RPAR__FLQQ_-next-next", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}, {"id": "Std___Do____FLQQ_termSpred_LPAR___RPAR__FLQQ_-next-next-next-next-next-next-next-next-next-next-next-next-next", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}, {"id": "Std___Do____FLQQ_termSpred_LPAR___RPAR__FLQQ_-next-next-next-next-next-next-next-next", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}, {"id": "Std___Do____FLQQ_termSpred_LPAR___RPAR__FLQQ_-next-next-next-next", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}, {"id": "Std___Do____FLQQ_termSpred_LPAR___RPAR__FLQQ_-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}, {"id": "Std___Do____FLQQ_termSpred_LPAR___RPAR__FLQQ_-next-next-next", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}, {"id": "Std___Do____FLQQ_termSpred_LPAR___RPAR__FLQQ_-next-next-next-next-next", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}, {"id": "Std___Do____FLQQ_termSpred_LPAR___RPAR__FLQQ_-next-next-next-next-next-next-next", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}, {"id": "Std___Do____FLQQ_termSpred_LPAR___RPAR__FLQQ_", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}, {"id": "Std___Do____FLQQ_termSpred_LPAR___RPAR__FLQQ_-next-next-next-next-next-next-next-next-next-next-next-next-next-next", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}, {"id": "Std___Do____FLQQ_termSpred_LPAR___RPAR__FLQQ_-next", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}, {"id": "Std___Do____FLQQ_termSpred_LPAR___RPAR__FLQQ_-next-next-next-next-next-next-next-next-next-next-next-next", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}, {"id": "Std___Do____FLQQ_termSpred_LPAR___RPAR__FLQQ_-next-next-next-next-next-next-next-next-next", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}, {"id": "Std___Do____FLQQ_termSpred_LPAR___RPAR__FLQQ_-next-next-next-next-next-next-next-next-next-next", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}, {"id": "Std___Do____FLQQ_termSpred_LPAR___RPAR__FLQQ_-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}, {"id": "Std___Do____FLQQ_termSpred_LPAR___RPAR__FLQQ_-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}, {"id": "Std___Do____FLQQ_termSpred_LPAR___RPAR__FLQQ_-next-next-next-next-next-next-next-next-next-next-next", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.triple": [{"id": "Std___Do___triple", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.DHashMap.«term_~m_»": [{"id": "Std___DHashMap____FLQQ_term____m__FLQQ_", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Manual.FreeSyntax.more": [{"id": "Manual___FreeSyntax___more-next-next-next", "data": null, "address": "/Notations-and-Macros/Macros/"}, {"id": "Manual___FreeSyntax___more-next-next", "data": null, "address": "/Notations-and-Macros/Macros/"}, {"id": "Manual___FreeSyntax___more", "data": null, "address": "/Terms/Function-Application/"}, {"id": "Manual___FreeSyntax___more-next", "data": null, "address": "/Terms/Function-Application/"}], "Manual.FreeSyntax.embed": [{"id": "Manual___FreeSyntax___embed", "data": null, "address": "/Terms/Functions/"}], "Manual.FreeSyntax.done": [{"id": "Manual___FreeSyntax___done-next-next", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}, {"id": "Manual___FreeSyntax___done-next", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}, {"id": "Manual___FreeSyntax___done", "data": null, "address": "/Notations-and-Macros/Macros/"}], "List.«term_~_»": [{"id": "List____FLQQ_term______FLQQ_", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.«term_<:+_»": [{"id": "List____FLQQ_term__LT_________FLQQ_-next", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.«term_<:+:_»": [{"id": "List____FLQQ_term__LT____________FLQQ_", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.«term_<+_»": [{"id": "List____FLQQ_term__LT______FLQQ_", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.«term_<+:_»": [{"id": "List____FLQQ_term__LT_________FLQQ_", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "Lean.«term_Matches_|»": [{"id": "Lean____FLQQ_term_Matches_____FLQQ_", "data": null, "address": "/Terms/Pattern-Matching/"}], "Lean.reduceCmd": [{"id": "Lean___reduceCmd", "data": null, "address": "/Interacting-with-Lean/"}], "Lean.guardMsgsWhitespaceArg": [{"id": "Lean___guardMsgsWhitespaceArg-next-next-next", "data": null, "address": "/Interacting-with-Lean/"}, {"id": "Lean___guardMsgsWhitespaceArg-next-next", "data": null, "address": "/Interacting-with-Lean/"}, {"id": "Lean___guardMsgsWhitespaceArg-next", "data": null, "address": "/Interacting-with-Lean/"}], "Lean.guardMsgsSpecElt": [{"id": "Lean___guardMsgsSpecElt-next", "data": null, "address": "/Interacting-with-Lean/"}, {"id": "Lean___guardMsgsSpecElt-next-next-next", "data": null, "address": "/Interacting-with-Lean/"}, {"id": "Lean___guardMsgsSpecElt-next-next", "data": null, "address": "/Interacting-with-Lean/"}], "Lean.guardMsgsFilter": [{"id": "Lean___guardMsgsFilter-next-next-next", "data": null, "address": "/Interacting-with-Lean/"}, {"id": "Lean___guardMsgsFilter-next", "data": null, "address": "/Interacting-with-Lean/"}, {"id": "Lean___guardMsgsFilter-next-next-next-next", "data": null, "address": "/Interacting-with-Lean/"}, {"id": "Lean___guardMsgsFilter-next-next", "data": null, "address": "/Interacting-with-Lean/"}], "Lean.guardMsgsCmd": [{"id": "Lean___guardMsgsCmd", "data": null, "address": "/Interacting-with-Lean/"}], "Lean.PrettyPrinter.Delaborator.attrApp_delab_": [{"id": "Lean___PrettyPrinter___Delaborator___attrApp_delab_", "data": null, "address": "/Notations-and-Macros/Extending-Lean___s-Output/"}], "Lean.Parser.commandUnseal__": [{"id": "Lean___Parser___commandUnseal__", "data": null, "address": "/Definitions/Recursive-Definitions/"}], "Lean.Parser.commandSeal__": [{"id": "Lean___Parser___commandSeal__", "data": null, "address": "/Definitions/Recursive-Definitions/"}], "Lean.Parser.Termination.terminationBy": [{"id": "Lean___Parser___Termination___terminationBy-next-next-next", "data": null, "address": "/Definitions/Recursive-Definitions/"}, {"id": "Lean___Parser___Termination___terminationBy-next", "data": null, "address": "/Definitions/Recursive-Definitions/"}], "Lean.Parser.Term.typeAscription": [{"id": "Lean___Parser___Term___typeAscription-next", "data": null, "address": "/Terms/Type-Ascription/"}, {"id": "Lean___Parser___Term___typeAscription", "data": null, "address": "/Terms/Functions/"}], "Lean.Parser.Term.tuple": [{"id": "Lean___Parser___Term___tuple", "data": null, "address": "/Basic-Types/Tuples/"}], "Lean.Parser.Term.syntheticHole": [{"id": "Lean___Parser___Term___syntheticHole-next", "data": null, "address": "/Terms/Holes/"}, {"id": "Lean___Parser___Term___syntheticHole", "data": null, "address": "/Terms/Holes/"}], "Lean.Parser.Term.subst": [{"id": "Lean___Parser___Term___subst", "data": null, "address": "/Basic-Propositions/Propositional-Equality/"}], "Lean.Parser.Term.structInstField": [{"id": "Lean___Parser___Term___structInstField", "data": null, "address": "/The-Type-System/Inductive-Types/"}, {"id": "Lean___Parser___Term___structInstField-next", "data": null, "address": "/The-Type-System/Inductive-Types/"}], "Lean.Parser.Term.structInst": [{"id": "Lean___Parser___Term___structInst", "data": null, "address": "/The-Type-System/Inductive-Types/"}, {"id": "Lean___Parser___Term___structInst-next", "data": null, "address": "/The-Type-System/Inductive-Types/"}], "Lean.Parser.Term.strictImplicitBinder": [{"id": "Lean___Parser___Term___strictImplicitBinder-next-next-next", "data": null, "address": "/Terms/Functions/"}, {"id": "Lean___Parser___Term___strictImplicitBinder-next", "data": null, "address": "/Definitions/Headers-and-Signatures/"}, {"id": "Lean___Parser___Term___strictImplicitBinder", "data": null, "address": "/Definitions/Headers-and-Signatures/"}, {"id": "Lean___Parser___Term___strictImplicitBinder-next-next", "data": null, "address": "/Terms/Functions/"}], "Lean.Parser.Term.stateRefT": [{"id": "Lean___Parser___Term___stateRefT", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "Lean.Parser.Term.show": [{"id": "Lean___Parser___Term___show", "data": null, "address": "/Terms/Type-Ascription/"}, {"id": "Lean___Parser___Term___show-next", "data": null, "address": "/Terms/Type-Ascription/"}], "Lean.Parser.Term.proj": [{"id": "Lean___Parser___Term___proj", "data": null, "address": "/Terms/Function-Application/"}], "Lean.Parser.Term.pipeProj": [{"id": "Lean___Parser___Term___pipeProj-next", "data": null, "address": "/Terms/Function-Application/"}, {"id": "Lean___Parser___Term___pipeProj", "data": null, "address": "/Terms/Function-Application/"}], "Lean.Parser.Term.paren": [{"id": "Lean___Parser___Term___paren", "data": null, "address": "/Terms/Functions/"}], "Lean.Parser.Term.nomatch": [{"id": "Lean___Parser___Term___nomatch", "data": null, "address": "/Terms/Pattern-Matching/"}], "Lean.Parser.Term.nofun": [{"id": "Lean___Parser___Term___nofun", "data": null, "address": "/Terms/Pattern-Matching/"}], "Lean.Parser.Term.namedPattern": [{"id": "Lean___Parser___Term___namedPattern", "data": null, "address": "/Terms/Pattern-Matching/"}, {"id": "Lean___Parser___Term___namedPattern-next", "data": null, "address": "/Terms/Pattern-Matching/"}], "Lean.Parser.Term.matchDiscr": [{"id": "Lean___Parser___Term___matchDiscr-next", "data": null, "address": "/Terms/Pattern-Matching/"}, {"id": "Lean___Parser___Term___matchDiscr", "data": null, "address": "/Terms/Pattern-Matching/"}], "Lean.Parser.Term.match": [{"id": "Lean___Parser___Term___match", "data": null, "address": "/Terms/Pattern-Matching/"}], "Lean.Parser.Term.instBinder": [{"id": "Lean___Parser___Term___instBinder-next-next", "data": null, "address": "/Terms/Functions/"}, {"id": "Lean___Parser___Term___instBinder-next", "data": null, "address": "/Terms/Functions/"}, {"id": "Lean___Parser___Term___instBinder", "data": null, "address": "/Definitions/Headers-and-Signatures/"}], "Lean.Parser.Term.inaccessible": [{"id": "Lean___Parser___Term___inaccessible", "data": null, "address": "/Terms/Pattern-Matching/"}], "Lean.Parser.Term.implicitBinder": [{"id": "Lean___Parser___Term___implicitBinder-next", "data": null, "address": "/Terms/Functions/"}, {"id": "Lean___Parser___Term___implicitBinder-next-next", "data": null, "address": "/Terms/Functions/"}, {"id": "Lean___Parser___Term___implicitBinder", "data": null, "address": "/Definitions/Headers-and-Signatures/"}], "Lean.Parser.Term.hole": [{"id": "Lean___Parser___Term___hole", "data": null, "address": "/Terms/Holes/"}], "Lean.Parser.Term.fun": [{"id": "Lean___Parser___Term___fun", "data": null, "address": "/Terms/Functions/"}, {"id": "Lean___Parser___Term___fun-next-next", "data": null, "address": "/Terms/Functions/"}, {"id": "Lean___Parser___Term___fun-next-next-next", "data": null, "address": "/Terms/Functions/"}, {"id": "Lean___Parser___Term___fun-next-next-next-next", "data": null, "address": "/Terms/Functions/"}, {"id": "Lean___Parser___Term___fun-next-next-next-next-next", "data": null, "address": "/Terms/Pattern-Matching/"}, {"id": "Lean___Parser___Term___fun-next", "data": null, "address": "/Terms/Functions/"}], "Lean.Parser.Term.forall": [{"id": "Lean___Parser___Term___forall", "data": null, "address": "/Basic-Propositions/Quantifiers/"}, {"id": "Lean___Parser___Term___forall-next", "data": null, "address": "/Basic-Propositions/Quantifiers/"}, {"id": "Lean___Parser___Term___forall-next-next-next", "data": null, "address": "/Basic-Propositions/Quantifiers/"}, {"id": "Lean___Parser___Term___forall-next-next", "data": null, "address": "/Basic-Propositions/Quantifiers/"}], "Lean.Parser.Term.explicitBinder": [{"id": "Lean___Parser___Term___explicitBinder-next", "data": null, "address": "/Definitions/Headers-and-Signatures/"}, {"id": "Lean___Parser___Term___explicitBinder", "data": null, "address": "/Definitions/Headers-and-Signatures/"}], "Lean.Parser.Term.doSeqItem": [{"id": "Lean___Parser___Term___doSeqItem-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next", "data": null, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}, {"id": "Lean___Parser___Term___doSeqItem-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next", "data": null, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}, {"id": "Lean___Parser___Term___doSeqItem-next-next-next-next-next-next-next-next-next-next-next-next", "data": null, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}, {"id": "Lean___Parser___Term___doSeqItem-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next", "data": null, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}, {"id": "Lean___Parser___Term___doSeqItem-next-next-next-next-next-next-next-next-next-next-next-next-next-next", "data": null, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}, {"id": "Lean___Parser___Term___doSeqItem-next", "data": null, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}, {"id": "Lean___Parser___Term___doSeqItem-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next", "data": null, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}, {"id": "Lean___Parser___Term___doSeqItem-next-next-next", "data": null, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}, {"id": "Lean___Parser___Term___doSeqItem-next-next-next-next-next-next-next-next-next", "data": null, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}, {"id": "Lean___Parser___Term___doSeqItem-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next", "data": null, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}, {"id": "Lean___Parser___Term___doSeqItem-next-next-next-next-next-next-next-next", "data": null, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}, {"id": "Lean___Parser___Term___doSeqItem-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next", "data": null, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}, {"id": "Lean___Parser___Term___doSeqItem-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next", "data": null, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}, {"id": "Lean___Parser___Term___doSeqItem-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next", "data": null, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}, {"id": "Lean___Parser___Term___doSeqItem-next-next-next-next", "data": null, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}, {"id": "Lean___Parser___Term___doSeqItem-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next", "data": null, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}, {"id": "Lean___Parser___Term___doSeqItem-next-next-next-next-next-next", "data": null, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}, {"id": "Lean___Parser___Term___doSeqItem-next-next-next-next-next-next-next-next-next-next-next", "data": null, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}], "Lean.Parser.Term.doReassignArrow": [{"id": "Lean___Parser___Term___doReassignArrow", "data": null, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}, {"id": "Lean___Parser___Term___doReassignArrow-next", "data": null, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}], "Lean.Parser.Term.doReassign": [{"id": "Lean___Parser___Term___doReassign-next", "data": null, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}, {"id": "Lean___Parser___Term___doReassign", "data": null, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}], "Lean.Parser.Term.do": [{"id": "Lean___Parser___Term___do", "data": null, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}], "Lean.Parser.Term.depArrow": [{"id": "Lean___Parser___Term___depArrow-next-next-next-next-next-next-next", "data": null, "address": "/Terms/Function-Types/"}, {"id": "Lean___Parser___Term___depArrow-next-next-next-next", "data": null, "address": "/Terms/Function-Types/"}, {"id": "Lean___Parser___Term___depArrow-next-next-next", "data": null, "address": "/Terms/Function-Types/"}, {"id": "Lean___Parser___Term___depArrow-next", "data": null, "address": "/Terms/Function-Types/"}, {"id": "Lean___Parser___Term___depArrow-next-next-next-next-next", "data": null, "address": "/Terms/Function-Types/"}, {"id": "Lean___Parser___Term___depArrow-next-next", "data": null, "address": "/Terms/Function-Types/"}, {"id": "Lean___Parser___Term___depArrow", "data": null, "address": "/Terms/Function-Types/"}, {"id": "Lean___Parser___Term___depArrow-next-next-next-next-next-next", "data": null, "address": "/Terms/Function-Types/"}], "Lean.Parser.Term.byTactic": [{"id": "Lean___Parser___Term___byTactic-next", "data": null, "address": "/Tactic-Proofs/Running-Tactics/"}, {"id": "Lean___Parser___Term___byTactic-next-next", "data": null, "address": "/Tactic-Proofs/Running-Tactics/"}], "Lean.Parser.Term.borrowed": [{"id": "Lean___Parser___Term___borrowed", "data": null, "address": "/Run-Time-Code/Foreign-Function-Interface/"}], "Lean.Parser.Term.attributes": [{"id": "Lean___Parser___Term___attributes-next", "data": null, "address": "/Attributes/"}], "Lean.Parser.Term.attrKind": [{"id": "Lean___Parser___Term___attrKind-next", "data": null, "address": "/Attributes/"}, {"id": "Lean___Parser___Term___attrKind-next-next", "data": null, "address": "/Attributes/"}, {"id": "Lean___Parser___Term___attrKind", "data": null, "address": "/Attributes/"}], "Lean.Parser.Term.attrInstance": [{"id": "Lean___Parser___Term___attrInstance-next", "data": null, "address": "/Attributes/"}], "Lean.Parser.Term.arrow": [{"id": "Lean___Parser___Term___arrow", "data": null, "address": "/Terms/Function-Types/"}], "Lean.Parser.Term.anonymousCtor": [{"id": "Lean___Parser___Term___anonymousCtor", "data": null, "address": "/The-Type-System/Inductive-Types/"}], "Lean.Parser.Tactic.simp": [{"id": "Lean___Parser___Tactic___simp", "data": null, "address": "/The-Simplifier/Invoking-the-Simplifier/"}], "Lean.Parser.Tactic.optConfig": [{"id": "Lean___Parser___Tactic___optConfig-next", "data": null, "address": "/Tactic-Proofs/The-Tactic-Language/"}], "Lean.Parser.Tactic.configItem": [{"id": "Lean___Parser___Tactic___configItem-next-next", "data": null, "address": "/Tactic-Proofs/The-Tactic-Language/"}, {"id": "Lean___Parser___Tactic___configItem-next", "data": null, "address": "/Tactic-Proofs/The-Tactic-Language/"}, {"id": "Lean___Parser___Tactic___configItem-next-next-next-next", "data": null, "address": "/Tactic-Proofs/The-Tactic-Language/"}, {"id": "Lean___Parser___Tactic___configItem-next-next-next", "data": null, "address": "/Tactic-Proofs/The-Tactic-Language/"}], "Lean.Parser.Tactic.Conv.enterArg": [{"id": "Lean___Parser___Tactic___Conv___enterArg-next-next-next", "data": null, "address": "/Tactic-Proofs/Targeted-Rewriting-with--conv/"}, {"id": "Lean___Parser___Tactic___Conv___enterArg-next-next", "data": null, "address": "/Tactic-Proofs/Targeted-Rewriting-with--conv/"}, {"id": "Lean___Parser___Tactic___Conv___enterArg-next", "data": null, "address": "/Tactic-Proofs/Targeted-Rewriting-with--conv/"}], "Lean.Parser.Syntax.unary": [{"id": "Lean___Parser___Syntax___unary-next-next", "data": null, "address": "/Notations-and-Macros/Defining-New-Syntax/"}, {"id": "Lean___Parser___Syntax___unary", "data": null, "address": "/Notations-and-Macros/Defining-New-Syntax/"}, {"id": "Lean___Parser___Syntax___unary-next", "data": null, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "Lean.Parser.Syntax.subPrio": [{"id": "Lean___Parser___Syntax___subPrio", "data": null, "address": "/Type-Classes/Instance-Declarations/"}], "Lean.Parser.Syntax.subPrec": [{"id": "Lean___Parser___Syntax___subPrec", "data": null, "address": "/Notations-and-Macros/Precedence/"}], "Lean.Parser.Syntax.sepBy1": [{"id": "Lean___Parser___Syntax___sepBy1-next", "data": null, "address": "/Notations-and-Macros/Defining-New-Syntax/"}, {"id": "Lean___Parser___Syntax___sepBy1", "data": null, "address": "/Notations-and-Macros/Defining-New-Syntax/"}, {"id": "Lean___Parser___Syntax___sepBy1-next-next", "data": null, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "Lean.Parser.Syntax.sepBy": [{"id": "Lean___Parser___Syntax___sepBy-next-next", "data": null, "address": "/Notations-and-Macros/Defining-New-Syntax/"}, {"id": "Lean___Parser___Syntax___sepBy-next", "data": null, "address": "/Notations-and-Macros/Defining-New-Syntax/"}, {"id": "Lean___Parser___Syntax___sepBy", "data": null, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "Lean.Parser.Syntax.paren": [{"id": "Lean___Parser___Syntax___paren", "data": null, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "Lean.Parser.Syntax.nonReserved": [{"id": "Lean___Parser___Syntax___nonReserved", "data": null, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "Lean.Parser.Syntax.cat": [{"id": "Lean___Parser___Syntax___cat", "data": null, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "Lean.Parser.Syntax.binary": [{"id": "Lean___Parser___Syntax___binary", "data": null, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "Lean.Parser.Syntax.atom": [{"id": "Lean___Parser___Syntax___atom", "data": null, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "Lean.Parser.Syntax.addPrio": [{"id": "Lean___Parser___Syntax___addPrio", "data": null, "address": "/Type-Classes/Instance-Declarations/"}], "Lean.Parser.Syntax.addPrec": [{"id": "Lean___Parser___Syntax___addPrec", "data": null, "address": "/Notations-and-Macros/Precedence/"}], "Lean.Parser.Module.prelude": [{"id": "Lean___Parser___Module___prelude-next", "data": null, "address": "/Source-Files-and-Modules/"}], "Lean.Parser.Module.module": [{"id": "Lean___Parser___Module___module-next", "data": null, "address": "/Source-Files-and-Modules/"}], "Lean.Parser.Module.import": [{"id": "Lean___Parser___Module___import-next-next", "data": null, "address": "/Source-Files-and-Modules/"}, {"id": "Lean___Parser___Module___import-next", "data": null, "address": "/Source-Files-and-Modules/"}], "Lean.Parser.Module.header": [{"id": "Lean___Parser___Module___header-next-next", "data": null, "address": "/Source-Files-and-Modules/"}, {"id": "Lean___Parser___Module___header-next", "data": null, "address": "/Source-Files-and-Modules/"}], "Lean.Parser.Command.where": [{"id": "Lean___Parser___Command___where", "data": null, "address": "/Interacting-with-Lean/"}], "Lean.Parser.Command.version": [{"id": "Lean___Parser___Command___version", "data": null, "address": "/Interacting-with-Lean/"}], "Lean.Parser.Command.variable": [{"id": "Lean___Parser___Command___variable", "data": null, "address": "/Namespaces-and-Sections/"}], "Lean.Parser.Command.universe": [{"id": "Lean___Parser___Command___universe-next", "data": null, "address": "/The-Type-System/Universes/"}], "Lean.Parser.Command.synth": [{"id": "Lean___Parser___Command___synth", "data": null, "address": "/Interacting-with-Lean/"}], "Lean.Parser.Command.syntaxCat": [{"id": "Lean___Parser___Command___syntaxCat", "data": null, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "Lean.Parser.Command.syntax": [{"id": "Lean___Parser___Command___syntax", "data": null, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "Lean.Parser.Command.sectionHeader": [{"id": "Lean___Parser___Command___sectionHeader-next", "data": null, "address": "/Namespaces-and-Sections/"}], "Lean.Parser.Command.section": [{"id": "Lean___Parser___Command___section", "data": null, "address": "/Namespaces-and-Sections/"}], "Lean.Parser.Command.printEqns": [{"id": "Lean___Parser___Command___printEqns", "data": null, "address": "/Interacting-with-Lean/"}, {"id": "Lean___Parser___Command___printEqns-next", "data": null, "address": "/Interacting-with-Lean/"}], "Lean.Parser.Command.printAxioms": [{"id": "Lean___Parser___Command___printAxioms", "data": null, "address": "/Interacting-with-Lean/"}], "Lean.Parser.Command.print": [{"id": "Lean___Parser___Command___print-next", "data": null, "address": "/Interacting-with-Lean/"}, {"id": "Lean___Parser___Command___print", "data": null, "address": "/Interacting-with-Lean/"}], "Lean.Parser.Command.optDeriving": [{"id": "Lean___Parser___Command___optDeriving-next", "data": null, "address": "/Type-Classes/Deriving-Instances/"}], "Lean.Parser.Command.optDeclSig": [{"id": "Lean___Parser___Command___optDeclSig", "data": null, "address": "/Definitions/Headers-and-Signatures/"}], "Lean.Parser.Command.openSimple": [{"id": "Lean___Parser___Command___openSimple", "data": null, "address": "/Namespaces-and-Sections/"}], "Lean.Parser.Command.openScoped": [{"id": "Lean___Parser___Command___openScoped", "data": null, "address": "/Namespaces-and-Sections/"}], "Lean.Parser.Command.openRenaming": [{"id": "Lean___Parser___Command___openRenaming", "data": null, "address": "/Namespaces-and-Sections/"}], "Lean.Parser.Command.openOnly": [{"id": "Lean___Parser___Command___openOnly", "data": null, "address": "/Namespaces-and-Sections/"}], "Lean.Parser.Command.openHiding": [{"id": "Lean___Parser___Command___openHiding", "data": null, "address": "/Namespaces-and-Sections/"}], "Lean.Parser.Command.open": [{"id": "Lean___Parser___Command___open", "data": null, "address": "/Namespaces-and-Sections/"}], "Lean.Parser.Command.notation": [{"id": "Lean___Parser___Command___notation", "data": null, "address": "/Notations-and-Macros/Notations/"}], "Lean.Parser.Command.namespace": [{"id": "Lean___Parser___Command___namespace", "data": null, "address": "/Namespaces-and-Sections/"}], "Lean.Parser.Command.mutual": [{"id": "Lean___Parser___Command___mutual", "data": null, "address": "/Definitions/Recursive-Definitions/"}], "Lean.Parser.Command.mixfix": [{"id": "Lean___Parser___Command___mixfix-next-next-next-next", "data": null, "address": "/Notations-and-Macros/Custom-Operators/"}, {"id": "Lean___Parser___Command___mixfix-next-next-next", "data": null, "address": "/Notations-and-Macros/Custom-Operators/"}, {"id": "Lean___Parser___Command___mixfix", "data": null, "address": "/Notations-and-Macros/Custom-Operators/"}, {"id": "Lean___Parser___Command___mixfix-next-next", "data": null, "address": "/Notations-and-Macros/Custom-Operators/"}, {"id": "Lean___Parser___Command___mixfix-next", "data": null, "address": "/Notations-and-Macros/Custom-Operators/"}], "Lean.Parser.Command.macro_rules": [{"id": "Lean___Parser___Command___macro_rules", "data": null, "address": "/Notations-and-Macros/Macros/"}], "Lean.Parser.Command.macroArg": [{"id": "Lean___Parser___Command___macroArg-next", "data": null, "address": "/Notations-and-Macros/Macros/"}, {"id": "Lean___Parser___Command___macroArg-next-next", "data": null, "address": "/Notations-and-Macros/Macros/"}], "Lean.Parser.Command.macro": [{"id": "Lean___Parser___Command___macro", "data": null, "address": "/Notations-and-Macros/Macros/"}], "Lean.Parser.Command.instance": [{"id": "Lean___Parser___Command___instance-next-next-next", "data": null, "address": "/Type-Classes/Instance-Declarations/"}, {"id": "Lean___Parser___Command___instance-next-next", "data": null, "address": "/Type-Classes/Instance-Declarations/"}, {"id": "Lean___Parser___Command___instance-next", "data": null, "address": "/Type-Classes/Instance-Declarations/"}], "Lean.Parser.Command.initialize": [{"id": "Lean___Parser___Command___initialize-next-next", "data": null, "address": "/Elaboration-and-Compilation/"}, {"id": "Lean___Parser___Command___initialize-next", "data": null, "address": "/Elaboration-and-Compilation/"}, {"id": "Lean___Parser___Command___initialize-next-next-next", "data": null, "address": "/Elaboration-and-Compilation/"}, {"id": "Lean___Parser___Command___initialize", "data": null, "address": "/Elaboration-and-Compilation/"}], "Lean.Parser.Command.in": [{"id": "Lean___Parser___Command___in", "data": null, "address": "/Namespaces-and-Sections/"}], "Lean.Parser.Command.identPrec": [{"id": "Lean___Parser___Command___identPrec", "data": null, "address": "/Notations-and-Macros/Notations/"}], "Lean.Parser.Command.grindPattern": [{"id": "Lean___Parser___Command___grindPattern", "data": null, "address": "/The--grind--tactic/E___matching/"}], "Lean.Parser.Command.export": [{"id": "Lean___Parser___Command___export", "data": null, "address": "/Namespaces-and-Sections/"}], "Lean.Parser.Command.evalBang": [{"id": "Lean___Parser___Command___evalBang", "data": null, "address": "/Interacting-with-Lean/"}], "Lean.Parser.Command.eval": [{"id": "Lean___Parser___Command___eval", "data": null, "address": "/Interacting-with-Lean/"}], "Lean.Parser.Command.eraseAttr": [{"id": "Lean___Parser___Command___eraseAttr-next", "data": null, "address": "/Attributes/"}], "Lean.Parser.Command.end": [{"id": "Lean___Parser___Command___end", "data": null, "address": "/Namespaces-and-Sections/"}, {"id": "Lean___Parser___Command___end-next", "data": null, "address": "/Namespaces-and-Sections/"}], "Lean.Parser.Command.elab_rules": [{"id": "Lean___Parser___Command___elab_rules", "data": null, "address": "/Notations-and-Macros/Elaborators/"}], "Lean.Parser.Command.docComment": [{"id": "Lean___Parser___Command___docComment", "data": null, "address": "/Definitions/Modifiers/"}], "Lean.Parser.Command.deriving": [{"id": "Lean___Parser___Command___deriving-next", "data": null, "address": "/Type-Classes/Deriving-Instances/"}], "Lean.Parser.Command.declaration": [{"id": "Lean___Parser___Command___declaration-next-next-next-next-next", "data": null, "address": "/Definitions/Definitions/"}, {"id": "Lean___Parser___Command___declaration-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next", "data": null, "address": "/Definitions/Example-Declarations/"}, {"id": "Lean___Parser___Command___declaration-next-next-next-next-next-next-next-next-next-next-next", "data": null, "address": "/Definitions/Definitions/"}, {"id": "Lean___Parser___Command___declaration-next-next-next-next", "data": null, "address": "/Definitions/Definitions/"}, {"id": "Lean___Parser___Command___declaration-next-next-next-next-next-next-next-next", "data": null, "address": "/Definitions/Definitions/"}, {"id": "Lean___Parser___Command___declaration-next-next-next-next-next-next-next-next-next-next-next-next", "data": null, "address": "/Definitions/Definitions/"}, {"id": "Lean___Parser___Command___declaration-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next", "data": null, "address": "/Definitions/Example-Declarations/"}, {"id": "Lean___Parser___Command___declaration-next", "data": null, "address": "/The-Type-System/Inductive-Types/"}, {"id": "Lean___Parser___Command___declaration-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next", "data": null, "address": "/Definitions/Example-Declarations/"}, {"id": "Lean___Parser___Command___declaration-next-next-next", "data": null, "address": "/Definitions/Definitions/"}, {"id": "Lean___Parser___Command___declaration-next-next-next-next-next-next-next-next-next-next-next-next-next-next", "data": null, "address": "/Definitions/Theorems/"}, {"id": "Lean___Parser___Command___declaration-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next", "data": null, "address": "/Type-Classes/Class-Declarations/"}, {"id": "Lean___Parser___Command___declaration", "data": null, "address": "/The-Type-System/Inductive-Types/"}, {"id": "Lean___Parser___Command___declaration-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next", "data": null, "address": "/Definitions/Theorems/"}, {"id": "Lean___Parser___Command___declaration-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next", "data": null, "address": "/Definitions/Theorems/"}, {"id": "Lean___Parser___Command___declaration-next-next-next-next-next-next-next-next-next", "data": null, "address": "/Definitions/Definitions/"}, {"id": "Lean___Parser___Command___declaration-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next", "data": null, "address": "/Type-Classes/Class-Declarations/"}, {"id": "Lean___Parser___Command___declaration-next-next-next-next-next-next-next", "data": null, "address": "/Definitions/Definitions/"}], "Lean.Parser.Command.declSig": [{"id": "Lean___Parser___Command___declSig", "data": null, "address": "/Definitions/Headers-and-Signatures/"}], "Lean.Parser.Command.declModifiers": [{"id": "Lean___Parser___Command___declModifiers", "data": null, "address": "/Definitions/Modifiers/"}], "Lean.Parser.Command.declId": [{"id": "Lean___Parser___Command___declId", "data": null, "address": "/Definitions/Headers-and-Signatures/"}, {"id": "Lean___Parser___Command___declId-next", "data": null, "address": "/Definitions/Headers-and-Signatures/"}], "Lean.Parser.Command.check_failure": [{"id": "Lean___Parser___Command___check_failure", "data": null, "address": "/Interacting-with-Lean/"}], "Lean.Parser.Command.check": [{"id": "Lean___Parser___Command___check", "data": null, "address": "/Interacting-with-Lean/"}], "Lean.Parser.Command.axiom": [{"id": "Lean___Parser___Command___axiom-next", "data": null, "address": "/Axioms/"}], "Lean.Parser.Command.attribute": [{"id": "Lean___Parser___Command___attribute", "data": null, "address": "/Attributes/"}], "Lean.Parser.Attr.wf_preprocess": [{"id": "Lean___Parser___Attr___wf_preprocess", "data": null, "address": "/Definitions/Recursive-Definitions/"}], "Lean.Parser.Attr.spec": [{"id": "Lean___Parser___Attr___spec", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Lean.Parser.Attr.simple": [{"id": "Lean___Parser___Attr___simple-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}, {"id": "Lean___Parser___Attr___simple-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}, {"id": "Lean___Parser___Attr___simple-next", "data": null, "address": "/Definitions/Recursive-Definitions/"}, {"id": "Lean___Parser___Attr___simple-next-next-next-next-next-next-next-next-next-next", "data": null, "address": "/Notations-and-Macros/Elaborators/"}, {"id": "Lean___Parser___Attr___simple-next-next-next-next-next-next-next-next-next-next-next", "data": null, "address": "/Notations-and-Macros/Elaborators/"}, {"id": "Lean___Parser___Attr___simple-next-next-next-next-next-next-next-next-next-next-next-next-next-next", "data": null, "address": "/Notations-and-Macros/Extending-Lean___s-Output/"}, {"id": "Lean___Parser___Attr___simple-next-next-next-next-next-next", "data": null, "address": "/Tactic-Proofs/Tactic-Reference/"}, {"id": "Lean___Parser___Attr___simple-next-next-next-next", "data": null, "address": "/Terms/Function-Application/"}, {"id": "Lean___Parser___Attr___simple-next-next-next-next-next-next-next-next-next", "data": null, "address": "/Tactic-Proofs/Tactic-Reference/"}, {"id": "Lean___Parser___Attr___simple", "data": null, "address": "/Definitions/Recursive-Definitions/"}, {"id": "Lean___Parser___Attr___simple-next-next-next", "data": null, "address": "/Definitions/Recursive-Definitions/"}, {"id": "Lean___Parser___Attr___simple-next-next", "data": null, "address": "/Definitions/Recursive-Definitions/"}, {"id": "Lean___Parser___Attr___simple-next-next-next-next-next-next-next", "data": null, "address": "/Tactic-Proofs/Tactic-Reference/"}, {"id": "Lean___Parser___Attr___simple-next-next-next-next-next-next-next-next-next-next-next-next-next", "data": null, "address": "/Notations-and-Macros/Extending-Lean___s-Output/"}, {"id": "Lean___Parser___Attr___simple-next-next-next-next-next-next-next-next", "data": null, "address": "/Tactic-Proofs/Tactic-Reference/"}, {"id": "Lean___Parser___Attr___simple-next-next-next-next-next-next-next-next-next-next-next-next", "data": null, "address": "/Notations-and-Macros/Elaborators/"}, {"id": "Lean___Parser___Attr___simple-next-next-next-next-next", "data": null, "address": "/Terms/Pattern-Matching/"}], "Lean.Parser.Attr.simp": [{"id": "Lean___Parser___Attr___simp-next-next", "data": null, "address": "/The-Simplifier/Simp-sets/"}, {"id": "Lean___Parser___Attr___simp", "data": null, "address": "/The-Simplifier/Simp-sets/"}, {"id": "Lean___Parser___Attr___simp-next-next-next", "data": null, "address": "/The-Simplifier/Simp-sets/"}, {"id": "Lean___Parser___Attr___simp-next", "data": null, "address": "/The-Simplifier/Simp-sets/"}], "Lean.Parser.Attr.macro": [{"id": "Lean___Parser___Attr___macro", "data": null, "address": "/Notations-and-Macros/Macros/"}], "Lean.Parser.Attr.instance": [{"id": "Lean___Parser___Attr___instance", "data": null, "address": "/Type-Classes/Instance-Declarations/"}], "Lean.Parser.Attr.grindMod": [{"id": "Lean___Parser___Attr___grindMod-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next", "data": null, "address": "/The--grind--tactic/E___matching/"}, {"id": "Lean___Parser___Attr___grindMod-next-next-next-next-next-next-next-next-next-next-next-next", "data": null, "address": "/The--grind--tactic/E___matching/"}, {"id": "Lean___Parser___Attr___grindMod-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next", "data": null, "address": "/The--grind--tactic/E___matching/"}, {"id": "Lean___Parser___Attr___grindMod-next-next", "data": null, "address": "/The--grind--tactic/E___matching/"}, {"id": "Lean___Parser___Attr___grindMod-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next", "data": null, "address": "/The--grind--tactic/E___matching/"}, {"id": "Lean___Parser___Attr___grindMod-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next", "data": null, "address": "/The--grind--tactic/E___matching/"}, {"id": "Lean___Parser___Attr___grindMod-next-next-next-next-next-next", "data": null, "address": "/The--grind--tactic/E___matching/"}, {"id": "Lean___Parser___Attr___grindMod-next-next-next-next-next-next-next-next-next-next", "data": null, "address": "/The--grind--tactic/E___matching/"}, {"id": "Lean___Parser___Attr___grindMod-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next", "data": null, "address": "/The--grind--tactic/E___matching/"}, {"id": "Lean___Parser___Attr___grindMod-next", "data": null, "address": "/The--grind--tactic/E___matching/"}, {"id": "Lean___Parser___Attr___grindMod-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next", "data": null, "address": "/The--grind--tactic/E___matching/"}, {"id": "Lean___Parser___Attr___grindMod-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next", "data": null, "address": "/The--grind--tactic/E___matching/"}, {"id": "Lean___Parser___Attr___grindMod-next-next-next-next", "data": null, "address": "/The--grind--tactic/E___matching/"}, {"id": "Lean___Parser___Attr___grindMod-next-next-next-next-next-next-next-next-next-next-next-next-next-next", "data": null, "address": "/The--grind--tactic/E___matching/"}, {"id": "Lean___Parser___Attr___grindMod-next-next-next-next-next-next-next-next", "data": null, "address": "/The--grind--tactic/E___matching/"}], "Lean.Parser.Attr.grind?": [{"id": "Lean___Parser___Attr___grind___-next", "data": null, "address": "/The--grind--tactic/E___matching/"}], "Lean.Parser.Attr.grind!?": [{"id": "Lean___Parser___Attr___grind______", "data": null, "address": "/The--grind--tactic/E___matching/"}], "Lean.Parser.Attr.grind!": [{"id": "Lean___Parser___Attr___grind___", "data": null, "address": "/The--grind--tactic/E___matching/"}], "Lean.Parser.Attr.grind": [{"id": "Lean___Parser___Attr___grind-next-next", "data": null, "address": "/The--grind--tactic/E___matching/"}, {"id": "Lean___Parser___Attr___grind-next", "data": null, "address": "/The--grind--tactic/Case-Analysis/"}, {"id": "Lean___Parser___Attr___grind", "data": null, "address": "/The--grind--tactic/Case-Analysis/"}], "Lean.Parser.Attr.extern": [{"id": "Lean___Parser___Attr___extern", "data": null, "address": "/Run-Time-Code/Foreign-Function-Interface/"}], "Lean.Parser.Attr.export": [{"id": "Lean___Parser___Attr___export", "data": null, "address": "/Run-Time-Code/Foreign-Function-Interface/"}], "Lean.Parser.Attr.default_instance": [{"id": "Lean___Parser___Attr___default_instance", "data": null, "address": "/Type-Classes/Instance-Declarations/"}], "Lean.Attr.coe": [{"id": "Lean___Attr___coe", "data": null, "address": "/Coercions/Coercing-Between-Types/"}], "Lake.DSL.targetCommand": [{"id": "Lake___DSL___targetCommand", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.DSL.scriptDecl": [{"id": "Lake___DSL___scriptDecl", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.DSL.runIO": [{"id": "Lake___DSL___runIO", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.DSL.requireDecl": [{"id": "Lake___DSL___requireDecl", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.DSL.postUpdateDecl": [{"id": "Lake___DSL___postUpdateDecl", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.DSL.packageFacetDecl": [{"id": "Lake___DSL___packageFacetDecl", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.DSL.packageCommand": [{"id": "Lake___DSL___packageCommand", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}, {"id": "Lake___DSL___packageCommand-next-next", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}, {"id": "Lake___DSL___packageCommand-next", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.DSL.moduleFacetDecl": [{"id": "Lake___DSL___moduleFacetDecl", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.DSL.metaIf": [{"id": "Lake___DSL___metaIf", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.DSL.libraryFacetDecl": [{"id": "Lake___DSL___libraryFacetDecl", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.DSL.leanLibCommand": [{"id": "Lake___DSL___leanLibCommand", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}, {"id": "Lake___DSL___leanLibCommand-next-next", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}, {"id": "Lake___DSL___leanLibCommand-next", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.DSL.leanExeCommand": [{"id": "Lake___DSL___leanExeCommand-next-next", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}, {"id": "Lake___DSL___leanExeCommand", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}, {"id": "Lake___DSL___leanExeCommand-next", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.DSL.getConfig": [{"id": "Lake___DSL___getConfig", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.DSL.fromClause": [{"id": "Lake___DSL___fromClause-next", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}, {"id": "Lake___DSL___fromClause", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.DSL.externLibCommand": [{"id": "Lake___DSL___externLibCommand", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.DSL.dirConst": [{"id": "Lake___DSL___dirConst", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.DSL.declField": [{"id": "Lake___DSL___declField-next", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.DSL.cmdDo": [{"id": "Lake___DSL___cmdDo", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}, {"id": "Lake___DSL___cmdDo-next", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "Int.«term-[_+1]»": [{"id": "Int____FLQQ_term-_LSQ_____1_RSQ__FLQQ_", "data": null, "address": "/Basic-Types/Integers/"}], "Bool.«term_^^_»": [{"id": "Bool____FLQQ_term_________FLQQ_", "data": null, "address": "/Basic-Types/Booleans/"}], "BitVec.«term__#__»": [{"id": "BitVec____FLQQ_term________FLQQ_", "data": null, "address": "/Basic-Types/Bitvectors/"}], "BitVec.«term__#'__»": [{"id": "BitVec____FLQQ_term___________FLQQ_", "data": null, "address": "/Basic-Types/Bitvectors/"}], "Array.«term__[_:_]»": [{"id": "Array____FLQQ_term___LSQ_______RSQ__FLQQ_", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.«term__[_:]»": [{"id": "Array____FLQQ_term___LSQ______RSQ__FLQQ_", "data": null, "address": "/Basic-Types/Arrays/"}]}}, "Verso.Genre.Manual.doc.option": {"title": "Compiler options", "description": "Compiler options", "contents": {"trace.grind.split": [{"id": "trace___grind___split", "data": null, "address": "/The--grind--tactic/Case-Analysis/"}], "trace.grind.ematch.instance": [{"id": "trace___grind___ematch___instance", "data": null, "address": "/The--grind--tactic/E___matching/"}], "trace.compiler.ir.result": [{"id": "trace___compiler___ir___result", "data": null, "address": "/Run-Time-Code/Reference-Counting/"}], "trace.Meta.Tactic.simp.rewrite": [{"id": "trace___Meta___Tactic___simp___rewrite", "data": null, "address": "/The-Simplifier/Configuring-Simplification/"}], "trace.Meta.Tactic.simp.discharge": [{"id": "trace___Meta___Tactic___simp___discharge", "data": null, "address": "/The-Simplifier/Configuring-Simplification/"}], "trace.Elab.definition.wf": [{"id": "trace___Elab___definition___wf", "data": null, "address": "/Definitions/Recursive-Definitions/"}], "tactic.skipAssignedInstances": [{"id": "tactic___skipAssignedInstances", "data": null, "address": "/Tactic-Proofs/Options/"}], "tactic.simp.trace": [{"id": "tactic___simp___trace-next", "data": null, "address": "/The-Simplifier/Configuring-Simplification/"}, {"id": "tactic___simp___trace", "data": null, "address": "/Tactic-Proofs/Options/"}], "tactic.hygienic": [{"id": "tactic___hygienic", "data": null, "address": "/Tactic-Proofs/The-Tactic-Language/"}], "tactic.customEliminators": [{"id": "tactic___customEliminators", "data": null, "address": "/Tactic-Proofs/Options/"}], "synthInstance.maxSize": [{"id": "synthInstance___maxSize", "data": null, "address": "/Type-Classes/Instance-Synthesis/"}], "synthInstance.maxHeartbeats": [{"id": "synthInstance___maxHeartbeats", "data": null, "address": "/Type-Classes/Instance-Synthesis/"}], "simprocs": [{"id": "simprocs", "data": null, "address": "/The-Simplifier/Configuring-Simplification/"}], "relaxedAutoImplicit": [{"id": "relaxedAutoImplicit", "data": null, "address": "/Definitions/Headers-and-Signatures/"}], "pp.proofs.threshold": [{"id": "pp___proofs___threshold", "data": null, "address": "/Tactic-Proofs/Reading-Proof-States/"}], "pp.proofs": [{"id": "pp___proofs", "data": null, "address": "/Tactic-Proofs/Reading-Proof-States/"}], "pp.mvars": [{"id": "pp___mvars", "data": null, "address": "/Tactic-Proofs/Reading-Proof-States/"}], "pp.maxSteps": [{"id": "pp___maxSteps", "data": null, "address": "/Tactic-Proofs/Reading-Proof-States/"}], "pp.match": [{"id": "pp___match", "data": null, "address": "/Elaboration-and-Compilation/"}], "pp.fieldNotation": [{"id": "pp___fieldNotation", "data": null, "address": "/Terms/Function-Application/"}], "pp.deepTerms.threshold": [{"id": "pp___deepTerms___threshold", "data": null, "address": "/Tactic-Proofs/Reading-Proof-States/"}], "pp.deepTerms": [{"id": "pp___deepTerms", "data": null, "address": "/Tactic-Proofs/Reading-Proof-States/"}], "linter.unnecessarySimpa": [{"id": "linter___unnecessarySimpa", "data": null, "address": "/The-Simplifier/Configuring-Simplification/"}], "inductive.autoPromoteIndices": [{"id": "inductive___autoPromoteIndices", "data": null, "address": "/The-Type-System/Inductive-Types/"}], "guard_msgs.diff": [{"id": "guard_msgs___diff", "data": null, "address": "/Interacting-with-Lean/"}], "experimental.module": [{"id": "experimental___module", "data": null, "address": "/Source-Files-and-Modules/"}], "eval.type": [{"id": "eval___type", "data": null, "address": "/Interacting-with-Lean/"}], "eval.pp": [{"id": "eval___pp", "data": null, "address": "/Interacting-with-Lean/"}], "eval.derive.repr": [{"id": "eval___derive___repr", "data": null, "address": "/Interacting-with-Lean/"}], "bootstrap.inductiveCheckResultingUniverse": [{"id": "bootstrap___inductiveCheckResultingUniverse", "data": null, "address": "/The-Type-System/Inductive-Types/"}], "backward.synthInstance.canonInstances": [{"id": "backward___synthInstance___canonInstances", "data": null, "address": "/Type-Classes/Instance-Synthesis/"}], "backward.proofsInPublic": [{"id": "backward___proofsInPublic", "data": null, "address": "/Source-Files-and-Modules/"}], "backward.privateInPublic.warn": [{"id": "backward___privateInPublic___warn", "data": null, "address": "/Source-Files-and-Modules/"}], "backward.privateInPublic": [{"id": "backward___privateInPublic", "data": null, "address": "/Source-Files-and-Modules/"}], "autoLift": [{"id": "autoLift", "data": null, "address": "/Functors___-Monads-and--do--Notation/Lifting-Monads/"}], "autoImplicit": [{"id": "autoImplicit", "data": null, "address": "/Definitions/Headers-and-Signatures/"}], "allowUnsafeReducibility": [{"id": "allowUnsafeReducibility", "data": null, "address": "/Definitions/Recursive-Definitions/"}]}}, "Verso.Genre.Manual.doc": {"title": "Lean constant reference", "description": "Lean constant reference", "contents": {"withTheReader": [{"id": "withTheReader", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "wfParam": [{"id": "wfParam", "data": null, "address": "/Definitions/Recursive-Definitions/"}], "unsafeIO": [{"id": "unsafeIO", "data": null, "address": "/Definitions/Recursive-Definitions/"}], "unsafeEIO": [{"id": "unsafeEIO", "data": null, "address": "/Definitions/Recursive-Definitions/"}], "unsafeCast": [{"id": "unsafeCast", "data": null, "address": "/Definitions/Recursive-Definitions/"}], "unsafeBaseIO": [{"id": "unsafeBaseIO", "data": null, "address": "/Definitions/Recursive-Definitions/"}], "type_eq_of_heq": [{"id": "type_eq_of_heq", "data": null, "address": "/Basic-Propositions/Propositional-Equality/"}], "tryCatchThe": [{"id": "tryCatchThe", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "throwThe": [{"id": "throwThe", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "stdSplit": [{"id": "stdSplit", "data": null, "address": "/IO/Random-Numbers/"}], "stdRange": [{"id": "stdRange", "data": null, "address": "/IO/Random-Numbers/"}], "stdNext": [{"id": "stdNext", "data": null, "address": "/IO/Random-Numbers/"}], "semiOutParam": [{"id": "semiOutParam", "data": null, "address": "/Type-Classes/Instance-Synthesis/"}], "runST": [{"id": "runST", "data": null, "address": "/IO/Mutable-References/"}], "runEST": [{"id": "runEST", "data": null, "address": "/IO/Mutable-References/"}], "rfl": [{"id": "rfl-next", "data": null, "address": "/Basic-Propositions/Propositional-Equality/"}], "reprStr": [{"id": "reprStr", "data": null, "address": "/Interacting-with-Lean/"}], "reprArg": [{"id": "reprArg", "data": null, "address": "/Interacting-with-Lean/"}], "repr": [{"id": "repr-next", "data": null, "address": "/Interacting-with-Lean/"}], "readThe": [{"id": "readThe", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "randNat": [{"id": "randNat", "data": null, "address": "/IO/Random-Numbers/"}], "randBool": [{"id": "randBool", "data": null, "address": "/IO/Random-Numbers/"}], "ptrEqList": [{"id": "ptrEqList", "data": null, "address": "/Definitions/Recursive-Definitions/"}], "ptrEq": [{"id": "ptrEq", "data": null, "address": "/Definitions/Recursive-Definitions/"}], "ptrAddrUnsafe": [{"id": "ptrAddrUnsafe", "data": null, "address": "/Definitions/Recursive-Definitions/"}], "propext": [{"id": "propext", "data": null, "address": "/The-Type-System/Propositions/"}], "outParam": [{"id": "outParam", "data": null, "address": "/Type-Classes/Instance-Synthesis/"}], "orM": [{"id": "orM", "data": null, "address": "/Functors___-Monads-and--do--Notation/API-Reference/"}], "optional": [{"id": "optional", "data": null, "address": "/Functors___-Monads-and--do--Notation/API-Reference/"}], "optParam": [{"id": "optParam", "data": null, "address": "/Terms/Function-Application/"}], "notM": [{"id": "notM", "data": null, "address": "/Functors___-Monads-and--do--Notation/API-Reference/"}], "modifyThe": [{"id": "modifyThe", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "modifyGetThe": [{"id": "modifyGetThe", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "modify": [{"id": "modify", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "mkStdGen": [{"id": "mkStdGen", "data": null, "address": "/IO/Random-Numbers/"}], "mixHash": [{"id": "mixHash", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "minOfLe": [{"id": "minOfLe", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "maxOfLe": [{"id": "maxOfLe", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "ltOfOrd": [{"id": "ltOfOrd", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "leOfOrd": [{"id": "leOfOrd", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "isExclusiveUnsafe": [{"id": "isExclusiveUnsafe", "data": null, "address": "/Definitions/Recursive-Definitions/"}], "invImage": [{"id": "invImage", "data": null, "address": "/Definitions/Recursive-Definitions/"}], "inferInstanceAs": [{"id": "inferInstanceAs", "data": null, "address": "/Type-Classes/Instance-Synthesis/"}], "inferInstance": [{"id": "inferInstance", "data": null, "address": "/Type-Classes/Instance-Synthesis/"}], "heq_of_heq_of_eq": [{"id": "heq_of_heq_of_eq", "data": null, "address": "/Basic-Propositions/Propositional-Equality/"}], "heq_of_eqRec_eq": [{"id": "heq_of_eqRec_eq", "data": null, "address": "/Basic-Propositions/Propositional-Equality/"}], "heq_of_eq": [{"id": "heq_of_eq", "data": null, "address": "/Basic-Propositions/Propositional-Equality/"}], "hash_eq": [{"id": "hash_eq", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "guard": [{"id": "guard", "data": null, "address": "/Functors___-Monads-and--do--Notation/API-Reference/"}], "getThe": [{"id": "getThe", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "getModify": [{"id": "getModify", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "funext": [{"id": "funext", "data": null, "address": "/The-Type-System/Functions/"}], "eq_of_heq": [{"id": "eq_of_heq", "data": null, "address": "/Basic-Propositions/Propositional-Equality/"}], "eqRec_heq": [{"id": "eqRec_heq", "data": null, "address": "/Basic-Propositions/Propositional-Equality/"}], "dbgTraceIfShared": [{"id": "dbgTraceIfShared", "data": null, "address": "/Run-Time-Code/Reference-Counting/"}], "controlAt": [{"id": "controlAt", "data": null, "address": "/Functors___-Monads-and--do--Notation/Lifting-Monads/"}], "control": [{"id": "control", "data": null, "address": "/Functors___-Monads-and--do--Notation/Lifting-Monads/"}], "congrFun": [{"id": "congrFun", "data": null, "address": "/Basic-Propositions/Propositional-Equality/"}], "congrArg": [{"id": "congrArg", "data": null, "address": "/Basic-Propositions/Propositional-Equality/"}], "congr": [{"id": "congr-next", "data": null, "address": "/Basic-Propositions/Propositional-Equality/"}], "cond": [{"id": "cond", "data": null, "address": "/Basic-Types/Booleans/"}], "compareOn": [{"id": "compareOn", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "compareOfLessAndEq": [{"id": "compareOfLessAndEq", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "compareOfLessAndBEq": [{"id": "compareOfLessAndBEq", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "compareLex": [{"id": "compareLex", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "cast_heq": [{"id": "cast_heq", "data": null, "address": "/Basic-Propositions/Propositional-Equality/"}], "cast": [{"id": "cast", "data": null, "address": "/Basic-Propositions/Propositional-Equality/"}], "binderNameHint": [{"id": "binderNameHint", "data": null, "address": "/Tactic-Proofs/Naming-Bound-Variables/"}], "autoParam": [{"id": "autoParam", "data": null, "address": "/Terms/Function-Application/"}], "andM": [{"id": "andM", "data": null, "address": "/Functors___-Monads-and--do--Notation/API-Reference/"}], "absurd": [{"id": "absurd", "data": null, "address": "/Basic-Propositions/Logical-Connectives/"}], "[anonymous]": [{"id": "LawfulApplicative___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/Laws/"}, {"id": "LawfulMonad___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/Laws/"}, {"id": "Lean___Grind___NatModule___mk", "data": null, "address": "/The--grind--tactic/Linear-Arithmetic-Solver/"}, {"id": "Lean___Grind___Field___mk", "data": null, "address": "/The--grind--tactic/Algebraic-Solver-_LPAR_Commutative-Rings___-Fields_RPAR_/"}, {"id": "GetElem______mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}, {"id": "Lean___Grind___Semiring___mk", "data": null, "address": "/The--grind--tactic/Algebraic-Solver-_LPAR_Commutative-Rings___-Fields_RPAR_/"}, {"id": "Lake___LeanLibConfig___mk", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}, {"id": "Lean___Grind___CommSemiring___mk", "data": null, "address": "/The--grind--tactic/Algebraic-Solver-_LPAR_Commutative-Rings___-Fields_RPAR_/"}, {"id": "Lake___LeanExeConfig___mk", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}, {"id": "Monad___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/"}, {"id": "Lean___Grind___CommRing___mk", "data": null, "address": "/The--grind--tactic/Algebraic-Solver-_LPAR_Commutative-Rings___-Fields_RPAR_/"}, {"id": "IO___Process___SpawnArgs___mk", "data": null, "address": "/IO/Processes/"}, {"id": "Applicative___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/"}, {"id": "Lean___Grind___OrderedRing___mk", "data": null, "address": "/The--grind--tactic/Linear-Arithmetic-Solver/"}, {"id": "Lean___Order___CCPO___mk", "data": null, "address": "/Definitions/Recursive-Definitions/"}, {"id": "Lean___Grind___IntModule___mk", "data": null, "address": "/The--grind--tactic/Linear-Arithmetic-Solver/"}, {"id": "Lean___Grind___Ring___mk", "data": null, "address": "/The--grind--tactic/Algebraic-Solver-_LPAR_Commutative-Rings___-Fields_RPAR_/"}, {"id": "EquivBEq___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}, {"id": "Std___Do___WPMonad___mk", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}, {"id": "Alternative___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/"}, {"id": "LawfulBEq___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "Zero.zero": [{"id": "Zero___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "Zero.mk": [{"id": "Zero___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "Zero": [{"id": "Zero___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "XorOp.xor": [{"id": "XorOp___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "XorOp.mk": [{"id": "XorOp___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "XorOp": [{"id": "XorOp___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "WellFoundedRelation.wf": [{"id": "WellFoundedRelation___mk", "data": null, "address": "/Definitions/Recursive-Definitions/"}], "WellFoundedRelation.rel": [{"id": "WellFoundedRelation___mk", "data": null, "address": "/Definitions/Recursive-Definitions/"}], "WellFoundedRelation.mk": [{"id": "WellFoundedRelation___mk", "data": null, "address": "/Definitions/Recursive-Definitions/"}], "WellFoundedRelation": [{"id": "WellFoundedRelation___mk", "data": null, "address": "/Definitions/Recursive-Definitions/"}], "WellFounded.intro": [{"id": "WellFounded___intro", "data": null, "address": "/Definitions/Recursive-Definitions/"}], "WellFounded.fix": [{"id": "WellFounded___fix", "data": null, "address": "/Definitions/Recursive-Definitions/"}], "WellFounded": [{"id": "WellFounded___intro", "data": null, "address": "/Definitions/Recursive-Definitions/"}], "Unit.unit": [{"id": "Unit___unit", "data": null, "address": "/Basic-Types/The-Unit-Type/"}], "Unit": [{"id": "Unit", "data": null, "address": "/Basic-Types/The-Unit-Type/"}], "USize.xor": [{"id": "USize___xor", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "USize.toUInt8": [{"id": "USize___toUInt8", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "USize.toUInt64": [{"id": "USize___toUInt64", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "USize.toUInt32": [{"id": "USize___toUInt32", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "USize.toUInt16": [{"id": "USize___toUInt16", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "USize.toNat": [{"id": "USize___toNat", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "USize.toISize": [{"id": "USize___toISize", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "USize.toFloat32": [{"id": "USize___toFloat32", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "USize.toFloat": [{"id": "USize___toFloat", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "USize.toFin": [{"id": "USize___toFin", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "USize.toBitVec": [{"id": "USize___ofBitVec", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "USize.sub": [{"id": "USize___sub", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "USize.size": [{"id": "USize___size", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "USize.shiftRight": [{"id": "USize___shiftRight", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "USize.shiftLeft": [{"id": "USize___shiftLeft", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "USize.repr": [{"id": "USize___repr", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "USize.ofNatTruncate": [{"id": "USize___ofNatTruncate", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "USize.ofNatLT": [{"id": "USize___ofNatLT", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "USize.ofNat32": [{"id": "USize___ofNat32", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "USize.ofNat": [{"id": "USize___ofNat", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "USize.ofFin": [{"id": "USize___ofFin", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "USize.ofBitVec": [{"id": "USize___ofBitVec", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "USize.neg": [{"id": "USize___neg", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "USize.mul": [{"id": "USize___mul", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "USize.mod": [{"id": "USize___mod", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "USize.lt": [{"id": "USize___lt", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "USize.lor": [{"id": "USize___lor", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "USize.log2": [{"id": "USize___log2", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "USize.le": [{"id": "USize___le", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "USize.land": [{"id": "USize___land", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "USize.div": [{"id": "USize___div", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "USize.decLt": [{"id": "USize___decLt", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "USize.decLe": [{"id": "USize___decLe", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "USize.decEq": [{"id": "USize___decEq", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "USize.complement": [{"id": "USize___complement", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "USize.add": [{"id": "USize___add", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "USize": [{"id": "USize___ofBitVec", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "ULift.up": [{"id": "ULift___up", "data": null, "address": "/The-Type-System/Universes/"}], "ULift.down": [{"id": "ULift___up", "data": null, "address": "/The-Type-System/Universes/"}], "ULift": [{"id": "ULift___up", "data": null, "address": "/The-Type-System/Universes/"}], "UInt8.xor": [{"id": "UInt8___xor", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt8.toUSize": [{"id": "UInt8___toUSize", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt8.toUInt64": [{"id": "UInt8___toUInt64", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt8.toUInt32": [{"id": "UInt8___toUInt32", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt8.toUInt16": [{"id": "UInt8___toUInt16", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt8.toNat": [{"id": "UInt8___toNat", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt8.toInt8": [{"id": "UInt8___toInt8", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt8.toFloat32": [{"id": "UInt8___toFloat32", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt8.toFloat": [{"id": "UInt8___toFloat", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt8.toFin": [{"id": "UInt8___toFin", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt8.toBitVec": [{"id": "UInt8___ofBitVec", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt8.sub": [{"id": "UInt8___sub", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt8.size": [{"id": "UInt8___size", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt8.shiftRight": [{"id": "UInt8___shiftRight", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt8.shiftLeft": [{"id": "UInt8___shiftLeft", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt8.ofNatTruncate": [{"id": "UInt8___ofNatTruncate", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt8.ofNatLT": [{"id": "UInt8___ofNatLT", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt8.ofNat": [{"id": "UInt8___ofNat", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt8.ofFin": [{"id": "UInt8___ofFin", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt8.ofBitVec": [{"id": "UInt8___ofBitVec", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt8.neg": [{"id": "UInt8___neg", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt8.mul": [{"id": "UInt8___mul", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt8.mod": [{"id": "UInt8___mod", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt8.lt": [{"id": "UInt8___lt", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt8.lor": [{"id": "UInt8___lor", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt8.log2": [{"id": "UInt8___log2", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt8.le": [{"id": "UInt8___le", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt8.land": [{"id": "UInt8___land", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt8.div": [{"id": "UInt8___div", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt8.decLt": [{"id": "UInt8___decLt", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt8.decLe": [{"id": "UInt8___decLe", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt8.decEq": [{"id": "UInt8___decEq", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt8.complement": [{"id": "UInt8___complement", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt8.add": [{"id": "UInt8___add", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt8": [{"id": "UInt8___ofBitVec", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt64.xor": [{"id": "UInt64___xor", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt64.toUSize": [{"id": "UInt64___toUSize", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt64.toUInt8": [{"id": "UInt64___toUInt8", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt64.toUInt32": [{"id": "UInt64___toUInt32", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt64.toUInt16": [{"id": "UInt64___toUInt16", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt64.toNat": [{"id": "UInt64___toNat", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt64.toInt64": [{"id": "UInt64___toInt64", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt64.toFloat32": [{"id": "UInt64___toFloat32", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt64.toFloat": [{"id": "UInt64___toFloat", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt64.toFin": [{"id": "UInt64___toFin", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt64.toBitVec": [{"id": "UInt64___ofBitVec", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt64.sub": [{"id": "UInt64___sub", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt64.size": [{"id": "UInt64___size", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt64.shiftRight": [{"id": "UInt64___shiftRight", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt64.shiftLeft": [{"id": "UInt64___shiftLeft", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt64.ofNatTruncate": [{"id": "UInt64___ofNatTruncate", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt64.ofNatLT": [{"id": "UInt64___ofNatLT", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt64.ofNat": [{"id": "UInt64___ofNat", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt64.ofFin": [{"id": "UInt64___ofFin", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt64.ofBitVec": [{"id": "UInt64___ofBitVec", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt64.neg": [{"id": "UInt64___neg", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt64.mul": [{"id": "UInt64___mul", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt64.mod": [{"id": "UInt64___mod", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt64.lt": [{"id": "UInt64___lt", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt64.lor": [{"id": "UInt64___lor", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt64.log2": [{"id": "UInt64___log2", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt64.le": [{"id": "UInt64___le", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt64.land": [{"id": "UInt64___land", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt64.div": [{"id": "UInt64___div", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt64.decLt": [{"id": "UInt64___decLt", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt64.decLe": [{"id": "UInt64___decLe", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt64.decEq": [{"id": "UInt64___decEq", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt64.complement": [{"id": "UInt64___complement", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt64.add": [{"id": "UInt64___add", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt64": [{"id": "UInt64___ofBitVec", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt32.xor": [{"id": "UInt32___xor", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt32.toUSize": [{"id": "UInt32___toUSize", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt32.toUInt8": [{"id": "UInt32___toUInt8", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt32.toUInt64": [{"id": "UInt32___toUInt64", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt32.toUInt16": [{"id": "UInt32___toUInt16", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt32.toNat": [{"id": "UInt32___toNat", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt32.toInt32": [{"id": "UInt32___toInt32", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt32.toFloat32": [{"id": "UInt32___toFloat32", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt32.toFloat": [{"id": "UInt32___toFloat", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt32.toFin": [{"id": "UInt32___toFin", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt32.toBitVec": [{"id": "UInt32___ofBitVec", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt32.sub": [{"id": "UInt32___sub", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt32.size": [{"id": "UInt32___size", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt32.shiftRight": [{"id": "UInt32___shiftRight", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt32.shiftLeft": [{"id": "UInt32___shiftLeft", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt32.ofNatTruncate": [{"id": "UInt32___ofNatTruncate", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt32.ofNatLT": [{"id": "UInt32___ofNatLT", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt32.ofNat": [{"id": "UInt32___ofNat", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt32.ofFin": [{"id": "UInt32___ofFin", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt32.ofBitVec": [{"id": "UInt32___ofBitVec", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt32.neg": [{"id": "UInt32___neg", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt32.mul": [{"id": "UInt32___mul", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt32.mod": [{"id": "UInt32___mod", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt32.lt": [{"id": "UInt32___lt", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt32.lor": [{"id": "UInt32___lor", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt32.log2": [{"id": "UInt32___log2", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt32.le": [{"id": "UInt32___le", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt32.land": [{"id": "UInt32___land", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt32.isValidChar": [{"id": "UInt32___isValidChar", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt32.div": [{"id": "UInt32___div", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt32.decLt": [{"id": "UInt32___decLt", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt32.decLe": [{"id": "UInt32___decLe", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt32.decEq": [{"id": "UInt32___decEq", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt32.complement": [{"id": "UInt32___complement", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt32.add": [{"id": "UInt32___add", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt32": [{"id": "UInt32___ofBitVec", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt16.xor": [{"id": "UInt16___xor", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt16.toUSize": [{"id": "UInt16___toUSize", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt16.toUInt8": [{"id": "UInt16___toUInt8", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt16.toUInt64": [{"id": "UInt16___toUInt64", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt16.toUInt32": [{"id": "UInt16___toUInt32", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt16.toNat": [{"id": "UInt16___toNat", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt16.toInt16": [{"id": "UInt16___toInt16", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt16.toFloat32": [{"id": "UInt16___toFloat32", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt16.toFloat": [{"id": "UInt16___toFloat", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt16.toFin": [{"id": "UInt16___toFin", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt16.toBitVec": [{"id": "UInt16___ofBitVec", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt16.sub": [{"id": "UInt16___sub", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt16.size": [{"id": "UInt16___size", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt16.shiftRight": [{"id": "UInt16___shiftRight", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt16.shiftLeft": [{"id": "UInt16___shiftLeft", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt16.ofNatTruncate": [{"id": "UInt16___ofNatTruncate", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt16.ofNatLT": [{"id": "UInt16___ofNatLT", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt16.ofNat": [{"id": "UInt16___ofNat", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt16.ofFin": [{"id": "UInt16___ofFin", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt16.ofBitVec": [{"id": "UInt16___ofBitVec", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt16.neg": [{"id": "UInt16___neg", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt16.mul": [{"id": "UInt16___mul", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt16.mod": [{"id": "UInt16___mod", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt16.lt": [{"id": "UInt16___lt", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt16.lor": [{"id": "UInt16___lor", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt16.log2": [{"id": "UInt16___log2", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt16.le": [{"id": "UInt16___le", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt16.land": [{"id": "UInt16___land", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt16.div": [{"id": "UInt16___div", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt16.decLt": [{"id": "UInt16___decLt", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt16.decLe": [{"id": "UInt16___decLe", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt16.decEq": [{"id": "UInt16___decEq", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt16.complement": [{"id": "UInt16___complement", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt16.add": [{"id": "UInt16___add", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "UInt16": [{"id": "UInt16___ofBitVec", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "True.intro": [{"id": "True___intro", "data": null, "address": "/Basic-Propositions/Truth/"}], "True": [{"id": "True___intro", "data": null, "address": "/Basic-Propositions/Truth/"}], "Trans.trans": [{"id": "Trans___mk", "data": null, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Trans.mk": [{"id": "Trans___mk", "data": null, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Trans": [{"id": "Trans___mk", "data": null, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Thunk.pure": [{"id": "Thunk___pure", "data": null, "address": "/Basic-Types/Lazy-Computations/"}], "Thunk.mk": [{"id": "Thunk___mk", "data": null, "address": "/Basic-Types/Lazy-Computations/"}], "Thunk.map": [{"id": "Thunk___map", "data": null, "address": "/Basic-Types/Lazy-Computations/"}], "Thunk.get": [{"id": "Thunk___get", "data": null, "address": "/Basic-Types/Lazy-Computations/"}], "Thunk.fn": [{"id": "Thunk___mk", "data": null, "address": "/Basic-Types/Lazy-Computations/"}], "Thunk.bind": [{"id": "Thunk___bind", "data": null, "address": "/Basic-Types/Lazy-Computations/"}], "Thunk": [{"id": "Thunk___mk", "data": null, "address": "/Basic-Types/Lazy-Computations/"}], "Task.spawn": [{"id": "Task___spawn", "data": null, "address": "/IO/Tasks-and-Threads/"}], "Task.pure": [{"id": "Task___pure", "data": null, "address": "/IO/Tasks-and-Threads/"}], "Task.mapList": [{"id": "Task___mapList", "data": null, "address": "/IO/Tasks-and-Threads/"}], "Task.map": [{"id": "Task___map", "data": null, "address": "/IO/Tasks-and-Threads/"}], "Task.get": [{"id": "Task___get", "data": null, "address": "/IO/Tasks-and-Threads/"}], "Task.bind": [{"id": "Task___bind", "data": null, "address": "/IO/Tasks-and-Threads/"}], "Task.Priority.max": [{"id": "Task___Priority___max", "data": null, "address": "/IO/Tasks-and-Threads/"}], "Task.Priority.default": [{"id": "Task___Priority___default", "data": null, "address": "/IO/Tasks-and-Threads/"}], "Task.Priority.dedicated": [{"id": "Task___Priority___dedicated", "data": null, "address": "/IO/Tasks-and-Threads/"}], "Task.Priority": [{"id": "Task___Priority", "data": null, "address": "/IO/Tasks-and-Threads/"}], "Task": [{"id": "Task", "data": null, "address": "/IO/Tasks-and-Threads/"}], "System.mkFilePath": [{"id": "System___mkFilePath", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "System.Platform.target": [{"id": "System___Platform___target", "data": null, "address": "/IO/System-and-Platform-Information/"}], "System.Platform.numBits": [{"id": "System___Platform___numBits", "data": null, "address": "/IO/System-and-Platform-Information/"}], "System.Platform.isWindows": [{"id": "System___Platform___isWindows", "data": null, "address": "/IO/System-and-Platform-Information/"}], "System.Platform.isOSX": [{"id": "System___Platform___isOSX", "data": null, "address": "/IO/System-and-Platform-Information/"}], "System.Platform.isEmscripten": [{"id": "System___Platform___isEmscripten", "data": null, "address": "/IO/System-and-Platform-Information/"}], "System.FilePath.withFileName": [{"id": "System___FilePath___withFileName", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "System.FilePath.withExtension": [{"id": "System___FilePath___withExtension", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "System.FilePath.walkDir": [{"id": "System___FilePath___walkDir", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "System.FilePath.toString": [{"id": "System___FilePath___mk", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "System.FilePath.symlinkMetadata": [{"id": "System___FilePath___symlinkMetadata", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "System.FilePath.readDir": [{"id": "System___FilePath___readDir", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "System.FilePath.pathSeparators": [{"id": "System___FilePath___pathSeparators", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "System.FilePath.pathSeparator": [{"id": "System___FilePath___pathSeparator", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "System.FilePath.pathExists": [{"id": "System___FilePath___pathExists", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "System.FilePath.parent": [{"id": "System___FilePath___parent", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "System.FilePath.normalize": [{"id": "System___FilePath___normalize", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "System.FilePath.mk": [{"id": "System___FilePath___mk", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "System.FilePath.metadata": [{"id": "System___FilePath___metadata", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "System.FilePath.join": [{"id": "System___FilePath___join", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "System.FilePath.isRelative": [{"id": "System___FilePath___isRelative", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "System.FilePath.isDir": [{"id": "System___FilePath___isDir", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "System.FilePath.isAbsolute": [{"id": "System___FilePath___isAbsolute", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "System.FilePath.fileStem": [{"id": "System___FilePath___fileStem", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "System.FilePath.fileName": [{"id": "System___FilePath___fileName", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "System.FilePath.extension": [{"id": "System___FilePath___extension", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "System.FilePath.extSeparator": [{"id": "System___FilePath___extSeparator", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "System.FilePath.exeExtension": [{"id": "System___FilePath___exeExtension", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "System.FilePath.components": [{"id": "System___FilePath___components", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "System.FilePath.addExtension": [{"id": "System___FilePath___addExtension", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "System.FilePath": [{"id": "System___FilePath___mk", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "Sum.swap": [{"id": "Sum___swap", "data": null, "address": "/Basic-Types/Sum-Types/"}], "Sum.map": [{"id": "Sum___map", "data": null, "address": "/Basic-Types/Sum-Types/"}], "Sum.isRight": [{"id": "Sum___isRight", "data": null, "address": "/Basic-Types/Sum-Types/"}], "Sum.isLeft": [{"id": "Sum___isLeft", "data": null, "address": "/Basic-Types/Sum-Types/"}], "Sum.inr": [{"id": "Sum___inl", "data": null, "address": "/Basic-Types/Sum-Types/"}], "Sum.inl": [{"id": "Sum___inl", "data": null, "address": "/Basic-Types/Sum-Types/"}], "Sum.inhabitedRight": [{"id": "Sum___inhabitedRight", "data": null, "address": "/Basic-Types/Sum-Types/"}], "Sum.inhabitedLeft": [{"id": "Sum___inhabitedLeft", "data": null, "address": "/Basic-Types/Sum-Types/"}], "Sum.getRight?": [{"id": "Sum___getRight___", "data": null, "address": "/Basic-Types/Sum-Types/"}], "Sum.getRight": [{"id": "Sum___getRight", "data": null, "address": "/Basic-Types/Sum-Types/"}], "Sum.getLeft?": [{"id": "Sum___getLeft___", "data": null, "address": "/Basic-Types/Sum-Types/"}], "Sum.getLeft": [{"id": "Sum___getLeft", "data": null, "address": "/Basic-Types/Sum-Types/"}], "Sum.elim": [{"id": "Sum___elim", "data": null, "address": "/Basic-Types/Sum-Types/"}], "Sum": [{"id": "Sum___inl", "data": null, "address": "/Basic-Types/Sum-Types/"}], "Subtype.val": [{"id": "Subtype___mk", "data": null, "address": "/Basic-Types/Subtypes/"}], "Subtype.property": [{"id": "Subtype___mk", "data": null, "address": "/Basic-Types/Subtypes/"}], "Subtype.mk": [{"id": "Subtype___mk", "data": null, "address": "/Basic-Types/Subtypes/"}], "Subtype": [{"id": "Subtype___mk", "data": null, "address": "/Basic-Types/Subtypes/"}], "Substring.Raw.trimRight": [{"id": "Substring___Raw___trimRight", "data": null, "address": "/Basic-Types/Strings/"}], "Substring.Raw.trimLeft": [{"id": "Substring___Raw___trimLeft", "data": null, "address": "/Basic-Types/Strings/"}], "Substring.Raw.trim": [{"id": "Substring___Raw___trim", "data": null, "address": "/Basic-Types/Strings/"}], "Substring.Raw.toString": [{"id": "Substring___Raw___toString", "data": null, "address": "/Basic-Types/Strings/"}], "Substring.Raw.toNat?": [{"id": "Substring___Raw___toNat___", "data": null, "address": "/Basic-Types/Strings/"}], "Substring.Raw.toName": [{"id": "Substring___Raw___toName", "data": null, "address": "/Basic-Types/Strings/"}], "Substring.Raw.toLegacyIterator": [{"id": "Substring___Raw___toLegacyIterator", "data": null, "address": "/Basic-Types/Strings/"}], "Substring.Raw.takeWhile": [{"id": "Substring___Raw___takeWhile", "data": null, "address": "/Basic-Types/Strings/"}], "Substring.Raw.takeRightWhile": [{"id": "Substring___Raw___takeRightWhile", "data": null, "address": "/Basic-Types/Strings/"}], "Substring.Raw.takeRight": [{"id": "Substring___Raw___takeRight", "data": null, "address": "/Basic-Types/Strings/"}], "Substring.Raw.take": [{"id": "Substring___Raw___take", "data": null, "address": "/Basic-Types/Strings/"}], "Substring.Raw.str": [{"id": "Substring___Raw___mk", "data": null, "address": "/Basic-Types/Strings/"}], "Substring.Raw.stopPos": [{"id": "Substring___Raw___mk", "data": null, "address": "/Basic-Types/Strings/"}], "Substring.Raw.startPos": [{"id": "Substring___Raw___mk", "data": null, "address": "/Basic-Types/Strings/"}], "Substring.Raw.splitOn": [{"id": "Substring___Raw___splitOn", "data": null, "address": "/Basic-Types/Strings/"}], "Substring.Raw.sameAs": [{"id": "Substring___Raw___sameAs", "data": null, "address": "/Basic-Types/Strings/"}], "Substring.Raw.repair": [{"id": "Substring___Raw___repair", "data": null, "address": "/Basic-Types/Strings/"}], "Substring.Raw.prevn": [{"id": "Substring___Raw___prevn", "data": null, "address": "/Basic-Types/Strings/"}], "Substring.Raw.prev": [{"id": "Substring___Raw___prev", "data": null, "address": "/Basic-Types/Strings/"}], "Substring.Raw.posOf": [{"id": "Substring___Raw___posOf", "data": null, "address": "/Basic-Types/Strings/"}], "Substring.Raw.nextn": [{"id": "Substring___Raw___nextn", "data": null, "address": "/Basic-Types/Strings/"}], "Substring.Raw.next": [{"id": "Substring___Raw___next", "data": null, "address": "/Basic-Types/Strings/"}], "Substring.Raw.mk": [{"id": "Substring___Raw___mk", "data": null, "address": "/Basic-Types/Strings/"}], "Substring.Raw.isNat": [{"id": "Substring___Raw___isNat", "data": null, "address": "/Basic-Types/Strings/"}], "Substring.Raw.isEmpty": [{"id": "Substring___Raw___isEmpty", "data": null, "address": "/Basic-Types/Strings/"}], "Substring.Raw.get": [{"id": "Substring___Raw___get", "data": null, "address": "/Basic-Types/Strings/"}], "Substring.Raw.front": [{"id": "Substring___Raw___front", "data": null, "address": "/Basic-Types/Strings/"}], "Substring.Raw.foldr": [{"id": "Substring___Raw___foldr", "data": null, "address": "/Basic-Types/Strings/"}], "Substring.Raw.foldl": [{"id": "Substring___Raw___foldl", "data": null, "address": "/Basic-Types/Strings/"}], "Substring.Raw.extract": [{"id": "Substring___Raw___extract", "data": null, "address": "/Basic-Types/Strings/"}], "Substring.Raw.dropWhile": [{"id": "Substring___Raw___dropWhile", "data": null, "address": "/Basic-Types/Strings/"}], "Substring.Raw.dropSuffix?": [{"id": "Substring___Raw___dropSuffix___", "data": null, "address": "/Basic-Types/Strings/"}], "Substring.Raw.dropRightWhile": [{"id": "Substring___Raw___dropRightWhile", "data": null, "address": "/Basic-Types/Strings/"}], "Substring.Raw.dropRight": [{"id": "Substring___Raw___dropRight", "data": null, "address": "/Basic-Types/Strings/"}], "Substring.Raw.dropPrefix?": [{"id": "Substring___Raw___dropPrefix___", "data": null, "address": "/Basic-Types/Strings/"}], "Substring.Raw.drop": [{"id": "Substring___Raw___drop", "data": null, "address": "/Basic-Types/Strings/"}], "Substring.Raw.contains": [{"id": "Substring___Raw___contains", "data": null, "address": "/Basic-Types/Strings/"}], "Substring.Raw.commonSuffix": [{"id": "Substring___Raw___commonSuffix", "data": null, "address": "/Basic-Types/Strings/"}], "Substring.Raw.commonPrefix": [{"id": "Substring___Raw___commonPrefix", "data": null, "address": "/Basic-Types/Strings/"}], "Substring.Raw.bsize": [{"id": "Substring___Raw___bsize", "data": null, "address": "/Basic-Types/Strings/"}], "Substring.Raw.beq": [{"id": "Substring___Raw___beq", "data": null, "address": "/Basic-Types/Strings/"}], "Substring.Raw.atEnd": [{"id": "Substring___Raw___atEnd", "data": null, "address": "/Basic-Types/Strings/"}], "Substring.Raw.any": [{"id": "Substring___Raw___any", "data": null, "address": "/Basic-Types/Strings/"}], "Substring.Raw.all": [{"id": "Substring___Raw___all", "data": null, "address": "/Basic-Types/Strings/"}], "Substring.Raw": [{"id": "Substring___Raw___mk", "data": null, "address": "/Basic-Types/Strings/"}], "Subsingleton.intro": [{"id": "Subsingleton___intro", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "Subsingleton.helim": [{"id": "Subsingleton___helim", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "Subsingleton.elim": [{"id": "Subsingleton___elim", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "Subsingleton.allEq": [{"id": "Subsingleton___intro", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "Subsingleton": [{"id": "Subsingleton___intro", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "Subarray.toArray": [{"id": "Subarray___toArray", "data": null, "address": "/Basic-Types/Arrays/"}], "Subarray.take": [{"id": "Subarray___take", "data": null, "address": "/Basic-Types/Arrays/"}], "Subarray.stop_le_array_size": [{"id": "Subarray___stop_le_array_size", "data": null, "address": "/Basic-Types/Arrays/"}], "Subarray.stop": [{"id": "Subarray___stop", "data": null, "address": "/Basic-Types/Arrays/"}], "Subarray.start_le_stop": [{"id": "Subarray___start_le_stop", "data": null, "address": "/Basic-Types/Arrays/"}], "Subarray.start": [{"id": "Subarray___start", "data": null, "address": "/Basic-Types/Arrays/"}], "Subarray.split": [{"id": "Subarray___split", "data": null, "address": "/Basic-Types/Arrays/"}], "Subarray.size": [{"id": "Subarray___size", "data": null, "address": "/Basic-Types/Arrays/"}], "Subarray.popFront": [{"id": "Subarray___popFront", "data": null, "address": "/Basic-Types/Arrays/"}], "Subarray.getD": [{"id": "Subarray___getD", "data": null, "address": "/Basic-Types/Arrays/"}], "Subarray.get!": [{"id": "Subarray___get___", "data": null, "address": "/Basic-Types/Arrays/"}], "Subarray.get": [{"id": "Subarray___get", "data": null, "address": "/Basic-Types/Arrays/"}], "Subarray.forRevM": [{"id": "Subarray___forRevM", "data": null, "address": "/Basic-Types/Arrays/"}], "Subarray.forM": [{"id": "Subarray___forM", "data": null, "address": "/Basic-Types/Arrays/"}], "Subarray.forIn": [{"id": "Subarray___forIn", "data": null, "address": "/Basic-Types/Arrays/"}], "Subarray.foldrM": [{"id": "Subarray___foldrM", "data": null, "address": "/Basic-Types/Arrays/"}], "Subarray.foldr": [{"id": "Subarray___foldr", "data": null, "address": "/Basic-Types/Arrays/"}], "Subarray.foldlM": [{"id": "Subarray___foldlM", "data": null, "address": "/Basic-Types/Arrays/"}], "Subarray.foldl": [{"id": "Subarray___foldl", "data": null, "address": "/Basic-Types/Arrays/"}], "Subarray.findSomeRevM?": [{"id": "Subarray___findSomeRevM___", "data": null, "address": "/Basic-Types/Arrays/"}], "Subarray.findRevM?": [{"id": "Subarray___findRevM___", "data": null, "address": "/Basic-Types/Arrays/"}], "Subarray.findRev?": [{"id": "Subarray___findRev___", "data": null, "address": "/Basic-Types/Arrays/"}], "Subarray.empty": [{"id": "Subarray___empty", "data": null, "address": "/Basic-Types/Arrays/"}], "Subarray.drop": [{"id": "Subarray___drop", "data": null, "address": "/Basic-Types/Arrays/"}], "Subarray.array": [{"id": "Subarray___array", "data": null, "address": "/Basic-Types/Arrays/"}], "Subarray.anyM": [{"id": "Subarray___anyM", "data": null, "address": "/Basic-Types/Arrays/"}], "Subarray.any": [{"id": "Subarray___any", "data": null, "address": "/Basic-Types/Arrays/"}], "Subarray.allM": [{"id": "Subarray___allM", "data": null, "address": "/Basic-Types/Arrays/"}], "Subarray.all": [{"id": "Subarray___all", "data": null, "address": "/Basic-Types/Arrays/"}], "Subarray": [{"id": "Subarray", "data": null, "address": "/Basic-Types/Arrays/"}], "Sub.sub": [{"id": "Sub___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "Sub.mk": [{"id": "Sub___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "Sub": [{"id": "Sub___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "String.utf8EncodeChar": [{"id": "String___utf8EncodeChar", "data": null, "address": "/Basic-Types/Strings/"}], "String.utf8ByteSize": [{"id": "String___utf8ByteSize", "data": null, "address": "/Basic-Types/Strings/"}], "String.trimRight": [{"id": "String___trimRight", "data": null, "address": "/Basic-Types/Strings/"}], "String.trimLeft": [{"id": "String___trimLeft", "data": null, "address": "/Basic-Types/Strings/"}], "String.trim": [{"id": "String___trim", "data": null, "address": "/Basic-Types/Strings/"}], "String.toUpper": [{"id": "String___toUpper", "data": null, "address": "/Basic-Types/Strings/"}], "String.toUTF8": [{"id": "String___toUTF8", "data": null, "address": "/Basic-Types/Strings/"}], "String.toSlice": [{"id": "String___toSlice", "data": null, "address": "/Basic-Types/Strings/"}], "String.toRawSubstring'": [{"id": "String___toRawSubstring___", "data": null, "address": "/Basic-Types/Strings/"}], "String.toRawSubstring": [{"id": "String___toRawSubstring", "data": null, "address": "/Basic-Types/Strings/"}], "String.toNat?": [{"id": "String___toNat___", "data": null, "address": "/Basic-Types/Strings/"}], "String.toNat!": [{"id": "String___toNat___-next", "data": null, "address": "/Basic-Types/Strings/"}], "String.toName": [{"id": "String___toName", "data": null, "address": "/Basic-Types/Strings/"}], "String.toLower": [{"id": "String___toLower", "data": null, "address": "/Basic-Types/Strings/"}], "String.toList": [{"id": "String___toList", "data": null, "address": "/Basic-Types/Strings/"}, {"id": "String___toList-next", "data": null, "address": "/Basic-Types/Strings/"}], "String.toInt?": [{"id": "String___toInt___", "data": null, "address": "/Basic-Types/Strings/"}], "String.toInt!": [{"id": "String___toInt___-next", "data": null, "address": "/Basic-Types/Strings/"}], "String.toFormat": [{"id": "String___toFormat", "data": null, "address": "/Basic-Types/Strings/"}], "String.takeWhile": [{"id": "String___takeWhile", "data": null, "address": "/Basic-Types/Strings/"}], "String.takeRightWhile": [{"id": "String___takeRightWhile", "data": null, "address": "/Basic-Types/Strings/"}], "String.takeRight": [{"id": "String___takeRight", "data": null, "address": "/Basic-Types/Strings/"}], "String.take": [{"id": "String___take", "data": null, "address": "/Basic-Types/Strings/"}], "String.stripSuffix": [{"id": "String___stripSuffix", "data": null, "address": "/Basic-Types/Strings/"}], "String.stripPrefix": [{"id": "String___stripPrefix", "data": null, "address": "/Basic-Types/Strings/"}], "String.startsWith": [{"id": "String___startsWith", "data": null, "address": "/Basic-Types/Strings/"}], "String.startValidPos": [{"id": "String___startValidPos", "data": null, "address": "/Basic-Types/Strings/"}], "String.splitToList": [{"id": "String___splitToList", "data": null, "address": "/Basic-Types/Strings/"}], "String.splitOn": [{"id": "String___splitOn", "data": null, "address": "/Basic-Types/Strings/"}], "String.singleton": [{"id": "String___singleton", "data": null, "address": "/Basic-Types/Strings/"}], "String.revPosOf": [{"id": "String___revPosOf", "data": null, "address": "/Basic-Types/Strings/"}], "String.revFind": [{"id": "String___revFind", "data": null, "address": "/Basic-Types/Strings/"}], "String.replaceStart": [{"id": "String___replaceStart", "data": null, "address": "/Basic-Types/Strings/"}], "String.replaceEnd": [{"id": "String___replaceEnd", "data": null, "address": "/Basic-Types/Strings/"}], "String.replace": [{"id": "String___replace", "data": null, "address": "/Basic-Types/Strings/"}], "String.removeLeadingSpaces": [{"id": "String___removeLeadingSpaces", "data": null, "address": "/Basic-Types/Strings/"}], "String.rawEndPos": [{"id": "String___rawEndPos", "data": null, "address": "/Basic-Types/Strings/"}], "String.quote": [{"id": "String___quote", "data": null, "address": "/Basic-Types/Strings/"}], "String.pushn": [{"id": "String___pushn", "data": null, "address": "/Basic-Types/Strings/"}], "String.push": [{"id": "String___push", "data": null, "address": "/Basic-Types/Strings/"}], "String.posOf": [{"id": "String___posOf", "data": null, "address": "/Basic-Types/Strings/"}], "String.pos?": [{"id": "String___pos___", "data": null, "address": "/Basic-Types/Strings/"}], "String.pos!": [{"id": "String___pos___-next", "data": null, "address": "/Basic-Types/Strings/"}], "String.pos": [{"id": "String___pos", "data": null, "address": "/Basic-Types/Strings/"}], "String.offsetOfPos": [{"id": "String___offsetOfPos", "data": null, "address": "/Basic-Types/Strings/"}], "String.ofList": [{"id": "String___ofList", "data": null, "address": "/Basic-Types/Strings/"}], "String.ofByteArray": [{"id": "String___ofByteArray", "data": null, "address": "/Basic-Types/Strings/"}], "String.map": [{"id": "String___map", "data": null, "address": "/Basic-Types/Strings/"}], "String.length": [{"id": "String___length", "data": null, "address": "/Basic-Types/Strings/"}], "String.le": [{"id": "String___le", "data": null, "address": "/Basic-Types/Strings/"}], "String.join": [{"id": "String___join", "data": null, "address": "/Basic-Types/Strings/"}], "String.isValidUTF8": [{"id": "String___ofByteArray", "data": null, "address": "/Basic-Types/Strings/"}], "String.isPrefixOf": [{"id": "String___isPrefixOf", "data": null, "address": "/Basic-Types/Strings/"}], "String.isNat": [{"id": "String___isNat", "data": null, "address": "/Basic-Types/Strings/"}], "String.isInt": [{"id": "String___isInt", "data": null, "address": "/Basic-Types/Strings/"}], "String.isEmpty": [{"id": "String___isEmpty", "data": null, "address": "/Basic-Types/Strings/"}], "String.intercalate": [{"id": "String___intercalate", "data": null, "address": "/Basic-Types/Strings/"}], "String.hash": [{"id": "String___hash", "data": null, "address": "/Basic-Types/Strings/"}], "String.getUTF8Byte": [{"id": "String___getUTF8Byte", "data": null, "address": "/Basic-Types/Strings/"}], "String.front": [{"id": "String___front", "data": null, "address": "/Basic-Types/Strings/"}], "String.fromUTF8?": [{"id": "String___fromUTF8___", "data": null, "address": "/Basic-Types/Strings/"}], "String.fromUTF8!": [{"id": "String___fromUTF8___-next", "data": null, "address": "/Basic-Types/Strings/"}], "String.fromUTF8": [{"id": "String___fromUTF8", "data": null, "address": "/Basic-Types/Strings/"}], "String.foldr": [{"id": "String___foldr", "data": null, "address": "/Basic-Types/Strings/"}], "String.foldl": [{"id": "String___foldl", "data": null, "address": "/Basic-Types/Strings/"}], "String.firstDiffPos": [{"id": "String___firstDiffPos", "data": null, "address": "/Basic-Types/Strings/"}], "String.findLineStart": [{"id": "String___findLineStart", "data": null, "address": "/Basic-Types/Strings/"}], "String.find": [{"id": "String___find", "data": null, "address": "/Basic-Types/Strings/"}], "String.endsWith": [{"id": "String___endsWith", "data": null, "address": "/Basic-Types/Strings/"}], "String.endValidPos": [{"id": "String___endValidPos", "data": null, "address": "/Basic-Types/Strings/"}], "String.dropWhile": [{"id": "String___dropWhile", "data": null, "address": "/Basic-Types/Strings/"}], "String.dropSuffix?": [{"id": "String___dropSuffix___", "data": null, "address": "/Basic-Types/Strings/"}], "String.dropRightWhile": [{"id": "String___dropRightWhile", "data": null, "address": "/Basic-Types/Strings/"}], "String.dropRight": [{"id": "String___dropRight", "data": null, "address": "/Basic-Types/Strings/"}], "String.dropPrefix?": [{"id": "String___dropPrefix___", "data": null, "address": "/Basic-Types/Strings/"}], "String.drop": [{"id": "String___drop", "data": null, "address": "/Basic-Types/Strings/"}], "String.decapitalize": [{"id": "String___decapitalize", "data": null, "address": "/Basic-Types/Strings/"}], "String.decEq": [{"id": "String___decEq", "data": null, "address": "/Basic-Types/Strings/"}], "String.crlfToLf": [{"id": "String___crlfToLf", "data": null, "address": "/Basic-Types/Strings/"}], "String.contains": [{"id": "String___contains", "data": null, "address": "/Basic-Types/Strings/"}], "String.capitalize": [{"id": "String___capitalize", "data": null, "address": "/Basic-Types/Strings/"}], "String.bytes": [{"id": "String___ofByteArray", "data": null, "address": "/Basic-Types/Strings/"}], "String.back": [{"id": "String___back", "data": null, "address": "/Basic-Types/Strings/"}], "String.append": [{"id": "String___append", "data": null, "address": "/Basic-Types/Strings/"}], "String.any": [{"id": "String___any", "data": null, "address": "/Basic-Types/Strings/"}], "String.all": [{"id": "String___all", "data": null, "address": "/Basic-Types/Strings/"}], "String.ValidPos.toSlice": [{"id": "String___ValidPos___toSlice", "data": null, "address": "/Basic-Types/Strings/"}], "String.ValidPos.toSetOfLE": [{"id": "String___ValidPos___toSetOfLE", "data": null, "address": "/Basic-Types/Strings/"}], "String.ValidPos.toModifyOfLE": [{"id": "String___ValidPos___toModifyOfLE", "data": null, "address": "/Basic-Types/Strings/"}], "String.ValidPos.set": [{"id": "String___ValidPos___set", "data": null, "address": "/Basic-Types/Strings/"}], "String.ValidPos.prev?": [{"id": "String___ValidPos___prev___-next", "data": null, "address": "/Basic-Types/Strings/"}], "String.ValidPos.prev!": [{"id": "String___ValidPos___prev___", "data": null, "address": "/Basic-Types/Strings/"}], "String.ValidPos.prev": [{"id": "String___ValidPos___prev", "data": null, "address": "/Basic-Types/Strings/"}], "String.ValidPos.offset": [{"id": "String___ValidPos___mk", "data": null, "address": "/Basic-Types/Strings/"}], "String.ValidPos.ofCopy": [{"id": "String___ValidPos___ofCopy", "data": null, "address": "/Basic-Types/Strings/"}], "String.ValidPos.next?": [{"id": "String___ValidPos___next___-next", "data": null, "address": "/Basic-Types/Strings/"}], "String.ValidPos.next!": [{"id": "String___ValidPos___next___", "data": null, "address": "/Basic-Types/Strings/"}], "String.ValidPos.next": [{"id": "String___ValidPos___next", "data": null, "address": "/Basic-Types/Strings/"}], "String.ValidPos.modify": [{"id": "String___ValidPos___modify", "data": null, "address": "/Basic-Types/Strings/"}], "String.ValidPos.mk": [{"id": "String___ValidPos___mk", "data": null, "address": "/Basic-Types/Strings/"}], "String.ValidPos.isValid": [{"id": "String___ValidPos___mk", "data": null, "address": "/Basic-Types/Strings/"}], "String.ValidPos.get?": [{"id": "String___ValidPos___get___-next", "data": null, "address": "/Basic-Types/Strings/"}], "String.ValidPos.get!": [{"id": "String___ValidPos___get___", "data": null, "address": "/Basic-Types/Strings/"}], "String.ValidPos.get": [{"id": "String___ValidPos___get", "data": null, "address": "/Basic-Types/Strings/"}], "String.ValidPos.extract": [{"id": "String___ValidPos___extract", "data": null, "address": "/Basic-Types/Strings/"}], "String.ValidPos.cast": [{"id": "String___ValidPos___cast", "data": null, "address": "/Basic-Types/Strings/"}], "String.ValidPos.byte": [{"id": "String___ValidPos___byte", "data": null, "address": "/Basic-Types/Strings/"}], "String.ValidPos": [{"id": "String___ValidPos___mk", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.utf8ByteSize": [{"id": "String___Slice___utf8ByteSize", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.trimAsciiStart": [{"id": "String___Slice___trimAsciiStart", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.trimAsciiEnd": [{"id": "String___Slice___trimAsciiEnd", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.trimAscii": [{"id": "String___Slice___trimAscii", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.toNat?": [{"id": "String___Slice___toNat___-next", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.toNat!": [{"id": "String___Slice___toNat___", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.takeWhile": [{"id": "String___Slice___takeWhile", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.takeEndWhile": [{"id": "String___Slice___takeEndWhile", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.takeEnd": [{"id": "String___Slice___takeEnd", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.take": [{"id": "String___Slice___take", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.str": [{"id": "String___Slice___mk", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.startsWith": [{"id": "String___Slice___startsWith", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.startPos": [{"id": "String___Slice___startPos", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.startInclusive_le_endExclusive": [{"id": "String___Slice___mk", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.startInclusive": [{"id": "String___Slice___mk", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.splitInclusive": [{"id": "String___Slice___splitInclusive", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.split": [{"id": "String___Slice___split", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.revSplit": [{"id": "String___Slice___revSplit", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.revPositions": [{"id": "String___Slice___revPositions", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.revFind?": [{"id": "String___Slice___revFind___", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.revChars": [{"id": "String___Slice___revChars", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.revBytes": [{"id": "String___Slice___revBytes", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.replaceStartEnd!": [{"id": "String___Slice___replaceStartEnd___", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.replaceStartEnd": [{"id": "String___Slice___replaceStartEnd", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.replaceStart": [{"id": "String___Slice___replaceStart", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.replaceEnd": [{"id": "String___Slice___replaceEnd", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.rawEndPos": [{"id": "String___Slice___rawEndPos", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.positions": [{"id": "String___Slice___positions", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.pos?": [{"id": "String___Slice___pos___-next", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.pos!": [{"id": "String___Slice___pos___", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.pos": [{"id": "String___Slice___pos", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.mk": [{"id": "String___Slice___mk", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.lines": [{"id": "String___Slice___lines", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.isNat": [{"id": "String___Slice___isNat", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.isEmpty": [{"id": "String___Slice___isEmpty", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.getUTF8Byte!": [{"id": "String___Slice___getUTF8Byte___", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.getUTF8Byte": [{"id": "String___Slice___getUTF8Byte", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.front?": [{"id": "String___Slice___front___", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.front": [{"id": "String___Slice___front", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.foldr": [{"id": "String___Slice___foldr", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.foldl": [{"id": "String___Slice___foldl", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.findNextPos": [{"id": "String___Slice___findNextPos", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.find?": [{"id": "String___Slice___find___", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.eqIgnoreAsciiCase": [{"id": "String___Slice___eqIgnoreAsciiCase", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.endsWith": [{"id": "String___Slice___endsWith", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.endPos": [{"id": "String___Slice___endPos", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.endExclusive": [{"id": "String___Slice___mk", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.dropWhile": [{"id": "String___Slice___dropWhile", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.dropSuffix?": [{"id": "String___Slice___dropSuffix___", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.dropSuffix": [{"id": "String___Slice___dropSuffix", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.dropPrefix?": [{"id": "String___Slice___dropPrefix___", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.dropPrefix": [{"id": "String___Slice___dropPrefix", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.dropEndWhile": [{"id": "String___Slice___dropEndWhile", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.dropEnd": [{"id": "String___Slice___dropEnd", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.drop": [{"id": "String___Slice___drop", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.copy": [{"id": "String___Slice___copy", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.contains": [{"id": "String___Slice___contains", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.chars": [{"id": "String___Slice___chars", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.bytes": [{"id": "String___Slice___bytes", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.beq": [{"id": "String___Slice___beq", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.back?": [{"id": "String___Slice___back___", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.back": [{"id": "String___Slice___back", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.all": [{"id": "String___Slice___all", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.Pos.toReplaceStart": [{"id": "String___Slice___Pos___toReplaceStart", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.Pos.toCopy": [{"id": "String___Slice___Pos___toCopy", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.Pos.str": [{"id": "String___Slice___Pos___str", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.Pos.prevn": [{"id": "String___Slice___Pos___prevn", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.Pos.prev?": [{"id": "String___Slice___Pos___prev___-next", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.Pos.prev!": [{"id": "String___Slice___Pos___prev___", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.Pos.prev": [{"id": "String___Slice___Pos___prev", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.Pos.offset": [{"id": "String___Slice___Pos___mk", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.Pos.ofSlice": [{"id": "String___Slice___Pos___ofSlice", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.Pos.ofReplaceStart": [{"id": "String___Slice___Pos___ofReplaceStart", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.Pos.nextn": [{"id": "String___Slice___Pos___nextn", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.Pos.next?": [{"id": "String___Slice___Pos___next___-next", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.Pos.next!": [{"id": "String___Slice___Pos___next___", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.Pos.next": [{"id": "String___Slice___Pos___next", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.Pos.mk": [{"id": "String___Slice___Pos___mk", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.Pos.isValidForSlice": [{"id": "String___Slice___Pos___mk", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.Pos.get?": [{"id": "String___Slice___Pos___get___-next", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.Pos.get!": [{"id": "String___Slice___Pos___get___", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.Pos.get": [{"id": "String___Slice___Pos___get", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.Pos.cast": [{"id": "String___Slice___Pos___cast", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.Pos.byte": [{"id": "String___Slice___Pos___byte", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.Pos": [{"id": "String___Slice___Pos___mk", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.Pattern.ToForwardSearcher.toSearcher": [{"id": "String___Slice___Pattern___ToForwardSearcher___mk", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.Pattern.ToForwardSearcher.mk": [{"id": "String___Slice___Pattern___ToForwardSearcher___mk", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.Pattern.ToForwardSearcher": [{"id": "String___Slice___Pattern___ToForwardSearcher___mk", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.Pattern.ToBackwardSearcher.toSearcher": [{"id": "String___Slice___Pattern___ToBackwardSearcher___mk", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.Pattern.ToBackwardSearcher.mk": [{"id": "String___Slice___Pattern___ToBackwardSearcher___mk", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.Pattern.ToBackwardSearcher": [{"id": "String___Slice___Pattern___ToBackwardSearcher___mk", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.Pattern.ForwardPattern.startsWith": [{"id": "String___Slice___Pattern___ForwardPattern___mk", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.Pattern.ForwardPattern.mk": [{"id": "String___Slice___Pattern___ForwardPattern___mk", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.Pattern.ForwardPattern.dropPrefix?": [{"id": "String___Slice___Pattern___ForwardPattern___mk", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.Pattern.ForwardPattern": [{"id": "String___Slice___Pattern___ForwardPattern___mk", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.Pattern.BackwardPattern.mk": [{"id": "String___Slice___Pattern___BackwardPattern___mk", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.Pattern.BackwardPattern.endsWith": [{"id": "String___Slice___Pattern___BackwardPattern___mk", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.Pattern.BackwardPattern.dropSuffix?": [{"id": "String___Slice___Pattern___BackwardPattern___mk", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice.Pattern.BackwardPattern": [{"id": "String___Slice___Pattern___BackwardPattern___mk", "data": null, "address": "/Basic-Types/Strings/"}], "String.Slice": [{"id": "String___Slice___mk", "data": null, "address": "/Basic-Types/Strings/"}], "String.Pos.Raw.unoffsetBy": [{"id": "String___Pos___Raw___unoffsetBy", "data": null, "address": "/Basic-Types/Strings/"}], "String.Pos.Raw.substrEq": [{"id": "String___Pos___Raw___substrEq", "data": null, "address": "/Basic-Types/Strings/"}], "String.Pos.Raw.set": [{"id": "String___Pos___Raw___set", "data": null, "address": "/Basic-Types/Strings/"}], "String.Pos.Raw.prev": [{"id": "String___Pos___Raw___prev", "data": null, "address": "/Basic-Types/Strings/"}], "String.Pos.Raw.offsetBy": [{"id": "String___Pos___Raw___offsetBy", "data": null, "address": "/Basic-Types/Strings/"}], "String.Pos.Raw.nextWhile": [{"id": "String___Pos___Raw___nextWhile", "data": null, "address": "/Basic-Types/Strings/"}], "String.Pos.Raw.nextUntil": [{"id": "String___Pos___Raw___nextUntil", "data": null, "address": "/Basic-Types/Strings/"}], "String.Pos.Raw.next'": [{"id": "String___Pos___Raw___next___", "data": null, "address": "/Basic-Types/Strings/"}], "String.Pos.Raw.next": [{"id": "String___Pos___Raw___next", "data": null, "address": "/Basic-Types/Strings/"}], "String.Pos.Raw.modify": [{"id": "String___Pos___Raw___modify", "data": null, "address": "/Basic-Types/Strings/"}], "String.Pos.Raw.mk": [{"id": "String___Pos___Raw___mk", "data": null, "address": "/Basic-Types/Strings/"}], "String.Pos.Raw.min": [{"id": "String___Pos___Raw___min", "data": null, "address": "/Basic-Types/Strings/"}], "String.Pos.Raw.isValidForSlice": [{"id": "String___Pos___Raw___isValidForSlice", "data": null, "address": "/Basic-Types/Strings/"}], "String.Pos.Raw.isValid": [{"id": "String___Pos___Raw___isValid", "data": null, "address": "/Basic-Types/Strings/"}], "String.Pos.Raw.increaseBy": [{"id": "String___Pos___Raw___increaseBy", "data": null, "address": "/Basic-Types/Strings/"}], "String.Pos.Raw.inc": [{"id": "String___Pos___Raw___inc", "data": null, "address": "/Basic-Types/Strings/"}], "String.Pos.Raw.get?": [{"id": "String___Pos___Raw___get___-next-next", "data": null, "address": "/Basic-Types/Strings/"}], "String.Pos.Raw.get'": [{"id": "String___Pos___Raw___get___-next", "data": null, "address": "/Basic-Types/Strings/"}], "String.Pos.Raw.get!": [{"id": "String___Pos___Raw___get___", "data": null, "address": "/Basic-Types/Strings/"}], "String.Pos.Raw.get": [{"id": "String___Pos___Raw___get", "data": null, "address": "/Basic-Types/Strings/"}], "String.Pos.Raw.extract": [{"id": "String___Pos___Raw___extract", "data": null, "address": "/Basic-Types/Strings/"}], "String.Pos.Raw.decreaseBy": [{"id": "String___Pos___Raw___decreaseBy", "data": null, "address": "/Basic-Types/Strings/"}], "String.Pos.Raw.dec": [{"id": "String___Pos___Raw___dec", "data": null, "address": "/Basic-Types/Strings/"}], "String.Pos.Raw.byteIdx": [{"id": "String___Pos___Raw___mk", "data": null, "address": "/Basic-Types/Strings/"}], "String.Pos.Raw.byteDistance": [{"id": "String___Pos___Raw___byteDistance", "data": null, "address": "/Basic-Types/Strings/"}], "String.Pos.Raw.atEnd": [{"id": "String___Pos___Raw___atEnd", "data": null, "address": "/Basic-Types/Strings/"}], "String.Pos.Raw": [{"id": "String___Pos___Raw___mk", "data": null, "address": "/Basic-Types/Strings/"}], "String.Legacy.mkIterator": [{"id": "String___Legacy___mkIterator", "data": null, "address": "/Basic-Types/Strings/"}], "String.Legacy.iter": [{"id": "String___Legacy___iter", "data": null, "address": "/Basic-Types/Strings/"}], "String.Legacy.Iterator.toString": [{"id": "String___Legacy___Iterator___toString", "data": null, "address": "/Basic-Types/Strings/"}], "String.Legacy.Iterator.toEnd": [{"id": "String___Legacy___Iterator___toEnd", "data": null, "address": "/Basic-Types/Strings/"}], "String.Legacy.Iterator.setCurr": [{"id": "String___Legacy___Iterator___setCurr", "data": null, "address": "/Basic-Types/Strings/"}], "String.Legacy.Iterator.s": [{"id": "String___Legacy___Iterator___mk", "data": null, "address": "/Basic-Types/Strings/"}], "String.Legacy.Iterator.remainingToString": [{"id": "String___Legacy___Iterator___remainingToString", "data": null, "address": "/Basic-Types/Strings/"}], "String.Legacy.Iterator.remainingBytes": [{"id": "String___Legacy___Iterator___remainingBytes", "data": null, "address": "/Basic-Types/Strings/"}], "String.Legacy.Iterator.prevn": [{"id": "String___Legacy___Iterator___prevn", "data": null, "address": "/Basic-Types/Strings/"}], "String.Legacy.Iterator.prev": [{"id": "String___Legacy___Iterator___prev", "data": null, "address": "/Basic-Types/Strings/"}], "String.Legacy.Iterator.pos": [{"id": "String___Legacy___Iterator___pos", "data": null, "address": "/Basic-Types/Strings/"}], "String.Legacy.Iterator.nextn": [{"id": "String___Legacy___Iterator___nextn", "data": null, "address": "/Basic-Types/Strings/"}], "String.Legacy.Iterator.next'": [{"id": "String___Legacy___Iterator___next___", "data": null, "address": "/Basic-Types/Strings/"}], "String.Legacy.Iterator.next": [{"id": "String___Legacy___Iterator___next", "data": null, "address": "/Basic-Types/Strings/"}], "String.Legacy.Iterator.mk": [{"id": "String___Legacy___Iterator___mk", "data": null, "address": "/Basic-Types/Strings/"}], "String.Legacy.Iterator.i": [{"id": "String___Legacy___Iterator___mk", "data": null, "address": "/Basic-Types/Strings/"}], "String.Legacy.Iterator.hasPrev": [{"id": "String___Legacy___Iterator___hasPrev", "data": null, "address": "/Basic-Types/Strings/"}], "String.Legacy.Iterator.hasNext": [{"id": "String___Legacy___Iterator___hasNext", "data": null, "address": "/Basic-Types/Strings/"}], "String.Legacy.Iterator.forward": [{"id": "String___Legacy___Iterator___forward", "data": null, "address": "/Basic-Types/Strings/"}], "String.Legacy.Iterator.foldUntil": [{"id": "String___Legacy___Iterator___foldUntil", "data": null, "address": "/Basic-Types/Strings/"}], "String.Legacy.Iterator.find": [{"id": "String___Legacy___Iterator___find", "data": null, "address": "/Basic-Types/Strings/"}], "String.Legacy.Iterator.extract": [{"id": "String___Legacy___Iterator___extract", "data": null, "address": "/Basic-Types/Strings/"}], "String.Legacy.Iterator.curr'": [{"id": "String___Legacy___Iterator___curr___", "data": null, "address": "/Basic-Types/Strings/"}], "String.Legacy.Iterator.curr": [{"id": "String___Legacy___Iterator___curr", "data": null, "address": "/Basic-Types/Strings/"}], "String.Legacy.Iterator.atEnd": [{"id": "String___Legacy___Iterator___atEnd", "data": null, "address": "/Basic-Types/Strings/"}], "String.Legacy.Iterator": [{"id": "String___Legacy___Iterator___mk", "data": null, "address": "/Basic-Types/Strings/"}], "String": [{"id": "String___ofByteArray", "data": null, "address": "/Basic-Types/Strings/"}], "StdGen": [{"id": "StdGen", "data": null, "address": "/IO/Random-Numbers/"}], "Std.TreeSet.toList": [{"id": "Std___TreeSet___toList", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeSet.toArray": [{"id": "Std___TreeSet___toArray", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeSet.size": [{"id": "Std___TreeSet___size", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeSet.partition": [{"id": "Std___TreeSet___partition", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeSet.ofList": [{"id": "Std___TreeSet___ofList", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeSet.ofArray": [{"id": "Std___TreeSet___ofArray", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeSet.minD": [{"id": "Std___TreeSet___minD", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeSet.min?": [{"id": "Std___TreeSet___min___-next", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeSet.min!": [{"id": "Std___TreeSet___min___", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeSet.min": [{"id": "Std___TreeSet___min", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeSet.merge": [{"id": "Std___TreeSet___merge", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeSet.maxD": [{"id": "Std___TreeSet___maxD", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeSet.max?": [{"id": "Std___TreeSet___max___-next", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeSet.max!": [{"id": "Std___TreeSet___max___", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeSet.max": [{"id": "Std___TreeSet___max", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeSet.iter": [{"id": "Std___TreeSet___iter", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeSet.isEmpty": [{"id": "Std___TreeSet___isEmpty", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeSet.insertMany": [{"id": "Std___TreeSet___insertMany", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeSet.insert": [{"id": "Std___TreeSet___insert", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeSet.getLTD": [{"id": "Std___TreeSet___getLTD", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeSet.getLT?": [{"id": "Std___TreeSet___getLT___-next", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeSet.getLT!": [{"id": "Std___TreeSet___getLT___", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeSet.getLT": [{"id": "Std___TreeSet___getLT", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeSet.getLED": [{"id": "Std___TreeSet___getLED", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeSet.getLE?": [{"id": "Std___TreeSet___getLE___-next", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeSet.getLE!": [{"id": "Std___TreeSet___getLE___", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeSet.getLE": [{"id": "Std___TreeSet___getLE", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeSet.getGTD": [{"id": "Std___TreeSet___getGTD", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeSet.getGT?": [{"id": "Std___TreeSet___getGT___-next", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeSet.getGT!": [{"id": "Std___TreeSet___getGT___", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeSet.getGT": [{"id": "Std___TreeSet___getGT", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeSet.getGED": [{"id": "Std___TreeSet___getGED", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeSet.getGE?": [{"id": "Std___TreeSet___getGE___-next", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeSet.getGE!": [{"id": "Std___TreeSet___getGE___", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeSet.getGE": [{"id": "Std___TreeSet___getGE", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeSet.getD": [{"id": "Std___TreeSet___getD", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeSet.get?": [{"id": "Std___TreeSet___get___-next", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeSet.get!": [{"id": "Std___TreeSet___get___", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeSet.get": [{"id": "Std___TreeSet___get", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeSet.forM": [{"id": "Std___TreeSet___forM", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeSet.forIn": [{"id": "Std___TreeSet___forIn", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeSet.foldrM": [{"id": "Std___TreeSet___foldrM", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeSet.foldr": [{"id": "Std___TreeSet___foldr", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeSet.foldlM": [{"id": "Std___TreeSet___foldlM", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeSet.foldl": [{"id": "Std___TreeSet___foldl", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeSet.filter": [{"id": "Std___TreeSet___filter", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeSet.eraseMany": [{"id": "Std___TreeSet___eraseMany", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeSet.erase": [{"id": "Std___TreeSet___erase", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeSet.empty": [{"id": "Std___TreeSet___empty", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeSet.containsThenInsert": [{"id": "Std___TreeSet___containsThenInsert", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeSet.contains": [{"id": "Std___TreeSet___contains", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeSet.atIdxD": [{"id": "Std___TreeSet___atIdxD", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeSet.atIdx?": [{"id": "Std___TreeSet___atIdx___-next", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeSet.atIdx!": [{"id": "Std___TreeSet___atIdx___", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeSet.atIdx": [{"id": "Std___TreeSet___atIdx", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeSet.any": [{"id": "Std___TreeSet___any", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeSet.all": [{"id": "Std___TreeSet___all", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeSet.Raw.mk": [{"id": "Std___TreeSet___Raw___mk", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeSet.Raw.inner": [{"id": "Std___TreeSet___Raw___mk", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeSet.Raw.WF.out": [{"id": "Std___TreeSet___Raw___WF___mk", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeSet.Raw.WF.mk": [{"id": "Std___TreeSet___Raw___WF___mk", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeSet.Raw.WF": [{"id": "Std___TreeSet___Raw___WF___mk", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeSet.Raw": [{"id": "Std___TreeSet___Raw___mk", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeSet": [{"id": "Std___TreeSet", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.valuesIter": [{"id": "Std___TreeMap___valuesIter", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.valuesArray": [{"id": "Std___TreeMap___valuesArray", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.values": [{"id": "Std___TreeMap___values", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.unitOfList": [{"id": "Std___TreeMap___unitOfList", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.unitOfArray": [{"id": "Std___TreeMap___unitOfArray", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.toList": [{"id": "Std___TreeMap___toList", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.toArray": [{"id": "Std___TreeMap___toArray", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.size": [{"id": "Std___TreeMap___size", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.partition": [{"id": "Std___TreeMap___partition", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.ofList": [{"id": "Std___TreeMap___ofList", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.ofArray": [{"id": "Std___TreeMap___ofArray", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.modify": [{"id": "Std___TreeMap___modify", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.minKeyD": [{"id": "Std___TreeMap___minKeyD", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.minKey?": [{"id": "Std___TreeMap___minKey___-next", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.minKey!": [{"id": "Std___TreeMap___minKey___", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.minKey": [{"id": "Std___TreeMap___minKey", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.minEntryD": [{"id": "Std___TreeMap___minEntryD", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.minEntry?": [{"id": "Std___TreeMap___minEntry___-next", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.minEntry!": [{"id": "Std___TreeMap___minEntry___", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.minEntry": [{"id": "Std___TreeMap___minEntry", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.mergeWith": [{"id": "Std___TreeMap___mergeWith", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.maxKeyD": [{"id": "Std___TreeMap___maxKeyD", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.maxKey?": [{"id": "Std___TreeMap___maxKey___-next", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.maxKey!": [{"id": "Std___TreeMap___maxKey___", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.maxKey": [{"id": "Std___TreeMap___maxKey", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.maxEntryD": [{"id": "Std___TreeMap___maxEntryD", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.maxEntry?": [{"id": "Std___TreeMap___maxEntry___-next", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.maxEntry!": [{"id": "Std___TreeMap___maxEntry___", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.maxEntry": [{"id": "Std___TreeMap___maxEntry", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.map": [{"id": "Std___TreeMap___map", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.keysIter": [{"id": "Std___TreeMap___keysIter", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.keysArray": [{"id": "Std___TreeMap___keysArray", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.keys": [{"id": "Std___TreeMap___keys", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.keyAtIdxD": [{"id": "Std___TreeMap___keyAtIdxD", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.keyAtIdx?": [{"id": "Std___TreeMap___keyAtIdx___-next", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.keyAtIdx!": [{"id": "Std___TreeMap___keyAtIdx___", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.keyAtIdx": [{"id": "Std___TreeMap___keyAtIdx", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.iter": [{"id": "Std___TreeMap___iter", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.isEmpty": [{"id": "Std___TreeMap___isEmpty", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.insertManyIfNewUnit": [{"id": "Std___TreeMap___insertManyIfNewUnit", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.insertMany": [{"id": "Std___TreeMap___insertMany", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.insertIfNew": [{"id": "Std___TreeMap___insertIfNew", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.insert": [{"id": "Std___TreeMap___insert", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.getThenInsertIfNew?": [{"id": "Std___TreeMap___getThenInsertIfNew___", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.getKeyLTD": [{"id": "Std___TreeMap___getKeyLTD", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.getKeyLT?": [{"id": "Std___TreeMap___getKeyLT___-next", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.getKeyLT!": [{"id": "Std___TreeMap___getKeyLT___", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.getKeyLT": [{"id": "Std___TreeMap___getKeyLT", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.getKeyLED": [{"id": "Std___TreeMap___getKeyLED", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.getKeyLE?": [{"id": "Std___TreeMap___getKeyLE___-next", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.getKeyLE!": [{"id": "Std___TreeMap___getKeyLE___", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.getKeyLE": [{"id": "Std___TreeMap___getKeyLE", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.getKeyGTD": [{"id": "Std___TreeMap___getKeyGTD", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.getKeyGT?": [{"id": "Std___TreeMap___getKeyGT___-next", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.getKeyGT!": [{"id": "Std___TreeMap___getKeyGT___", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.getKeyGT": [{"id": "Std___TreeMap___getKeyGT", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.getKeyGED": [{"id": "Std___TreeMap___getKeyGED", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.getKeyGE?": [{"id": "Std___TreeMap___getKeyGE___-next", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.getKeyGE!": [{"id": "Std___TreeMap___getKeyGE___", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.getKeyGE": [{"id": "Std___TreeMap___getKeyGE", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.getKeyD": [{"id": "Std___TreeMap___getKeyD", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.getKey?": [{"id": "Std___TreeMap___getKey___-next", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.getKey!": [{"id": "Std___TreeMap___getKey___", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.getKey": [{"id": "Std___TreeMap___getKey", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.getEntryLTD": [{"id": "Std___TreeMap___getEntryLTD", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.getEntryLT?": [{"id": "Std___TreeMap___getEntryLT___-next", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.getEntryLT!": [{"id": "Std___TreeMap___getEntryLT___", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.getEntryLT": [{"id": "Std___TreeMap___getEntryLT", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.getEntryLED": [{"id": "Std___TreeMap___getEntryLED", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.getEntryLE?": [{"id": "Std___TreeMap___getEntryLE___-next", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.getEntryLE!": [{"id": "Std___TreeMap___getEntryLE___", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.getEntryLE": [{"id": "Std___TreeMap___getEntryLE", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.getEntryGTD": [{"id": "Std___TreeMap___getEntryGTD", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.getEntryGT?": [{"id": "Std___TreeMap___getEntryGT___-next", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.getEntryGT!": [{"id": "Std___TreeMap___getEntryGT___", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.getEntryGT": [{"id": "Std___TreeMap___getEntryGT", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.getEntryGED": [{"id": "Std___TreeMap___getEntryGED", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.getEntryGE?": [{"id": "Std___TreeMap___getEntryGE___-next", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.getEntryGE!": [{"id": "Std___TreeMap___getEntryGE___", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.getEntryGE": [{"id": "Std___TreeMap___getEntryGE", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.getD": [{"id": "Std___TreeMap___getD", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.get?": [{"id": "Std___TreeMap___get___-next", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.get!": [{"id": "Std___TreeMap___get___", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.get": [{"id": "Std___TreeMap___get", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.forM": [{"id": "Std___TreeMap___forM", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.forIn": [{"id": "Std___TreeMap___forIn", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.foldrM": [{"id": "Std___TreeMap___foldrM", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.foldr": [{"id": "Std___TreeMap___foldr", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.foldlM": [{"id": "Std___TreeMap___foldlM", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.foldl": [{"id": "Std___TreeMap___foldl", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.filterMap": [{"id": "Std___TreeMap___filterMap", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.filter": [{"id": "Std___TreeMap___filter", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.eraseMany": [{"id": "Std___TreeMap___eraseMany", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.erase": [{"id": "Std___TreeMap___erase", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.entryAtIdxD": [{"id": "Std___TreeMap___entryAtIdxD", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.entryAtIdx?": [{"id": "Std___TreeMap___entryAtIdx___-next", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.entryAtIdx!": [{"id": "Std___TreeMap___entryAtIdx___", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.entryAtIdx": [{"id": "Std___TreeMap___entryAtIdx", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.empty": [{"id": "Std___TreeMap___empty", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.containsThenInsertIfNew": [{"id": "Std___TreeMap___containsThenInsertIfNew", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.containsThenInsert": [{"id": "Std___TreeMap___containsThenInsert", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.contains": [{"id": "Std___TreeMap___contains", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.any": [{"id": "Std___TreeMap___any", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.alter": [{"id": "Std___TreeMap___alter", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.all": [{"id": "Std___TreeMap___all", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.Raw.mk": [{"id": "Std___TreeMap___Raw___mk", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.Raw.inner": [{"id": "Std___TreeMap___Raw___mk", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.Raw.WF.out": [{"id": "Std___TreeMap___Raw___WF___mk", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.Raw.WF.mk": [{"id": "Std___TreeMap___Raw___WF___mk", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.Raw.WF": [{"id": "Std___TreeMap___Raw___WF___mk", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap.Raw": [{"id": "Std___TreeMap___Raw___mk", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.TreeMap": [{"id": "Std___TreeMap", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.ToFormat.mk": [{"id": "Std___ToFormat___mk", "data": null, "address": "/Interacting-with-Lean/"}], "Std.ToFormat.format": [{"id": "Std___ToFormat___mk", "data": null, "address": "/Interacting-with-Lean/"}], "Std.ToFormat": [{"id": "Std___ToFormat___mk", "data": null, "address": "/Interacting-with-Lean/"}], "Std.Shrink.inflate": [{"id": "Std___Shrink___inflate", "data": null, "address": "/Iterators/Iterator-Definitions/"}], "Std.Shrink.deflate": [{"id": "Std___Shrink___deflate", "data": null, "address": "/Iterators/Iterator-Definitions/"}], "Std.Shrink": [{"id": "Std___Shrink", "data": null, "address": "/Iterators/Iterator-Definitions/"}], "Std.Rxi.IsAlwaysFinite.mk": [{"id": "Std___Rxi___IsAlwaysFinite___mk", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Rxi.IsAlwaysFinite.finite": [{"id": "Std___Rxi___IsAlwaysFinite___mk", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Rxi.IsAlwaysFinite": [{"id": "Std___Rxi___IsAlwaysFinite___mk", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Rxi.HasSize.size": [{"id": "Std___Rxi___HasSize___mk", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Rxi.HasSize.mk": [{"id": "Std___Rxi___HasSize___mk", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Rxi.HasSize": [{"id": "Std___Rxi___HasSize___mk", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Rxc.IsAlwaysFinite.mk": [{"id": "Std___Rxc___IsAlwaysFinite___mk", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Rxc.IsAlwaysFinite.finite": [{"id": "Std___Rxc___IsAlwaysFinite___mk", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Rxc.IsAlwaysFinite": [{"id": "Std___Rxc___IsAlwaysFinite___mk", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Rxc.HasSize.size": [{"id": "Std___Rxc___HasSize___mk", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Rxc.HasSize.mk": [{"id": "Std___Rxc___HasSize___mk", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Rxc.HasSize": [{"id": "Std___Rxc___HasSize___mk", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Roo.upper": [{"id": "Std___Roo___mk", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Roo.toList": [{"id": "Std___Roo___toList", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Roo.toArray": [{"id": "Std___Roo___toArray", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Roo.size": [{"id": "Std___Roo___size", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Roo.mk": [{"id": "Std___Roo___mk", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Roo.lower": [{"id": "Std___Roo___mk", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Roo.iter": [{"id": "Std___Roo___iter", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Roo.isEmpty": [{"id": "Std___Roo___isEmpty", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Roo.Sliceable.mkSlice": [{"id": "Std___Roo___Sliceable___mk", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Roo.Sliceable.mk": [{"id": "Std___Roo___Sliceable___mk", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Roo.Sliceable": [{"id": "Std___Roo___Sliceable___mk", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Roo": [{"id": "Std___Roo___mk", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Roi.toList": [{"id": "Std___Roi___toList", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Roi.toArray": [{"id": "Std___Roi___toArray", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Roi.size": [{"id": "Std___Roi___size", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Roi.mk": [{"id": "Std___Roi___mk", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Roi.lower": [{"id": "Std___Roi___mk", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Roi.iter": [{"id": "Std___Roi___iter", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Roi.isEmpty": [{"id": "Std___Roi___isEmpty", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Roi.Sliceable.mkSlice": [{"id": "Std___Roi___Sliceable___mk", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Roi.Sliceable.mk": [{"id": "Std___Roi___Sliceable___mk", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Roi.Sliceable": [{"id": "Std___Roi___Sliceable___mk", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Roi": [{"id": "Std___Roi___mk", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Roc.upper": [{"id": "Std___Roc___mk", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Roc.toList": [{"id": "Std___Roc___toList", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Roc.toArray": [{"id": "Std___Roc___toArray", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Roc.size": [{"id": "Std___Roc___size", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Roc.mk": [{"id": "Std___Roc___mk", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Roc.lower": [{"id": "Std___Roc___mk", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Roc.iter": [{"id": "Std___Roc___iter", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Roc.isEmpty": [{"id": "Std___Roc___isEmpty", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Roc.Sliceable.mkSlice": [{"id": "Std___Roc___Sliceable___mk", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Roc.Sliceable.mk": [{"id": "Std___Roc___Sliceable___mk", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Roc.Sliceable": [{"id": "Std___Roc___Sliceable___mk", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Roc": [{"id": "Std___Roc___mk", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Rio.upper": [{"id": "Std___Rio___mk", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Rio.toList": [{"id": "Std___Rio___toList", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Rio.toArray": [{"id": "Std___Rio___toArray", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Rio.size": [{"id": "Std___Rio___size", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Rio.mk": [{"id": "Std___Rio___mk", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Rio.iter": [{"id": "Std___Rio___iter", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Rio.isEmpty": [{"id": "Std___Rio___isEmpty", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Rio.Sliceable.mkSlice": [{"id": "Std___Rio___Sliceable___mk", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Rio.Sliceable.mk": [{"id": "Std___Rio___Sliceable___mk", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Rio.Sliceable": [{"id": "Std___Rio___Sliceable___mk", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Rio": [{"id": "Std___Rio___mk", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Rii.toList": [{"id": "Std___Rii___toList", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Rii.toArray": [{"id": "Std___Rii___toArray", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Rii.size": [{"id": "Std___Rii___size", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Rii.mk": [{"id": "Std___Rii___mk", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Rii.iter": [{"id": "Std___Rii___iter", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Rii.isEmpty": [{"id": "Std___Rii___isEmpty", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Rii.Sliceable.mkSlice": [{"id": "Std___Rii___Sliceable___mk", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Rii.Sliceable.mk": [{"id": "Std___Rii___Sliceable___mk", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Rii.Sliceable": [{"id": "Std___Rii___Sliceable___mk", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Rii": [{"id": "Std___Rii___mk", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Ric.upper": [{"id": "Std___Ric___mk", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Ric.toList": [{"id": "Std___Ric___toList", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Ric.toArray": [{"id": "Std___Ric___toArray", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Ric.size": [{"id": "Std___Ric___size", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Ric.mk": [{"id": "Std___Ric___mk", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Ric.iter": [{"id": "Std___Ric___iter", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Ric.isEmpty": [{"id": "Std___Ric___isEmpty", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Ric.Sliceable.mkSlice": [{"id": "Std___Ric___Sliceable___mk", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Ric.Sliceable.mk": [{"id": "Std___Ric___Sliceable___mk", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Ric.Sliceable": [{"id": "Std___Ric___Sliceable___mk", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Ric": [{"id": "Std___Ric___mk", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Rco.upper": [{"id": "Std___Rco___mk", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Rco.toList": [{"id": "Std___Rco___toList", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Rco.toArray": [{"id": "Std___Rco___toArray", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Rco.size": [{"id": "Std___Rco___size", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Rco.mk": [{"id": "Std___Rco___mk", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Rco.lower": [{"id": "Std___Rco___mk", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Rco.iter": [{"id": "Std___Rco___iter", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Rco.isEmpty": [{"id": "Std___Rco___isEmpty", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Rco.Sliceable.mkSlice": [{"id": "Std___Rco___Sliceable___mk", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Rco.Sliceable.mk": [{"id": "Std___Rco___Sliceable___mk", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Rco.Sliceable": [{"id": "Std___Rco___Sliceable___mk", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Rco": [{"id": "Std___Rco___mk", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Rci.toList": [{"id": "Std___Rci___toList", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Rci.toArray": [{"id": "Std___Rci___toArray", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Rci.size": [{"id": "Std___Rci___size", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Rci.mk": [{"id": "Std___Rci___mk", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Rci.lower": [{"id": "Std___Rci___mk", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Rci.iter": [{"id": "Std___Rci___iter", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Rci.isEmpty": [{"id": "Std___Rci___isEmpty", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Rci.Sliceable.mkSlice": [{"id": "Std___Rci___Sliceable___mk", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Rci.Sliceable.mk": [{"id": "Std___Rci___Sliceable___mk", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Rci.Sliceable": [{"id": "Std___Rci___Sliceable___mk", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Rci": [{"id": "Std___Rci___mk", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Rcc.upper": [{"id": "Std___Rcc___mk", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Rcc.toList": [{"id": "Std___Rcc___toList", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Rcc.toArray": [{"id": "Std___Rcc___toArray", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Rcc.size": [{"id": "Std___Rcc___size", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Rcc.mk": [{"id": "Std___Rcc___mk", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Rcc.lower": [{"id": "Std___Rcc___mk", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Rcc.iter": [{"id": "Std___Rcc___iter", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Rcc.isEmpty": [{"id": "Std___Rcc___isEmpty", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Rcc.Sliceable.mkSlice": [{"id": "Std___Rcc___Sliceable___mk", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Rcc.Sliceable.mk": [{"id": "Std___Rcc___Sliceable___mk", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Rcc.Sliceable": [{"id": "Std___Rcc___Sliceable___mk", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Rcc": [{"id": "Std___Rcc___mk", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.PRange.UpwardEnumerable.succMany?": [{"id": "Std___PRange___UpwardEnumerable___mk", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.PRange.UpwardEnumerable.succ?": [{"id": "Std___PRange___UpwardEnumerable___mk", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.PRange.UpwardEnumerable.mk": [{"id": "Std___PRange___UpwardEnumerable___mk", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.PRange.UpwardEnumerable.LT": [{"id": "Std___PRange___UpwardEnumerable___LT", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.PRange.UpwardEnumerable.LE": [{"id": "Std___PRange___UpwardEnumerable___LE", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.PRange.UpwardEnumerable": [{"id": "Std___PRange___UpwardEnumerable___mk", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.PRange.LinearlyUpwardEnumerable.mk": [{"id": "Std___PRange___LinearlyUpwardEnumerable___mk", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.PRange.LinearlyUpwardEnumerable.eq_of_succ?_eq": [{"id": "Std___PRange___LinearlyUpwardEnumerable___mk", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.PRange.LinearlyUpwardEnumerable": [{"id": "Std___PRange___LinearlyUpwardEnumerable___mk", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.PRange.Least?.mk": [{"id": "Std___PRange___Least______mk", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.PRange.Least?.least?": [{"id": "Std___PRange___Least______mk", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.PRange.Least?": [{"id": "Std___PRange___Least______mk", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.PRange.LawfulUpwardEnumerable.succMany?_zero": [{"id": "Std___PRange___LawfulUpwardEnumerable___mk", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.PRange.LawfulUpwardEnumerable.succMany?_add_one": [{"id": "Std___PRange___LawfulUpwardEnumerable___mk", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.PRange.LawfulUpwardEnumerable.ne_of_lt": [{"id": "Std___PRange___LawfulUpwardEnumerable___mk", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.PRange.LawfulUpwardEnumerable.mk": [{"id": "Std___PRange___LawfulUpwardEnumerable___mk", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.PRange.LawfulUpwardEnumerable": [{"id": "Std___PRange___LawfulUpwardEnumerable___mk", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.PRange.InfinitelyUpwardEnumerable.mk": [{"id": "Std___PRange___InfinitelyUpwardEnumerable___mk", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.PRange.InfinitelyUpwardEnumerable.isSome_succ?": [{"id": "Std___PRange___InfinitelyUpwardEnumerable___mk", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.PRange.InfinitelyUpwardEnumerable": [{"id": "Std___PRange___InfinitelyUpwardEnumerable___mk", "data": null, "address": "/Basic-Types/Ranges/"}], "Std.Mutex.new": [{"id": "Std___Mutex___new", "data": null, "address": "/IO/Tasks-and-Threads/"}], "Std.Mutex.atomicallyOnce": [{"id": "Std___Mutex___atomicallyOnce", "data": null, "address": "/IO/Tasks-and-Threads/"}], "Std.Mutex.atomically": [{"id": "Std___Mutex___atomically", "data": null, "address": "/IO/Tasks-and-Threads/"}], "Std.Mutex": [{"id": "Std___Mutex", "data": null, "address": "/IO/Tasks-and-Threads/"}], "Std.Iterators.toIterM": [{"id": "Std___Iterators___toIterM", "data": null, "address": "/Iterators/Iterator-Combinators/"}], "Std.Iterators.Productive.wf": [{"id": "Std___Iterators___Productive___mk", "data": null, "address": "/Iterators/Iterator-Definitions/"}], "Std.Iterators.Productive.mk": [{"id": "Std___Iterators___Productive___mk", "data": null, "address": "/Iterators/Iterator-Definitions/"}], "Std.Iterators.Productive": [{"id": "Std___Iterators___Productive___mk", "data": null, "address": "/Iterators/Iterator-Definitions/"}], "Std.Iterators.PostconditionT.run": [{"id": "Std___Iterators___PostconditionT___run", "data": null, "address": "/Iterators/Reasoning-About-Iterators/"}], "Std.Iterators.PostconditionT.operation": [{"id": "Std___Iterators___PostconditionT___mk", "data": null, "address": "/Iterators/Reasoning-About-Iterators/"}], "Std.Iterators.PostconditionT.mk": [{"id": "Std___Iterators___PostconditionT___mk", "data": null, "address": "/Iterators/Reasoning-About-Iterators/"}], "Std.Iterators.PostconditionT.liftWithProperty": [{"id": "Std___Iterators___PostconditionT___liftWithProperty", "data": null, "address": "/Iterators/Reasoning-About-Iterators/"}], "Std.Iterators.PostconditionT.lift": [{"id": "Std___Iterators___PostconditionT___lift", "data": null, "address": "/Iterators/Reasoning-About-Iterators/"}], "Std.Iterators.PostconditionT.Property": [{"id": "Std___Iterators___PostconditionT___mk", "data": null, "address": "/Iterators/Reasoning-About-Iterators/"}], "Std.Iterators.PostconditionT": [{"id": "Std___Iterators___PostconditionT___mk", "data": null, "address": "/Iterators/Reasoning-About-Iterators/"}], "Std.Iterators.PlausibleIterStep.yield": [{"id": "Std___Iterators___PlausibleIterStep___yield", "data": null, "address": "/Iterators/Iterator-Definitions/"}], "Std.Iterators.PlausibleIterStep.skip": [{"id": "Std___Iterators___PlausibleIterStep___skip", "data": null, "address": "/Iterators/Iterator-Definitions/"}], "Std.Iterators.PlausibleIterStep.done": [{"id": "Std___Iterators___PlausibleIterStep___done", "data": null, "address": "/Iterators/Iterator-Definitions/"}], "Std.Iterators.PlausibleIterStep": [{"id": "Std___Iterators___PlausibleIterStep", "data": null, "address": "/Iterators/Iterator-Definitions/"}], "Std.Iterators.LawfulIteratorLoop.mk": [{"id": "Std___Iterators___LawfulIteratorLoop___mk", "data": null, "address": "/Iterators/Iterator-Definitions/"}], "Std.Iterators.LawfulIteratorLoop.lawful": [{"id": "Std___Iterators___LawfulIteratorLoop___mk", "data": null, "address": "/Iterators/Iterator-Definitions/"}], "Std.Iterators.LawfulIteratorLoop": [{"id": "Std___Iterators___LawfulIteratorLoop___mk", "data": null, "address": "/Iterators/Iterator-Definitions/"}], "Std.Iterators.LawfulIteratorCollect.mk": [{"id": "Std___Iterators___LawfulIteratorCollect___mk", "data": null, "address": "/Iterators/Consuming-Iterators/"}], "Std.Iterators.LawfulIteratorCollect.lawful_toArrayMapped": [{"id": "Std___Iterators___LawfulIteratorCollect___mk", "data": null, "address": "/Iterators/Consuming-Iterators/"}], "Std.Iterators.LawfulIteratorCollect": [{"id": "Std___Iterators___LawfulIteratorCollect___mk", "data": null, "address": "/Iterators/Consuming-Iterators/"}], "Std.Iterators.IteratorLoopPartial.mk": [{"id": "Std___Iterators___IteratorLoopPartial___mk", "data": null, "address": "/Iterators/Iterator-Definitions/"}], "Std.Iterators.IteratorLoopPartial.forInPartial": [{"id": "Std___Iterators___IteratorLoopPartial___mk", "data": null, "address": "/Iterators/Iterator-Definitions/"}], "Std.Iterators.IteratorLoopPartial.defaultImplementation": [{"id": "Std___Iterators___IteratorLoopPartial___defaultImplementation", "data": null, "address": "/Iterators/Iterator-Definitions/"}], "Std.Iterators.IteratorLoopPartial": [{"id": "Std___Iterators___IteratorLoopPartial___mk", "data": null, "address": "/Iterators/Iterator-Definitions/"}], "Std.Iterators.IteratorLoop.mk": [{"id": "Std___Iterators___IteratorLoop___mk", "data": null, "address": "/Iterators/Iterator-Definitions/"}], "Std.Iterators.IteratorLoop.forIn": [{"id": "Std___Iterators___IteratorLoop___mk", "data": null, "address": "/Iterators/Iterator-Definitions/"}], "Std.Iterators.IteratorLoop.defaultImplementation": [{"id": "Std___Iterators___IteratorLoop___defaultImplementation", "data": null, "address": "/Iterators/Iterator-Definitions/"}], "Std.Iterators.IteratorLoop": [{"id": "Std___Iterators___IteratorLoop___mk", "data": null, "address": "/Iterators/Iterator-Definitions/"}], "Std.Iterators.IteratorCollectPartial.toArrayMappedPartial": [{"id": "Std___Iterators___IteratorCollectPartial___mk", "data": null, "address": "/Iterators/Consuming-Iterators/"}], "Std.Iterators.IteratorCollectPartial.mk": [{"id": "Std___Iterators___IteratorCollectPartial___mk", "data": null, "address": "/Iterators/Consuming-Iterators/"}], "Std.Iterators.IteratorCollectPartial.defaultImplementation": [{"id": "Std___Iterators___IteratorCollectPartial___defaultImplementation", "data": null, "address": "/Iterators/Consuming-Iterators/"}], "Std.Iterators.IteratorCollectPartial": [{"id": "Std___Iterators___IteratorCollectPartial___mk", "data": null, "address": "/Iterators/Consuming-Iterators/"}], "Std.Iterators.IteratorCollect.toArrayMapped": [{"id": "Std___Iterators___IteratorCollect___mk", "data": null, "address": "/Iterators/Consuming-Iterators/"}], "Std.Iterators.IteratorCollect.mk": [{"id": "Std___Iterators___IteratorCollect___mk", "data": null, "address": "/Iterators/Consuming-Iterators/"}], "Std.Iterators.IteratorCollect.defaultImplementation": [{"id": "Std___Iterators___IteratorCollect___defaultImplementation", "data": null, "address": "/Iterators/Consuming-Iterators/"}], "Std.Iterators.IteratorCollect": [{"id": "Std___Iterators___IteratorCollect___mk", "data": null, "address": "/Iterators/Consuming-Iterators/"}], "Std.Iterators.IteratorAccess.nextAtIdx?": [{"id": "Std___Iterators___IteratorAccess___mk", "data": null, "address": "/Iterators/Iterator-Definitions/"}], "Std.Iterators.IteratorAccess.mk": [{"id": "Std___Iterators___IteratorAccess___mk", "data": null, "address": "/Iterators/Iterator-Definitions/"}], "Std.Iterators.IteratorAccess": [{"id": "Std___Iterators___IteratorAccess___mk", "data": null, "address": "/Iterators/Iterator-Definitions/"}], "Std.Iterators.Iterator.step": [{"id": "Std___Iterators___Iterator___mk", "data": null, "address": "/Iterators/Iterator-Definitions/"}], "Std.Iterators.Iterator.mk": [{"id": "Std___Iterators___Iterator___mk", "data": null, "address": "/Iterators/Iterator-Definitions/"}], "Std.Iterators.Iterator.IsPlausibleStep": [{"id": "Std___Iterators___Iterator___mk", "data": null, "address": "/Iterators/Iterator-Definitions/"}], "Std.Iterators.Iterator": [{"id": "Std___Iterators___Iterator___mk", "data": null, "address": "/Iterators/Iterator-Definitions/"}], "Std.Iterators.IterStep.yield": [{"id": "Std___Iterators___IterStep___yield", "data": null, "address": "/Iterators/Iterator-Definitions/"}], "Std.Iterators.IterStep.skip": [{"id": "Std___Iterators___IterStep___yield", "data": null, "address": "/Iterators/Iterator-Definitions/"}], "Std.Iterators.IterStep.done": [{"id": "Std___Iterators___IterStep___yield", "data": null, "address": "/Iterators/Iterator-Definitions/"}], "Std.Iterators.IterStep": [{"id": "Std___Iterators___IterStep___yield", "data": null, "address": "/Iterators/Iterator-Definitions/"}], "Std.Iterators.IterM.zip": [{"id": "Std___Iterators___IterM___zip", "data": null, "address": "/Iterators/Iterator-Combinators/"}], "Std.Iterators.IterM.uLift": [{"id": "Std___Iterators___IterM___uLift", "data": null, "address": "/Iterators/Iterator-Combinators/"}], "Std.Iterators.IterM.toTake": [{"id": "Std___Iterators___IterM___toTake", "data": null, "address": "/Iterators/Iterator-Combinators/"}], "Std.Iterators.IterM.toListRev": [{"id": "Std___Iterators___IterM___toListRev", "data": null, "address": "/Iterators/Consuming-Iterators/"}], "Std.Iterators.IterM.toList": [{"id": "Std___Iterators___IterM___toList", "data": null, "address": "/Iterators/Consuming-Iterators/"}], "Std.Iterators.IterM.toIter": [{"id": "Std___Iterators___IterM___toIter", "data": null, "address": "/Iterators/Iterator-Combinators/"}], "Std.Iterators.IterM.toArray": [{"id": "Std___Iterators___IterM___toArray", "data": null, "address": "/Iterators/Consuming-Iterators/"}], "Std.Iterators.IterM.takeWhileWithPostcondition": [{"id": "Std___Iterators___IterM___takeWhileWithPostcondition", "data": null, "address": "/Iterators/Iterator-Combinators/"}], "Std.Iterators.IterM.takeWhileM": [{"id": "Std___Iterators___IterM___takeWhileM", "data": null, "address": "/Iterators/Iterator-Combinators/"}], "Std.Iterators.IterM.takeWhile": [{"id": "Std___Iterators___IterM___takeWhile", "data": null, "address": "/Iterators/Iterator-Combinators/"}], "Std.Iterators.IterM.take": [{"id": "Std___Iterators___IterM___take", "data": null, "address": "/Iterators/Iterator-Combinators/"}], "Std.Iterators.IterM.stepSize": [{"id": "Std___Iterators___IterM___stepSize", "data": null, "address": "/Iterators/Iterator-Combinators/"}], "Std.Iterators.IterM.stepAsHetT": [{"id": "Std___Iterators___IterM___stepAsHetT", "data": null, "address": "/Iterators/Reasoning-About-Iterators/"}], "Std.Iterators.IterM.step": [{"id": "Std___Iterators___IterM___step", "data": null, "address": "/Iterators/Consuming-Iterators/"}], "Std.Iterators.IterM.nextAtIdx?": [{"id": "Std___Iterators___IterM___nextAtIdx___", "data": null, "address": "/Iterators/Iterator-Definitions/"}], "Std.Iterators.IterM.mk": [{"id": "Std___Iterators___IterM___mk", "data": null, "address": "/Iterators/Iterator-Definitions/"}], "Std.Iterators.IterM.mapWithPostcondition": [{"id": "Std___Iterators___IterM___mapWithPostcondition", "data": null, "address": "/Iterators/Iterator-Combinators/"}], "Std.Iterators.IterM.mapM": [{"id": "Std___Iterators___IterM___mapM", "data": null, "address": "/Iterators/Iterator-Combinators/"}], "Std.Iterators.IterM.map": [{"id": "Std___Iterators___IterM___map", "data": null, "address": "/Iterators/Iterator-Combinators/"}], "Std.Iterators.IterM.internalState": [{"id": "Std___Iterators___IterM___mk", "data": null, "address": "/Iterators/Iterator-Definitions/"}], "Std.Iterators.IterM.inductSteps": [{"id": "Std___Iterators___IterM___inductSteps", "data": null, "address": "/Iterators/Reasoning-About-Iterators/"}], "Std.Iterators.IterM.inductSkips": [{"id": "Std___Iterators___IterM___inductSkips", "data": null, "address": "/Iterators/Reasoning-About-Iterators/"}], "Std.Iterators.IterM.foldM": [{"id": "Std___Iterators___IterM___foldM", "data": null, "address": "/Iterators/Consuming-Iterators/"}], "Std.Iterators.IterM.fold": [{"id": "Std___Iterators___IterM___fold", "data": null, "address": "/Iterators/Consuming-Iterators/"}], "Std.Iterators.IterM.flatMapM": [{"id": "Std___Iterators___IterM___flatMapM", "data": null, "address": "/Iterators/Iterator-Combinators/"}], "Std.Iterators.IterM.flatMapAfterM": [{"id": "Std___Iterators___IterM___flatMapAfterM", "data": null, "address": "/Iterators/Iterator-Combinators/"}], "Std.Iterators.IterM.flatMapAfter": [{"id": "Std___Iterators___IterM___flatMapAfter", "data": null, "address": "/Iterators/Iterator-Combinators/"}], "Std.Iterators.IterM.flatMap": [{"id": "Std___Iterators___IterM___flatMap", "data": null, "address": "/Iterators/Iterator-Combinators/"}], "Std.Iterators.IterM.finitelyManySteps": [{"id": "Std___Iterators___IterM___finitelyManySteps", "data": null, "address": "/Iterators/Consuming-Iterators/"}], "Std.Iterators.IterM.finitelyManySkips": [{"id": "Std___Iterators___IterM___finitelyManySkips", "data": null, "address": "/Iterators/Consuming-Iterators/"}], "Std.Iterators.IterM.findSomeM?": [{"id": "Std___Iterators___IterM___findSomeM___", "data": null, "address": "/Iterators/Consuming-Iterators/"}], "Std.Iterators.IterM.findSome?": [{"id": "Std___Iterators___IterM___findSome___", "data": null, "address": "/Iterators/Consuming-Iterators/"}], "Std.Iterators.IterM.findM?": [{"id": "Std___Iterators___IterM___findM___", "data": null, "address": "/Iterators/Consuming-Iterators/"}], "Std.Iterators.IterM.find?": [{"id": "Std___Iterators___IterM___find___", "data": null, "address": "/Iterators/Consuming-Iterators/"}], "Std.Iterators.IterM.filterWithPostcondition": [{"id": "Std___Iterators___IterM___filterWithPostcondition", "data": null, "address": "/Iterators/Iterator-Combinators/"}], "Std.Iterators.IterM.filterMapWithPostcondition": [{"id": "Std___Iterators___IterM___filterMapWithPostcondition", "data": null, "address": "/Iterators/Iterator-Combinators/"}], "Std.Iterators.IterM.filterMapM": [{"id": "Std___Iterators___IterM___filterMapM", "data": null, "address": "/Iterators/Iterator-Combinators/"}], "Std.Iterators.IterM.filterMap": [{"id": "Std___Iterators___IterM___filterMap", "data": null, "address": "/Iterators/Iterator-Combinators/"}], "Std.Iterators.IterM.filterM": [{"id": "Std___Iterators___IterM___filterM", "data": null, "address": "/Iterators/Iterator-Combinators/"}], "Std.Iterators.IterM.filter": [{"id": "Std___Iterators___IterM___filter", "data": null, "address": "/Iterators/Iterator-Combinators/"}], "Std.Iterators.IterM.empty": [{"id": "Std___Iterators___IterM___empty", "data": null, "address": "/Iterators/Iterator-Definitions/"}], "Std.Iterators.IterM.dropWhileWithPostcondition": [{"id": "Std___Iterators___IterM___dropWhileWithPostcondition", "data": null, "address": "/Iterators/Iterator-Combinators/"}], "Std.Iterators.IterM.dropWhileM": [{"id": "Std___Iterators___IterM___dropWhileM", "data": null, "address": "/Iterators/Iterator-Combinators/"}], "Std.Iterators.IterM.dropWhile": [{"id": "Std___Iterators___IterM___dropWhile", "data": null, "address": "/Iterators/Iterator-Combinators/"}], "Std.Iterators.IterM.drop": [{"id": "Std___Iterators___IterM___drop", "data": null, "address": "/Iterators/Iterator-Combinators/"}], "Std.Iterators.IterM.drain": [{"id": "Std___Iterators___IterM___drain", "data": null, "address": "/Iterators/Consuming-Iterators/"}], "Std.Iterators.IterM.count": [{"id": "Std___Iterators___IterM___count", "data": null, "address": "/Iterators/Consuming-Iterators/"}], "Std.Iterators.IterM.attachWith": [{"id": "Std___Iterators___IterM___attachWith", "data": null, "address": "/Iterators/Iterator-Combinators/"}], "Std.Iterators.IterM.atIdx?": [{"id": "Std___Iterators___IterM___atIdx___", "data": null, "address": "/Iterators/Consuming-Iterators/"}], "Std.Iterators.IterM.anyM": [{"id": "Std___Iterators___IterM___anyM", "data": null, "address": "/Iterators/Consuming-Iterators/"}], "Std.Iterators.IterM.any": [{"id": "Std___Iterators___IterM___any", "data": null, "address": "/Iterators/Consuming-Iterators/"}], "Std.Iterators.IterM.allowNontermination": [{"id": "Std___Iterators___IterM___allowNontermination", "data": null, "address": "/Iterators/Iterator-Definitions/"}], "Std.Iterators.IterM.allM": [{"id": "Std___Iterators___IterM___allM", "data": null, "address": "/Iterators/Consuming-Iterators/"}], "Std.Iterators.IterM.all": [{"id": "Std___Iterators___IterM___all", "data": null, "address": "/Iterators/Consuming-Iterators/"}], "Std.Iterators.IterM.TerminationMeasures.Productive.mk": [{"id": "Std___Iterators___IterM___TerminationMeasures___Productive___mk", "data": null, "address": "/Iterators/Consuming-Iterators/"}], "Std.Iterators.IterM.TerminationMeasures.Productive.it": [{"id": "Std___Iterators___IterM___TerminationMeasures___Productive___mk", "data": null, "address": "/Iterators/Consuming-Iterators/"}], "Std.Iterators.IterM.TerminationMeasures.Productive": [{"id": "Std___Iterators___IterM___TerminationMeasures___Productive___mk", "data": null, "address": "/Iterators/Consuming-Iterators/"}], "Std.Iterators.IterM.TerminationMeasures.Finite.mk": [{"id": "Std___Iterators___IterM___TerminationMeasures___Finite___mk", "data": null, "address": "/Iterators/Consuming-Iterators/"}], "Std.Iterators.IterM.TerminationMeasures.Finite.it": [{"id": "Std___Iterators___IterM___TerminationMeasures___Finite___mk", "data": null, "address": "/Iterators/Consuming-Iterators/"}], "Std.Iterators.IterM.TerminationMeasures.Finite": [{"id": "Std___Iterators___IterM___TerminationMeasures___Finite___mk", "data": null, "address": "/Iterators/Consuming-Iterators/"}], "Std.Iterators.IterM.Step": [{"id": "Std___Iterators___IterM___Step", "data": null, "address": "/Iterators/Iterator-Definitions/"}], "Std.Iterators.IterM.Equiv": [{"id": "Std___Iterators___IterM___Equiv", "data": null, "address": "/Iterators/Reasoning-About-Iterators/"}], "Std.Iterators.IterM": [{"id": "Std___Iterators___IterM___mk", "data": null, "address": "/Iterators/Iterator-Definitions/"}], "Std.Iterators.Iter.zip": [{"id": "Std___Iterators___Iter___zip", "data": null, "address": "/Iterators/Iterator-Combinators/"}], "Std.Iterators.Iter.uLift": [{"id": "Std___Iterators___Iter___uLift", "data": null, "address": "/Iterators/Iterator-Combinators/"}], "Std.Iterators.Iter.toTake": [{"id": "Std___Iterators___Iter___toTake", "data": null, "address": "/Iterators/Iterator-Combinators/"}], "Std.Iterators.Iter.toListRev": [{"id": "Std___Iterators___Iter___toListRev", "data": null, "address": "/Iterators/Consuming-Iterators/"}], "Std.Iterators.Iter.toList": [{"id": "Std___Iterators___Iter___toList", "data": null, "address": "/Iterators/Consuming-Iterators/"}], "Std.Iterators.Iter.toIterM": [{"id": "Std___Iterators___Iter___toIterM", "data": null, "address": "/Iterators/Iterator-Combinators/"}], "Std.Iterators.Iter.toArray": [{"id": "Std___Iterators___Iter___toArray", "data": null, "address": "/Iterators/Consuming-Iterators/"}], "Std.Iterators.Iter.takeWhile": [{"id": "Std___Iterators___Iter___takeWhile", "data": null, "address": "/Iterators/Iterator-Combinators/"}], "Std.Iterators.Iter.take": [{"id": "Std___Iterators___Iter___take", "data": null, "address": "/Iterators/Iterator-Combinators/"}], "Std.Iterators.Iter.stepSize": [{"id": "Std___Iterators___Iter___stepSize", "data": null, "address": "/Iterators/Iterator-Combinators/"}], "Std.Iterators.Iter.step": [{"id": "Std___Iterators___Iter___step", "data": null, "address": "/Iterators/Consuming-Iterators/"}], "Std.Iterators.Iter.repeat": [{"id": "Std___Iterators___Iter___repeat", "data": null, "address": "/Iterators/Iterator-Definitions/"}], "Std.Iterators.Iter.mk": [{"id": "Std___Iterators___Iter___mk", "data": null, "address": "/Iterators/Iterator-Definitions/"}], "Std.Iterators.Iter.mapWithPostcondition": [{"id": "Std___Iterators___Iter___mapWithPostcondition", "data": null, "address": "/Iterators/Iterator-Combinators/"}], "Std.Iterators.Iter.mapM": [{"id": "Std___Iterators___Iter___mapM", "data": null, "address": "/Iterators/Iterator-Combinators/"}], "Std.Iterators.Iter.map": [{"id": "Std___Iterators___Iter___map", "data": null, "address": "/Iterators/Iterator-Combinators/"}], "Std.Iterators.Iter.internalState": [{"id": "Std___Iterators___Iter___mk", "data": null, "address": "/Iterators/Iterator-Definitions/"}], "Std.Iterators.Iter.inductSteps": [{"id": "Std___Iterators___Iter___inductSteps", "data": null, "address": "/Iterators/Reasoning-About-Iterators/"}], "Std.Iterators.Iter.inductSkips": [{"id": "Std___Iterators___Iter___inductSkips", "data": null, "address": "/Iterators/Reasoning-About-Iterators/"}], "Std.Iterators.Iter.foldM": [{"id": "Std___Iterators___Iter___foldM", "data": null, "address": "/Iterators/Consuming-Iterators/"}], "Std.Iterators.Iter.fold": [{"id": "Std___Iterators___Iter___fold", "data": null, "address": "/Iterators/Consuming-Iterators/"}], "Std.Iterators.Iter.flatMapM": [{"id": "Std___Iterators___Iter___flatMapM", "data": null, "address": "/Iterators/Iterator-Combinators/"}], "Std.Iterators.Iter.flatMapAfterM": [{"id": "Std___Iterators___Iter___flatMapAfterM", "data": null, "address": "/Iterators/Iterator-Combinators/"}], "Std.Iterators.Iter.flatMapAfter": [{"id": "Std___Iterators___Iter___flatMapAfter", "data": null, "address": "/Iterators/Iterator-Combinators/"}], "Std.Iterators.Iter.flatMap": [{"id": "Std___Iterators___Iter___flatMap", "data": null, "address": "/Iterators/Iterator-Combinators/"}], "Std.Iterators.Iter.finitelyManySteps": [{"id": "Std___Iterators___Iter___finitelyManySteps", "data": null, "address": "/Iterators/Consuming-Iterators/"}], "Std.Iterators.Iter.finitelyManySkips": [{"id": "Std___Iterators___Iter___finitelyManySkips", "data": null, "address": "/Iterators/Consuming-Iterators/"}], "Std.Iterators.Iter.findSomeM?": [{"id": "Std___Iterators___Iter___findSomeM___", "data": null, "address": "/Iterators/Consuming-Iterators/"}], "Std.Iterators.Iter.findSome?": [{"id": "Std___Iterators___Iter___findSome___", "data": null, "address": "/Iterators/Consuming-Iterators/"}], "Std.Iterators.Iter.findM?": [{"id": "Std___Iterators___Iter___findM___", "data": null, "address": "/Iterators/Consuming-Iterators/"}], "Std.Iterators.Iter.find?": [{"id": "Std___Iterators___Iter___find___", "data": null, "address": "/Iterators/Consuming-Iterators/"}], "Std.Iterators.Iter.filterWithPostcondition": [{"id": "Std___Iterators___Iter___filterWithPostcondition", "data": null, "address": "/Iterators/Iterator-Combinators/"}], "Std.Iterators.Iter.filterMapWithPostcondition": [{"id": "Std___Iterators___Iter___filterMapWithPostcondition", "data": null, "address": "/Iterators/Iterator-Combinators/"}], "Std.Iterators.Iter.filterMapM": [{"id": "Std___Iterators___Iter___filterMapM", "data": null, "address": "/Iterators/Iterator-Combinators/"}], "Std.Iterators.Iter.filterMap": [{"id": "Std___Iterators___Iter___filterMap", "data": null, "address": "/Iterators/Iterator-Combinators/"}], "Std.Iterators.Iter.filterM": [{"id": "Std___Iterators___Iter___filterM", "data": null, "address": "/Iterators/Iterator-Combinators/"}], "Std.Iterators.Iter.filter": [{"id": "Std___Iterators___Iter___filter", "data": null, "address": "/Iterators/Iterator-Combinators/"}], "Std.Iterators.Iter.empty": [{"id": "Std___Iterators___Iter___empty", "data": null, "address": "/Iterators/Iterator-Definitions/"}], "Std.Iterators.Iter.dropWhile": [{"id": "Std___Iterators___Iter___dropWhile", "data": null, "address": "/Iterators/Iterator-Combinators/"}], "Std.Iterators.Iter.drop": [{"id": "Std___Iterators___Iter___drop", "data": null, "address": "/Iterators/Iterator-Combinators/"}], "Std.Iterators.Iter.count": [{"id": "Std___Iterators___Iter___count", "data": null, "address": "/Iterators/Consuming-Iterators/"}], "Std.Iterators.Iter.attachWith": [{"id": "Std___Iterators___Iter___attachWith", "data": null, "address": "/Iterators/Iterator-Combinators/"}], "Std.Iterators.Iter.atIdxSlow?": [{"id": "Std___Iterators___Iter___atIdxSlow___", "data": null, "address": "/Iterators/Consuming-Iterators/"}], "Std.Iterators.Iter.atIdx?": [{"id": "Std___Iterators___Iter___atIdx___", "data": null, "address": "/Iterators/Consuming-Iterators/"}], "Std.Iterators.Iter.anyM": [{"id": "Std___Iterators___Iter___anyM", "data": null, "address": "/Iterators/Consuming-Iterators/"}], "Std.Iterators.Iter.any": [{"id": "Std___Iterators___Iter___any", "data": null, "address": "/Iterators/Consuming-Iterators/"}], "Std.Iterators.Iter.allowNontermination": [{"id": "Std___Iterators___Iter___allowNontermination", "data": null, "address": "/Iterators/Iterator-Definitions/"}], "Std.Iterators.Iter.allM": [{"id": "Std___Iterators___Iter___allM", "data": null, "address": "/Iterators/Consuming-Iterators/"}], "Std.Iterators.Iter.all": [{"id": "Std___Iterators___Iter___all", "data": null, "address": "/Iterators/Consuming-Iterators/"}], "Std.Iterators.Iter.Step": [{"id": "Std___Iterators___Iter___Step", "data": null, "address": "/Iterators/Iterator-Definitions/"}], "Std.Iterators.Iter.IsPlausibleIndirectOutput.indirect": [{"id": "Std___Iterators___Iter___IsPlausibleIndirectOutput___direct", "data": null, "address": "/Iterators/Reasoning-About-Iterators/"}], "Std.Iterators.Iter.IsPlausibleIndirectOutput.direct": [{"id": "Std___Iterators___Iter___IsPlausibleIndirectOutput___direct", "data": null, "address": "/Iterators/Reasoning-About-Iterators/"}], "Std.Iterators.Iter.IsPlausibleIndirectOutput": [{"id": "Std___Iterators___Iter___IsPlausibleIndirectOutput___direct", "data": null, "address": "/Iterators/Reasoning-About-Iterators/"}], "Std.Iterators.Iter.Equiv": [{"id": "Std___Iterators___Iter___Equiv", "data": null, "address": "/Iterators/Reasoning-About-Iterators/"}], "Std.Iterators.Iter": [{"id": "Std___Iterators___Iter___mk", "data": null, "address": "/Iterators/Iterator-Definitions/"}], "Std.Iterators.HetT.small": [{"id": "Std___Iterators___HetT___mk", "data": null, "address": "/Iterators/Reasoning-About-Iterators/"}], "Std.Iterators.HetT.pure": [{"id": "Std___Iterators___HetT___pure", "data": null, "address": "/Iterators/Reasoning-About-Iterators/"}], "Std.Iterators.HetT.prun": [{"id": "Std___Iterators___HetT___prun", "data": null, "address": "/Iterators/Reasoning-About-Iterators/"}], "Std.Iterators.HetT.pmap": [{"id": "Std___Iterators___HetT___pmap", "data": null, "address": "/Iterators/Reasoning-About-Iterators/"}], "Std.Iterators.HetT.pbind": [{"id": "Std___Iterators___HetT___pbind", "data": null, "address": "/Iterators/Reasoning-About-Iterators/"}], "Std.Iterators.HetT.operation": [{"id": "Std___Iterators___HetT___mk", "data": null, "address": "/Iterators/Reasoning-About-Iterators/"}], "Std.Iterators.HetT.mk": [{"id": "Std___Iterators___HetT___mk", "data": null, "address": "/Iterators/Reasoning-About-Iterators/"}], "Std.Iterators.HetT.map": [{"id": "Std___Iterators___HetT___map", "data": null, "address": "/Iterators/Reasoning-About-Iterators/"}], "Std.Iterators.HetT.lift": [{"id": "Std___Iterators___HetT___lift", "data": null, "address": "/Iterators/Reasoning-About-Iterators/"}], "Std.Iterators.HetT.bind": [{"id": "Std___Iterators___HetT___bind", "data": null, "address": "/Iterators/Reasoning-About-Iterators/"}], "Std.Iterators.HetT.Property": [{"id": "Std___Iterators___HetT___mk", "data": null, "address": "/Iterators/Reasoning-About-Iterators/"}], "Std.Iterators.HetT": [{"id": "Std___Iterators___HetT___mk", "data": null, "address": "/Iterators/Reasoning-About-Iterators/"}], "Std.Iterators.Finite.wf": [{"id": "Std___Iterators___Finite___mk", "data": null, "address": "/Iterators/Iterator-Definitions/"}], "Std.Iterators.Finite.mk": [{"id": "Std___Iterators___Finite___mk", "data": null, "address": "/Iterators/Iterator-Definitions/"}], "Std.Iterators.Finite": [{"id": "Std___Iterators___Finite___mk", "data": null, "address": "/Iterators/Iterator-Definitions/"}], "Std.HashSet.union": [{"id": "Std___HashSet___union", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.HashSet.toList": [{"id": "Std___HashSet___toList", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.HashSet.toArray": [{"id": "Std___HashSet___toArray", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.HashSet.size": [{"id": "Std___HashSet___size", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.HashSet.partition": [{"id": "Std___HashSet___partition", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.HashSet.ofList": [{"id": "Std___HashSet___ofList", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.HashSet.ofArray": [{"id": "Std___HashSet___ofArray", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.HashSet.mk": [{"id": "Std___HashSet___mk", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.HashSet.iter": [{"id": "Std___HashSet___iter", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.HashSet.isEmpty": [{"id": "Std___HashSet___isEmpty", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.HashSet.insertMany": [{"id": "Std___HashSet___insertMany", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.HashSet.insert": [{"id": "Std___HashSet___insert", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.HashSet.inner": [{"id": "Std___HashSet___mk", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.HashSet.getD": [{"id": "Std___HashSet___getD", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.HashSet.get?": [{"id": "Std___HashSet___get___-next", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.HashSet.get!": [{"id": "Std___HashSet___get___", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.HashSet.get": [{"id": "Std___HashSet___get", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.HashSet.forM": [{"id": "Std___HashSet___forM", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.HashSet.forIn": [{"id": "Std___HashSet___forIn", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.HashSet.foldM": [{"id": "Std___HashSet___foldM", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.HashSet.fold": [{"id": "Std___HashSet___fold", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.HashSet.filter": [{"id": "Std___HashSet___filter", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.HashSet.erase": [{"id": "Std___HashSet___erase", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.HashSet.emptyWithCapacity": [{"id": "Std___HashSet___emptyWithCapacity", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.HashSet.containsThenInsert": [{"id": "Std___HashSet___containsThenInsert", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.HashSet.contains": [{"id": "Std___HashSet___contains", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.HashSet.any": [{"id": "Std___HashSet___any", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.HashSet.all": [{"id": "Std___HashSet___all", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.HashSet.Raw.mk": [{"id": "Std___HashSet___Raw___mk", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.HashSet.Raw.inner": [{"id": "Std___HashSet___Raw___mk", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.HashSet.Raw.WF.out": [{"id": "Std___HashSet___Raw___WF___mk", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.HashSet.Raw.WF.mk": [{"id": "Std___HashSet___Raw___WF___mk", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.HashSet.Raw.WF": [{"id": "Std___HashSet___Raw___WF___mk", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.HashSet.Raw": [{"id": "Std___HashSet___Raw___mk", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.HashSet.Equiv.mk": [{"id": "Std___HashSet___Equiv___mk", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.HashSet.Equiv.inner": [{"id": "Std___HashSet___Equiv___mk", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.HashSet.Equiv": [{"id": "Std___HashSet___Equiv___mk", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.HashSet": [{"id": "Std___HashSet___mk", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.HashMap.valuesIter": [{"id": "Std___HashMap___valuesIter", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.HashMap.valuesArray": [{"id": "Std___HashMap___valuesArray", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.HashMap.values": [{"id": "Std___HashMap___values", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.HashMap.unitOfList": [{"id": "Std___HashMap___unitOfList", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.HashMap.unitOfArray": [{"id": "Std___HashMap___unitOfArray", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.HashMap.union": [{"id": "Std___HashMap___union", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.HashMap.toList": [{"id": "Std___HashMap___toList", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.HashMap.toArray": [{"id": "Std___HashMap___toArray", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.HashMap.size": [{"id": "Std___HashMap___size", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.HashMap.partition": [{"id": "Std___HashMap___partition", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.HashMap.ofList": [{"id": "Std___HashMap___ofList", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.HashMap.modify": [{"id": "Std___HashMap___modify", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.HashMap.map": [{"id": "Std___HashMap___map", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.HashMap.keysIter": [{"id": "Std___HashMap___keysIter", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.HashMap.keysArray": [{"id": "Std___HashMap___keysArray", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.HashMap.keys": [{"id": "Std___HashMap___keys", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.HashMap.iter": [{"id": "Std___HashMap___iter", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.HashMap.isEmpty": [{"id": "Std___HashMap___isEmpty", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.HashMap.insertManyIfNewUnit": [{"id": "Std___HashMap___insertManyIfNewUnit", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.HashMap.insertMany": [{"id": "Std___HashMap___insertMany", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.HashMap.insertIfNew": [{"id": "Std___HashMap___insertIfNew", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.HashMap.insert": [{"id": "Std___HashMap___insert", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.HashMap.getThenInsertIfNew?": [{"id": "Std___HashMap___getThenInsertIfNew___", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.HashMap.getKeyD": [{"id": "Std___HashMap___getKeyD", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.HashMap.getKey?": [{"id": "Std___HashMap___getKey___-next", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.HashMap.getKey!": [{"id": "Std___HashMap___getKey___", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.HashMap.getKey": [{"id": "Std___HashMap___getKey", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.HashMap.getD": [{"id": "Std___HashMap___getD", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.HashMap.get?": [{"id": "Std___HashMap___get___-next", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.HashMap.get!": [{"id": "Std___HashMap___get___", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.HashMap.get": [{"id": "Std___HashMap___get", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.HashMap.forM": [{"id": "Std___HashMap___forM", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.HashMap.forIn": [{"id": "Std___HashMap___forIn", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.HashMap.foldM": [{"id": "Std___HashMap___foldM", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.HashMap.fold": [{"id": "Std___HashMap___fold", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.HashMap.filterMap": [{"id": "Std___HashMap___filterMap", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.HashMap.filter": [{"id": "Std___HashMap___filter", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.HashMap.erase": [{"id": "Std___HashMap___erase", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.HashMap.emptyWithCapacity": [{"id": "Std___HashMap___emptyWithCapacity", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.HashMap.containsThenInsertIfNew": [{"id": "Std___HashMap___containsThenInsertIfNew", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.HashMap.containsThenInsert": [{"id": "Std___HashMap___containsThenInsert", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.HashMap.contains": [{"id": "Std___HashMap___contains", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.HashMap.alter": [{"id": "Std___HashMap___alter", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.HashMap.Raw.mk": [{"id": "Std___HashMap___Raw___mk", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.HashMap.Raw.inner": [{"id": "Std___HashMap___Raw___mk", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.HashMap.Raw.WF.out": [{"id": "Std___HashMap___Raw___WF___mk", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.HashMap.Raw.WF.mk": [{"id": "Std___HashMap___Raw___WF___mk", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.HashMap.Raw.WF": [{"id": "Std___HashMap___Raw___WF___mk", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.HashMap.Raw": [{"id": "Std___HashMap___Raw___mk", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.HashMap.Equiv.mk": [{"id": "Std___HashMap___Equiv___mk", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.HashMap.Equiv.inner": [{"id": "Std___HashMap___Equiv___mk", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.HashMap.Equiv": [{"id": "Std___HashMap___Equiv___mk", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.HashMap": [{"id": "Std___HashMap", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.Format.text": [{"id": "Std___Format___nil", "data": null, "address": "/Interacting-with-Lean/"}], "Std.Format.tag": [{"id": "Std___Format___nil", "data": null, "address": "/Interacting-with-Lean/"}], "Std.Format.sbracket": [{"id": "Std___Format___sbracket", "data": null, "address": "/Interacting-with-Lean/"}], "Std.Format.prettyM": [{"id": "Std___Format___prettyM", "data": null, "address": "/Interacting-with-Lean/"}], "Std.Format.pretty": [{"id": "Std___Format___pretty", "data": null, "address": "/Interacting-with-Lean/"}], "Std.Format.prefixJoin": [{"id": "Std___Format___prefixJoin", "data": null, "address": "/Interacting-with-Lean/"}], "Std.Format.paren": [{"id": "Std___Format___paren", "data": null, "address": "/Interacting-with-Lean/"}], "Std.Format.nil": [{"id": "Std___Format___nil", "data": null, "address": "/Interacting-with-Lean/"}], "Std.Format.nestD": [{"id": "Std___Format___nestD", "data": null, "address": "/Interacting-with-Lean/"}], "Std.Format.nest": [{"id": "Std___Format___nil", "data": null, "address": "/Interacting-with-Lean/"}], "Std.Format.line": [{"id": "Std___Format___nil", "data": null, "address": "/Interacting-with-Lean/"}], "Std.Format.joinSuffix": [{"id": "Std___Format___joinSuffix", "data": null, "address": "/Interacting-with-Lean/"}], "Std.Format.joinSep": [{"id": "Std___Format___joinSep", "data": null, "address": "/Interacting-with-Lean/"}], "Std.Format.join": [{"id": "Std___Format___join", "data": null, "address": "/Interacting-with-Lean/"}], "Std.Format.isNil": [{"id": "Std___Format___isNil", "data": null, "address": "/Interacting-with-Lean/"}], "Std.Format.isEmpty": [{"id": "Std___Format___isEmpty", "data": null, "address": "/Interacting-with-Lean/"}], "Std.Format.indentD": [{"id": "Std___Format___indentD", "data": null, "address": "/Interacting-with-Lean/"}], "Std.Format.group": [{"id": "Std___Format___nil", "data": null, "address": "/Interacting-with-Lean/"}], "Std.Format.fill": [{"id": "Std___Format___fill", "data": null, "address": "/Interacting-with-Lean/"}], "Std.Format.defWidth": [{"id": "Std___Format___defWidth", "data": null, "address": "/Interacting-with-Lean/"}], "Std.Format.defIndent": [{"id": "Std___Format___defIndent", "data": null, "address": "/Interacting-with-Lean/"}], "Std.Format.bracketFill": [{"id": "Std___Format___bracketFill", "data": null, "address": "/Interacting-with-Lean/"}], "Std.Format.bracket": [{"id": "Std___Format___bracket", "data": null, "address": "/Interacting-with-Lean/"}], "Std.Format.append": [{"id": "Std___Format___nil", "data": null, "address": "/Interacting-with-Lean/"}], "Std.Format.align": [{"id": "Std___Format___nil", "data": null, "address": "/Interacting-with-Lean/"}], "Std.Format.MonadPrettyFormat.startTag": [{"id": "Std___Format___MonadPrettyFormat___mk", "data": null, "address": "/Interacting-with-Lean/"}], "Std.Format.MonadPrettyFormat.pushOutput": [{"id": "Std___Format___MonadPrettyFormat___mk", "data": null, "address": "/Interacting-with-Lean/"}], "Std.Format.MonadPrettyFormat.pushNewline": [{"id": "Std___Format___MonadPrettyFormat___mk", "data": null, "address": "/Interacting-with-Lean/"}], "Std.Format.MonadPrettyFormat.mk": [{"id": "Std___Format___MonadPrettyFormat___mk", "data": null, "address": "/Interacting-with-Lean/"}], "Std.Format.MonadPrettyFormat.endTags": [{"id": "Std___Format___MonadPrettyFormat___mk", "data": null, "address": "/Interacting-with-Lean/"}], "Std.Format.MonadPrettyFormat.currColumn": [{"id": "Std___Format___MonadPrettyFormat___mk", "data": null, "address": "/Interacting-with-Lean/"}], "Std.Format.MonadPrettyFormat": [{"id": "Std___Format___MonadPrettyFormat___mk", "data": null, "address": "/Interacting-with-Lean/"}], "Std.Format.FlattenBehavior.fill": [{"id": "Std___Format___FlattenBehavior___allOrNone", "data": null, "address": "/Interacting-with-Lean/"}], "Std.Format.FlattenBehavior.allOrNone": [{"id": "Std___Format___FlattenBehavior___allOrNone", "data": null, "address": "/Interacting-with-Lean/"}], "Std.Format.FlattenBehavior": [{"id": "Std___Format___FlattenBehavior___allOrNone", "data": null, "address": "/Interacting-with-Lean/"}], "Std.Format": [{"id": "Std___Format___nil", "data": null, "address": "/Interacting-with-Lean/"}], "Std.ExtHashSet.size": [{"id": "Std___ExtHashSet___size", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.ExtHashSet.ofList": [{"id": "Std___ExtHashSet___ofList", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.ExtHashSet.ofArray": [{"id": "Std___ExtHashSet___ofArray", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.ExtHashSet.mk": [{"id": "Std___ExtHashSet___mk", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.ExtHashSet.isEmpty": [{"id": "Std___ExtHashSet___isEmpty", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.ExtHashSet.insertMany": [{"id": "Std___ExtHashSet___insertMany", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.ExtHashSet.insert": [{"id": "Std___ExtHashSet___insert", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.ExtHashSet.inner": [{"id": "Std___ExtHashSet___mk", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.ExtHashSet.getD": [{"id": "Std___ExtHashSet___getD", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.ExtHashSet.get?": [{"id": "Std___ExtHashSet___get___-next", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.ExtHashSet.get!": [{"id": "Std___ExtHashSet___get___", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.ExtHashSet.get": [{"id": "Std___ExtHashSet___get", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.ExtHashSet.filter": [{"id": "Std___ExtHashSet___filter", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.ExtHashSet.erase": [{"id": "Std___ExtHashSet___erase", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.ExtHashSet.emptyWithCapacity": [{"id": "Std___ExtHashSet___emptyWithCapacity", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.ExtHashSet.containsThenInsert": [{"id": "Std___ExtHashSet___containsThenInsert", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.ExtHashSet.contains": [{"id": "Std___ExtHashSet___contains", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.ExtHashSet": [{"id": "Std___ExtHashSet___mk", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.ExtHashMap.unitOfList": [{"id": "Std___ExtHashMap___unitOfList", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.ExtHashMap.unitOfArray": [{"id": "Std___ExtHashMap___unitOfArray", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.ExtHashMap.size": [{"id": "Std___ExtHashMap___size", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.ExtHashMap.ofList": [{"id": "Std___ExtHashMap___ofList", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.ExtHashMap.modify": [{"id": "Std___ExtHashMap___modify", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.ExtHashMap.map": [{"id": "Std___ExtHashMap___map", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.ExtHashMap.isEmpty": [{"id": "Std___ExtHashMap___isEmpty", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.ExtHashMap.insertManyIfNewUnit": [{"id": "Std___ExtHashMap___insertManyIfNewUnit", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.ExtHashMap.insertMany": [{"id": "Std___ExtHashMap___insertMany", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.ExtHashMap.insertIfNew": [{"id": "Std___ExtHashMap___insertIfNew", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.ExtHashMap.insert": [{"id": "Std___ExtHashMap___insert", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.ExtHashMap.getThenInsertIfNew?": [{"id": "Std___ExtHashMap___getThenInsertIfNew___", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.ExtHashMap.getKeyD": [{"id": "Std___ExtHashMap___getKeyD", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.ExtHashMap.getKey?": [{"id": "Std___ExtHashMap___getKey___-next", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.ExtHashMap.getKey!": [{"id": "Std___ExtHashMap___getKey___", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.ExtHashMap.getKey": [{"id": "Std___ExtHashMap___getKey", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.ExtHashMap.getD": [{"id": "Std___ExtHashMap___getD", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.ExtHashMap.get?": [{"id": "Std___ExtHashMap___get___-next", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.ExtHashMap.get!": [{"id": "Std___ExtHashMap___get___", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.ExtHashMap.get": [{"id": "Std___ExtHashMap___get", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.ExtHashMap.filterMap": [{"id": "Std___ExtHashMap___filterMap", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.ExtHashMap.filter": [{"id": "Std___ExtHashMap___filter", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.ExtHashMap.erase": [{"id": "Std___ExtHashMap___erase", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.ExtHashMap.emptyWithCapacity": [{"id": "Std___ExtHashMap___emptyWithCapacity", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.ExtHashMap.containsThenInsertIfNew": [{"id": "Std___ExtHashMap___containsThenInsertIfNew", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.ExtHashMap.containsThenInsert": [{"id": "Std___ExtHashMap___containsThenInsert", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.ExtHashMap.contains": [{"id": "Std___ExtHashMap___contains", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.ExtHashMap.alter": [{"id": "Std___ExtHashMap___alter", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.ExtHashMap": [{"id": "Std___ExtHashMap", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.ExtDHashMap.size": [{"id": "Std___ExtDHashMap___size", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.ExtDHashMap.ofList": [{"id": "Std___ExtDHashMap___ofList", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.ExtDHashMap.modify": [{"id": "Std___ExtDHashMap___modify", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.ExtDHashMap.map": [{"id": "Std___ExtDHashMap___map", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.ExtDHashMap.isEmpty": [{"id": "Std___ExtDHashMap___isEmpty", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.ExtDHashMap.insertMany": [{"id": "Std___ExtDHashMap___insertMany", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.ExtDHashMap.insertIfNew": [{"id": "Std___ExtDHashMap___insertIfNew", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.ExtDHashMap.insert": [{"id": "Std___ExtDHashMap___insert", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.ExtDHashMap.getThenInsertIfNew?": [{"id": "Std___ExtDHashMap___getThenInsertIfNew___", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.ExtDHashMap.getKeyD": [{"id": "Std___ExtDHashMap___getKeyD", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.ExtDHashMap.getKey?": [{"id": "Std___ExtDHashMap___getKey___-next", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.ExtDHashMap.getKey!": [{"id": "Std___ExtDHashMap___getKey___", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.ExtDHashMap.getKey": [{"id": "Std___ExtDHashMap___getKey", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.ExtDHashMap.getD": [{"id": "Std___ExtDHashMap___getD", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.ExtDHashMap.get?": [{"id": "Std___ExtDHashMap___get___-next", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.ExtDHashMap.get!": [{"id": "Std___ExtDHashMap___get___", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.ExtDHashMap.get": [{"id": "Std___ExtDHashMap___get", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.ExtDHashMap.filterMap": [{"id": "Std___ExtDHashMap___filterMap", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.ExtDHashMap.filter": [{"id": "Std___ExtDHashMap___filter", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.ExtDHashMap.erase": [{"id": "Std___ExtDHashMap___erase", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.ExtDHashMap.emptyWithCapacity": [{"id": "Std___ExtDHashMap___emptyWithCapacity", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.ExtDHashMap.containsThenInsertIfNew": [{"id": "Std___ExtDHashMap___containsThenInsertIfNew", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.ExtDHashMap.containsThenInsert": [{"id": "Std___ExtDHashMap___containsThenInsert", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.ExtDHashMap.contains": [{"id": "Std___ExtDHashMap___contains", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.ExtDHashMap.alter": [{"id": "Std___ExtDHashMap___alter", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.ExtDHashMap": [{"id": "Std___ExtDHashMap", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.Do.WPMonad.toLawfulMonad": [{"id": "Std___Do___WPMonad___mk", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.WPMonad.mk": [{"id": "Std___Do___WPMonad___mk", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.WPMonad": [{"id": "Std___Do___WPMonad___mk", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.WP.wp": [{"id": "Std___Do___WP___mk", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.WP.mk": [{"id": "Std___Do___WP___mk", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.WP": [{"id": "Std___Do___WP___mk", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.Triple.mp": [{"id": "Std___Do___Triple___mp", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.Triple.and": [{"id": "Std___Do___Triple___and", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.Triple": [{"id": "Std___Do___Triple", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.StateM.of_wp_run_eq": [{"id": "Std___Do___StateM___of_wp_run_eq", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.StateM.of_wp_run'_eq": [{"id": "Std___Do___StateM___of_wp_run____eq", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.SVal.uncurry": [{"id": "Std___Do___SVal___uncurry", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.SVal.getThe": [{"id": "Std___Do___SVal___getThe", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.SVal.curry": [{"id": "Std___Do___SVal___curry", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.SVal.StateTuple": [{"id": "Std___Do___SVal___StateTuple", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.SVal": [{"id": "Std___Do___SVal", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.SPred.pure": [{"id": "Std___Do___SPred___pure", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.SPred.or": [{"id": "Std___Do___SPred___or", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.SPred.not": [{"id": "Std___Do___SPred___not", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.SPred.imp": [{"id": "Std___Do___SPred___imp", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.SPred.iff": [{"id": "Std___Do___SPred___iff", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.SPred.forall": [{"id": "Std___Do___SPred___forall", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.SPred.exists": [{"id": "Std___Do___SPred___exists", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.SPred.entails": [{"id": "Std___Do___SPred___entails", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.SPred.conjunction": [{"id": "Std___Do___SPred___conjunction", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.SPred.bientails": [{"id": "Std___Do___SPred___bientails", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.SPred.and": [{"id": "Std___Do___SPred___and", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.SPred": [{"id": "Std___Do___SPred", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.ReaderM.of_wp_run_eq": [{"id": "Std___Do___ReaderM___of_wp_run_eq", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.PredTrans.pushOption": [{"id": "Std___Do___PredTrans___pushOption", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.PredTrans.pushExcept": [{"id": "Std___Do___PredTrans___pushExcept", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.PredTrans.pushArg": [{"id": "Std___Do___PredTrans___pushArg", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.PredTrans.pure": [{"id": "Std___Do___PredTrans___pure", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.PredTrans.mk": [{"id": "Std___Do___PredTrans___mk", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.PredTrans.conjunctive": [{"id": "Std___Do___PredTrans___mk", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.PredTrans.bind": [{"id": "Std___Do___PredTrans___bind", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.PredTrans.apply": [{"id": "Std___Do___PredTrans___mk", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.PredTrans.Monotonic": [{"id": "Std___Do___PredTrans___Monotonic", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.PredTrans.Conjunctive": [{"id": "Std___Do___PredTrans___Conjunctive", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.PredTrans": [{"id": "Std___Do___PredTrans___mk", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.PostShape.pure": [{"id": "Std___Do___PostShape___pure", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.PostShape.except": [{"id": "Std___Do___PostShape___pure", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.PostShape.args": [{"id": "Std___Do___PostShape___args", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.PostShape.arg": [{"id": "Std___Do___PostShape___pure", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.PostShape": [{"id": "Std___Do___PostShape___pure", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.PostCond.noThrow": [{"id": "Std___Do___PostCond___noThrow", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.PostCond.mayThrow": [{"id": "Std___Do___PostCond___mayThrow", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.PostCond.imp": [{"id": "Std___Do___PostCond___imp", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.PostCond.entails": [{"id": "Std___Do___PostCond___entails", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.PostCond.and": [{"id": "Std___Do___PostCond___and", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.PostCond": [{"id": "Std___Do___PostCond", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.Invariant.withEarlyReturn": [{"id": "Std___Do___Invariant___withEarlyReturn", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.Invariant": [{"id": "Std___Do___Invariant", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.Id.of_wp_run_eq": [{"id": "Std___Do___Id___of_wp_run_eq", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.ExceptConds": [{"id": "Std___Do___ExceptConds", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.Except.of_wp": [{"id": "Std___Do___Except___of_wp", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.EStateM.of_wp_run_eq": [{"id": "Std___Do___EStateM___of_wp_run_eq", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.Assertion": [{"id": "Std___Do___Assertion", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.DTreeMap.valuesIter": [{"id": "Std___DTreeMap___valuesIter", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DTreeMap.valuesArray": [{"id": "Std___DTreeMap___valuesArray", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DTreeMap.values": [{"id": "Std___DTreeMap___values", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DTreeMap.toList": [{"id": "Std___DTreeMap___toList", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DTreeMap.toArray": [{"id": "Std___DTreeMap___toArray", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DTreeMap.size": [{"id": "Std___DTreeMap___size", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DTreeMap.partition": [{"id": "Std___DTreeMap___partition", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DTreeMap.ofList": [{"id": "Std___DTreeMap___ofList", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DTreeMap.modify": [{"id": "Std___DTreeMap___modify", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DTreeMap.map": [{"id": "Std___DTreeMap___map", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DTreeMap.keysIter": [{"id": "Std___DTreeMap___keysIter", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DTreeMap.keysArray": [{"id": "Std___DTreeMap___keysArray", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DTreeMap.keys": [{"id": "Std___DTreeMap___keys", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DTreeMap.iter": [{"id": "Std___DTreeMap___iter", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DTreeMap.isEmpty": [{"id": "Std___DTreeMap___isEmpty", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DTreeMap.insertMany": [{"id": "Std___DTreeMap___insertMany", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DTreeMap.insertIfNew": [{"id": "Std___DTreeMap___insertIfNew", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DTreeMap.insert": [{"id": "Std___DTreeMap___insert", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DTreeMap.getThenInsertIfNew?": [{"id": "Std___DTreeMap___getThenInsertIfNew___", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DTreeMap.getKeyD": [{"id": "Std___DTreeMap___getKeyD", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DTreeMap.getKey?": [{"id": "Std___DTreeMap___getKey___-next", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DTreeMap.getKey!": [{"id": "Std___DTreeMap___getKey___", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DTreeMap.getKey": [{"id": "Std___DTreeMap___getKey", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DTreeMap.getD": [{"id": "Std___DTreeMap___getD", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DTreeMap.get?": [{"id": "Std___DTreeMap___get___-next", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DTreeMap.get!": [{"id": "Std___DTreeMap___get___", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DTreeMap.get": [{"id": "Std___DTreeMap___get", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DTreeMap.forM": [{"id": "Std___DTreeMap___forM", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DTreeMap.forIn": [{"id": "Std___DTreeMap___forIn", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DTreeMap.foldlM": [{"id": "Std___DTreeMap___foldlM", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DTreeMap.foldl": [{"id": "Std___DTreeMap___foldl", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DTreeMap.filterMap": [{"id": "Std___DTreeMap___filterMap", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DTreeMap.filter": [{"id": "Std___DTreeMap___filter", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DTreeMap.erase": [{"id": "Std___DTreeMap___erase", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DTreeMap.empty": [{"id": "Std___DTreeMap___empty", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DTreeMap.containsThenInsertIfNew": [{"id": "Std___DTreeMap___containsThenInsertIfNew", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DTreeMap.containsThenInsert": [{"id": "Std___DTreeMap___containsThenInsert", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DTreeMap.contains": [{"id": "Std___DTreeMap___contains", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DTreeMap.alter": [{"id": "Std___DTreeMap___alter", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DTreeMap.Raw.mk": [{"id": "Std___DTreeMap___Raw___mk", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DTreeMap.Raw.inner": [{"id": "Std___DTreeMap___Raw___mk", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DTreeMap.Raw.WF.out": [{"id": "Std___DTreeMap___Raw___WF___mk", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DTreeMap.Raw.WF.mk": [{"id": "Std___DTreeMap___Raw___WF___mk", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DTreeMap.Raw.WF": [{"id": "Std___DTreeMap___Raw___WF___mk", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DTreeMap.Raw": [{"id": "Std___DTreeMap___Raw___mk", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DTreeMap": [{"id": "Std___DTreeMap", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DHashMap.valuesIter": [{"id": "Std___DHashMap___valuesIter", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DHashMap.valuesArray": [{"id": "Std___DHashMap___valuesArray", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DHashMap.values": [{"id": "Std___DHashMap___values", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DHashMap.union": [{"id": "Std___DHashMap___union", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DHashMap.toList": [{"id": "Std___DHashMap___toList", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DHashMap.toArray": [{"id": "Std___DHashMap___toArray", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DHashMap.size": [{"id": "Std___DHashMap___size", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DHashMap.partition": [{"id": "Std___DHashMap___partition", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DHashMap.ofList": [{"id": "Std___DHashMap___ofList", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DHashMap.modify": [{"id": "Std___DHashMap___modify", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DHashMap.map": [{"id": "Std___DHashMap___map", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DHashMap.keysIter": [{"id": "Std___DHashMap___keysIter", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DHashMap.keysArray": [{"id": "Std___DHashMap___keysArray", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DHashMap.keys": [{"id": "Std___DHashMap___keys", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DHashMap.iter": [{"id": "Std___DHashMap___iter", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DHashMap.isEmpty": [{"id": "Std___DHashMap___isEmpty", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DHashMap.insertMany": [{"id": "Std___DHashMap___insertMany", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DHashMap.insertIfNew": [{"id": "Std___DHashMap___insertIfNew", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DHashMap.insert": [{"id": "Std___DHashMap___insert", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DHashMap.getThenInsertIfNew?": [{"id": "Std___DHashMap___getThenInsertIfNew___", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DHashMap.getKeyD": [{"id": "Std___DHashMap___getKeyD", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DHashMap.getKey?": [{"id": "Std___DHashMap___getKey___-next", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DHashMap.getKey!": [{"id": "Std___DHashMap___getKey___", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DHashMap.getKey": [{"id": "Std___DHashMap___getKey", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DHashMap.getD": [{"id": "Std___DHashMap___getD", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DHashMap.get?": [{"id": "Std___DHashMap___get___-next", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DHashMap.get!": [{"id": "Std___DHashMap___get___", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DHashMap.get": [{"id": "Std___DHashMap___get", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DHashMap.forM": [{"id": "Std___DHashMap___forM", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DHashMap.forIn": [{"id": "Std___DHashMap___forIn", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DHashMap.foldM": [{"id": "Std___DHashMap___foldM", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DHashMap.fold": [{"id": "Std___DHashMap___fold", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DHashMap.filterMap": [{"id": "Std___DHashMap___filterMap", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DHashMap.filter": [{"id": "Std___DHashMap___filter", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DHashMap.erase": [{"id": "Std___DHashMap___erase", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DHashMap.emptyWithCapacity": [{"id": "Std___DHashMap___emptyWithCapacity", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DHashMap.containsThenInsertIfNew": [{"id": "Std___DHashMap___containsThenInsertIfNew", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DHashMap.containsThenInsert": [{"id": "Std___DHashMap___containsThenInsert", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DHashMap.contains": [{"id": "Std___DHashMap___contains", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DHashMap.alter": [{"id": "Std___DHashMap___alter", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DHashMap.Raw.size": [{"id": "Std___DHashMap___Raw___mk", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DHashMap.Raw.mk": [{"id": "Std___DHashMap___Raw___mk", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DHashMap.Raw.buckets": [{"id": "Std___DHashMap___Raw___mk", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DHashMap.Raw.WF.wf": [{"id": "Std___DHashMap___Raw___WF___wf", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DHashMap.Raw.WF.modify₀": [{"id": "Std___DHashMap___Raw___WF___wf", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DHashMap.Raw.WF.insert₀": [{"id": "Std___DHashMap___Raw___WF___wf", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DHashMap.Raw.WF.insertIfNew₀": [{"id": "Std___DHashMap___Raw___WF___wf", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DHashMap.Raw.WF.getThenInsertIfNew?₀": [{"id": "Std___DHashMap___Raw___WF___wf", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DHashMap.Raw.WF.filter₀": [{"id": "Std___DHashMap___Raw___WF___wf", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DHashMap.Raw.WF.erase₀": [{"id": "Std___DHashMap___Raw___WF___wf", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DHashMap.Raw.WF.emptyWithCapacity₀": [{"id": "Std___DHashMap___Raw___WF___wf", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DHashMap.Raw.WF.containsThenInsert₀": [{"id": "Std___DHashMap___Raw___WF___wf", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DHashMap.Raw.WF.containsThenInsertIfNew₀": [{"id": "Std___DHashMap___Raw___WF___wf", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DHashMap.Raw.WF.constModify₀": [{"id": "Std___DHashMap___Raw___WF___wf", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DHashMap.Raw.WF.constGetThenInsertIfNew?₀": [{"id": "Std___DHashMap___Raw___WF___wf", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DHashMap.Raw.WF.constAlter₀": [{"id": "Std___DHashMap___Raw___WF___wf", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DHashMap.Raw.WF.alter₀": [{"id": "Std___DHashMap___Raw___WF___wf", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DHashMap.Raw.WF": [{"id": "Std___DHashMap___Raw___WF___wf", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DHashMap.Raw": [{"id": "Std___DHashMap___Raw___mk", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DHashMap.Equiv.mk": [{"id": "Std___DHashMap___Equiv___mk", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DHashMap.Equiv.inner": [{"id": "Std___DHashMap___Equiv___mk", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DHashMap.Equiv": [{"id": "Std___DHashMap___Equiv___mk", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.DHashMap": [{"id": "Std___DHashMap", "data": null, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.Condvar.waitUntil": [{"id": "Std___Condvar___waitUntil", "data": null, "address": "/IO/Tasks-and-Threads/"}], "Std.Condvar.wait": [{"id": "Std___Condvar___wait", "data": null, "address": "/IO/Tasks-and-Threads/"}], "Std.Condvar.notifyOne": [{"id": "Std___Condvar___notifyOne", "data": null, "address": "/IO/Tasks-and-Threads/"}], "Std.Condvar.notifyAll": [{"id": "Std___Condvar___notifyAll", "data": null, "address": "/IO/Tasks-and-Threads/"}], "Std.Condvar.new": [{"id": "Std___Condvar___new", "data": null, "address": "/IO/Tasks-and-Threads/"}], "Std.Condvar": [{"id": "Std___Condvar", "data": null, "address": "/IO/Tasks-and-Threads/"}], "Std.CloseableChannel.new": [{"id": "Std___CloseableChannel___new", "data": null, "address": "/IO/Tasks-and-Threads/"}], "Std.CloseableChannel": [{"id": "Std___CloseableChannel", "data": null, "address": "/IO/Tasks-and-Threads/"}], "Std.Channel.sync": [{"id": "Std___Channel___sync", "data": null, "address": "/IO/Tasks-and-Threads/"}], "Std.Channel.send": [{"id": "Std___Channel___send", "data": null, "address": "/IO/Tasks-and-Threads/"}], "Std.Channel.recv": [{"id": "Std___Channel___recv", "data": null, "address": "/IO/Tasks-and-Threads/"}], "Std.Channel.new": [{"id": "Std___Channel___new", "data": null, "address": "/IO/Tasks-and-Threads/"}], "Std.Channel.forAsync": [{"id": "Std___Channel___forAsync", "data": null, "address": "/IO/Tasks-and-Threads/"}], "Std.Channel.Sync": [{"id": "Std___Channel___Sync", "data": null, "address": "/IO/Tasks-and-Threads/"}], "Std.Channel": [{"id": "Std___Channel", "data": null, "address": "/IO/Tasks-and-Threads/"}], "Std.AtomicT": [{"id": "Std___AtomicT", "data": null, "address": "/IO/Tasks-and-Threads/"}], "StateT.set": [{"id": "StateT___set", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "StateT.run'": [{"id": "StateT___run___", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "StateT.run": [{"id": "StateT___run", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "StateT.pure": [{"id": "StateT___pure", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "StateT.orElse": [{"id": "StateT___orElse", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "StateT.modifyGet": [{"id": "StateT___modifyGet", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "StateT.map": [{"id": "StateT___map", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "StateT.lift": [{"id": "StateT___lift", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "StateT.get": [{"id": "StateT___get", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "StateT.failure": [{"id": "StateT___failure", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "StateT.bind": [{"id": "StateT___bind", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "StateT": [{"id": "StateT", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "StateRefT'.set": [{"id": "StateRefT______set", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "StateRefT'.run'": [{"id": "StateRefT______run___", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "StateRefT'.run": [{"id": "StateRefT______run", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "StateRefT'.modifyGet": [{"id": "StateRefT______modifyGet", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "StateRefT'.lift": [{"id": "StateRefT______lift", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "StateRefT'.get": [{"id": "StateRefT______get", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "StateRefT'": [{"id": "StateRefT___", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "StateM": [{"id": "StateM", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "StateCpsT.runK": [{"id": "StateCpsT___runK", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "StateCpsT.run'": [{"id": "StateCpsT___run___", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "StateCpsT.run": [{"id": "StateCpsT___run", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "StateCpsT.lift": [{"id": "StateCpsT___lift", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "StateCpsT": [{"id": "StateCpsT", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "Squash.mk": [{"id": "Squash___mk", "data": null, "address": "/The-Type-System/Quotients/"}], "Squash.lift": [{"id": "Squash___lift", "data": null, "address": "/The-Type-System/Quotients/"}], "Squash.ind": [{"id": "Squash___ind", "data": null, "address": "/The-Type-System/Quotients/"}], "Squash": [{"id": "Squash", "data": null, "address": "/The-Type-System/Quotients/"}], "SizeOf.sizeOf": [{"id": "SizeOf___mk", "data": null, "address": "/The-Type-System/Inductive-Types/"}], "SizeOf.mk": [{"id": "SizeOf___mk", "data": null, "address": "/The-Type-System/Inductive-Types/"}], "SizeOf": [{"id": "SizeOf___mk", "data": null, "address": "/The-Type-System/Inductive-Types/"}], "Sigma.snd": [{"id": "Sigma___mk", "data": null, "address": "/Basic-Types/Tuples/"}], "Sigma.mk": [{"id": "Sigma___mk", "data": null, "address": "/Basic-Types/Tuples/"}], "Sigma.fst": [{"id": "Sigma___mk", "data": null, "address": "/Basic-Types/Tuples/"}], "Sigma": [{"id": "Sigma___mk", "data": null, "address": "/Basic-Types/Tuples/"}], "ShiftRight.shiftRight": [{"id": "ShiftRight___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "ShiftRight.mk": [{"id": "ShiftRight___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "ShiftRight": [{"id": "ShiftRight___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "ShiftLeft.shiftLeft": [{"id": "ShiftLeft___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "ShiftLeft.mk": [{"id": "ShiftLeft___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "ShiftLeft": [{"id": "ShiftLeft___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "Setoid.trans": [{"id": "Setoid___trans", "data": null, "address": "/The-Type-System/Quotients/"}], "Setoid.symm": [{"id": "Setoid___symm", "data": null, "address": "/The-Type-System/Quotients/"}], "Setoid.refl": [{"id": "Setoid___refl", "data": null, "address": "/The-Type-System/Quotients/"}], "Setoid.r": [{"id": "Setoid___mk", "data": null, "address": "/The-Type-System/Quotients/"}], "Setoid.mk": [{"id": "Setoid___mk", "data": null, "address": "/The-Type-System/Quotients/"}], "Setoid.iseqv": [{"id": "Setoid___mk", "data": null, "address": "/The-Type-System/Quotients/"}], "Setoid": [{"id": "Setoid___mk", "data": null, "address": "/The-Type-System/Quotients/"}], "SeqRight.seqRight": [{"id": "SeqRight___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/"}], "SeqRight.mk": [{"id": "SeqRight___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/"}], "SeqRight": [{"id": "SeqRight___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/"}], "SeqLeft.seqLeft": [{"id": "SeqLeft___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/"}], "SeqLeft.mk": [{"id": "SeqLeft___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/"}], "SeqLeft": [{"id": "SeqLeft___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/"}], "Seq.seq": [{"id": "Seq___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/"}], "Seq.mk": [{"id": "Seq___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/"}], "Seq": [{"id": "Seq___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/"}], "STWorld.mk": [{"id": "STWorld___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "STWorld": [{"id": "STWorld___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "ST.mkRef": [{"id": "ST___mkRef", "data": null, "address": "/IO/Mutable-References/"}], "ST.Ref.toMonadStateOf": [{"id": "ST___Ref___toMonadStateOf", "data": null, "address": "/IO/Mutable-References/"}], "ST.Ref.take": [{"id": "ST___Ref___take", "data": null, "address": "/IO/Mutable-References/"}], "ST.Ref.swap": [{"id": "ST___Ref___swap", "data": null, "address": "/IO/Mutable-References/"}], "ST.Ref.set": [{"id": "ST___Ref___set", "data": null, "address": "/IO/Mutable-References/"}], "ST.Ref.ptrEq": [{"id": "ST___Ref___ptrEq", "data": null, "address": "/IO/Mutable-References/"}], "ST.Ref.modifyGet": [{"id": "ST___Ref___modifyGet", "data": null, "address": "/IO/Mutable-References/"}], "ST.Ref.modify": [{"id": "ST___Ref___modify", "data": null, "address": "/IO/Mutable-References/"}], "ST.Ref.mk": [{"id": "ST___Ref___mk", "data": null, "address": "/IO/Mutable-References/"}], "ST.Ref.get": [{"id": "ST___Ref___get", "data": null, "address": "/IO/Mutable-References/"}], "ST.Ref": [{"id": "ST___Ref___mk", "data": null, "address": "/IO/Mutable-References/"}], "ST": [{"id": "ST", "data": null, "address": "/IO/Mutable-References/"}], "SMul.smul": [{"id": "SMul___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "SMul.mk": [{"id": "SMul___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "SMul": [{"id": "SMul___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "ReprAtom.mk": [{"id": "ReprAtom___mk", "data": null, "address": "/Interacting-with-Lean/"}], "ReprAtom": [{"id": "ReprAtom___mk", "data": null, "address": "/Interacting-with-Lean/"}], "Repr.reprPrec": [{"id": "Repr___mk", "data": null, "address": "/Interacting-with-Lean/"}], "Repr.mk": [{"id": "Repr___mk", "data": null, "address": "/Interacting-with-Lean/"}], "Repr.addAppParen": [{"id": "Repr___addAppParen", "data": null, "address": "/Interacting-with-Lean/"}], "Repr": [{"id": "Repr___mk", "data": null, "address": "/Interacting-with-Lean/"}], "ReflBEq.rfl": [{"id": "ReflBEq___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "ReflBEq.mk": [{"id": "ReflBEq___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "ReflBEq": [{"id": "ReflBEq___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "ReaderT.run": [{"id": "ReaderT___run", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "ReaderT.read": [{"id": "ReaderT___read", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "ReaderT.pure": [{"id": "ReaderT___pure", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "ReaderT.orElse": [{"id": "ReaderT___orElse", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "ReaderT.failure": [{"id": "ReaderT___failure", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "ReaderT.bind": [{"id": "ReaderT___bind", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "ReaderT.adapt": [{"id": "ReaderT___adapt", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "ReaderT": [{"id": "ReaderT", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "ReaderM": [{"id": "ReaderM", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "RandomGen.split": [{"id": "RandomGen___mk", "data": null, "address": "/IO/Random-Numbers/"}], "RandomGen.range": [{"id": "RandomGen___mk", "data": null, "address": "/IO/Random-Numbers/"}], "RandomGen.next": [{"id": "RandomGen___mk", "data": null, "address": "/IO/Random-Numbers/"}], "RandomGen.mk": [{"id": "RandomGen___mk", "data": null, "address": "/IO/Random-Numbers/"}], "RandomGen": [{"id": "RandomGen___mk", "data": null, "address": "/IO/Random-Numbers/"}], "Quotient.sound": [{"id": "Quotient___sound", "data": null, "address": "/The-Type-System/Quotients/"}], "Quotient.recOnSubsingleton₂": [{"id": "Quotient___recOnSubsingleton___", "data": null, "address": "/The-Type-System/Quotients/"}], "Quotient.recOnSubsingleton": [{"id": "Quotient___recOnSubsingleton", "data": null, "address": "/The-Type-System/Quotients/"}], "Quotient.recOn": [{"id": "Quotient___recOn", "data": null, "address": "/The-Type-System/Quotients/"}], "Quotient.rec": [{"id": "Quotient___rec", "data": null, "address": "/The-Type-System/Quotients/"}], "Quotient.mk'": [{"id": "Quotient___mk___", "data": null, "address": "/The-Type-System/Quotients/"}], "Quotient.mk": [{"id": "Quotient___mk", "data": null, "address": "/The-Type-System/Quotients/"}], "Quotient.lift₂": [{"id": "Quotient___lift___", "data": null, "address": "/The-Type-System/Quotients/"}], "Quotient.liftOn₂": [{"id": "Quotient___liftOn___", "data": null, "address": "/The-Type-System/Quotients/"}], "Quotient.liftOn": [{"id": "Quotient___liftOn", "data": null, "address": "/The-Type-System/Quotients/"}], "Quotient.lift": [{"id": "Quotient___lift", "data": null, "address": "/The-Type-System/Quotients/"}], "Quotient.ind": [{"id": "Quotient___ind", "data": null, "address": "/The-Type-System/Quotients/"}], "Quotient.hrecOn": [{"id": "Quotient___hrecOn", "data": null, "address": "/The-Type-System/Quotients/"}], "Quotient.exact": [{"id": "Quotient___exact", "data": null, "address": "/The-Type-System/Quotients/"}], "Quotient": [{"id": "Quotient", "data": null, "address": "/The-Type-System/Quotients/"}], "Quot.sound": [{"id": "Quot___sound", "data": null, "address": "/The-Type-System/Quotients/"}], "Quot.recOnSubsingleton": [{"id": "Quot___recOnSubsingleton", "data": null, "address": "/The-Type-System/Quotients/"}], "Quot.recOn": [{"id": "Quot___recOn", "data": null, "address": "/The-Type-System/Quotients/"}], "Quot.rec": [{"id": "Quot___rec", "data": null, "address": "/The-Type-System/Quotients/"}], "Quot.mk": [{"id": "Quot___mk", "data": null, "address": "/The-Type-System/Quotients/"}], "Quot.liftOn": [{"id": "Quot___liftOn", "data": null, "address": "/The-Type-System/Quotients/"}], "Quot.lift": [{"id": "Quot___lift", "data": null, "address": "/The-Type-System/Quotients/"}], "Quot.ind": [{"id": "Quot___ind", "data": null, "address": "/The-Type-System/Quotients/"}], "Quot.hrecOn": [{"id": "Quot___hrecOn", "data": null, "address": "/The-Type-System/Quotients/"}], "Quot": [{"id": "Quot", "data": null, "address": "/The-Type-System/Quotients/"}], "Pure.pure": [{"id": "Pure___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/"}], "Pure.mk": [{"id": "Pure___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/"}], "Pure": [{"id": "Pure___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/"}], "Prod.swap": [{"id": "Prod___swap", "data": null, "address": "/Basic-Types/Tuples/"}], "Prod.snd": [{"id": "Prod___mk", "data": null, "address": "/Basic-Types/Tuples/"}], "Prod.mk": [{"id": "Prod___mk", "data": null, "address": "/Basic-Types/Tuples/"}], "Prod.map": [{"id": "Prod___map", "data": null, "address": "/Basic-Types/Tuples/"}], "Prod.lexLt": [{"id": "Prod___lexLt", "data": null, "address": "/Basic-Types/Tuples/"}], "Prod.fst": [{"id": "Prod___mk", "data": null, "address": "/Basic-Types/Tuples/"}], "Prod.foldI": [{"id": "Prod___foldI", "data": null, "address": "/Basic-Types/Tuples/"}], "Prod.anyI": [{"id": "Prod___anyI", "data": null, "address": "/Basic-Types/Tuples/"}], "Prod.allI": [{"id": "Prod___allI", "data": null, "address": "/Basic-Types/Tuples/"}], "Prod": [{"id": "Prod___mk", "data": null, "address": "/Basic-Types/Tuples/"}], "Pow.pow": [{"id": "Pow___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "Pow.mk": [{"id": "Pow___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "Pow": [{"id": "Pow___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "PUnit.unit": [{"id": "PUnit___unit", "data": null, "address": "/Basic-Types/The-Unit-Type/"}], "PUnit": [{"id": "PUnit___unit", "data": null, "address": "/Basic-Types/The-Unit-Type/"}], "PSum.inr": [{"id": "PSum___inl", "data": null, "address": "/Basic-Types/Sum-Types/"}], "PSum.inl": [{"id": "PSum___inl", "data": null, "address": "/Basic-Types/Sum-Types/"}], "PSum.inhabitedRight": [{"id": "PSum___inhabitedRight", "data": null, "address": "/Basic-Types/Sum-Types/"}], "PSum.inhabitedLeft": [{"id": "PSum___inhabitedLeft", "data": null, "address": "/Basic-Types/Sum-Types/"}], "PSum": [{"id": "PSum___inl", "data": null, "address": "/Basic-Types/Sum-Types/"}], "PSigma.snd": [{"id": "PSigma___mk", "data": null, "address": "/Basic-Types/Tuples/"}], "PSigma.mk": [{"id": "PSigma___mk", "data": null, "address": "/Basic-Types/Tuples/"}], "PSigma.fst": [{"id": "PSigma___mk", "data": null, "address": "/Basic-Types/Tuples/"}], "PSigma": [{"id": "PSigma___mk", "data": null, "address": "/Basic-Types/Tuples/"}], "PProd.snd": [{"id": "PProd___mk", "data": null, "address": "/Basic-Types/Tuples/"}], "PProd.mk": [{"id": "PProd___mk", "data": null, "address": "/Basic-Types/Tuples/"}], "PProd.fst": [{"id": "PProd___mk", "data": null, "address": "/Basic-Types/Tuples/"}], "PProd": [{"id": "PProd___mk", "data": null, "address": "/Basic-Types/Tuples/"}], "PLift.up": [{"id": "PLift___up", "data": null, "address": "/The-Type-System/Universes/"}], "PLift.down": [{"id": "PLift___up", "data": null, "address": "/The-Type-System/Universes/"}], "PLift": [{"id": "PLift___up", "data": null, "address": "/The-Type-System/Universes/"}], "PEmpty.elim": [{"id": "PEmpty___elim", "data": null, "address": "/Basic-Types/The-Empty-Type/"}], "PEmpty": [{"id": "PEmpty", "data": null, "address": "/Basic-Types/The-Empty-Type/"}], "Ordering.then": [{"id": "Ordering___then", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "Ordering.swap": [{"id": "Ordering___swap", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "Ordering.lt": [{"id": "Ordering___lt", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "Ordering.isNe": [{"id": "Ordering___isNe", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "Ordering.isLT": [{"id": "Ordering___isLT", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "Ordering.isLE": [{"id": "Ordering___isLE", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "Ordering.isGT": [{"id": "Ordering___isGT", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "Ordering.isGE": [{"id": "Ordering___isGE", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "Ordering.isEq": [{"id": "Ordering___isEq", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "Ordering.gt": [{"id": "Ordering___lt", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "Ordering.eq": [{"id": "Ordering___lt", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "Ordering": [{"id": "Ordering___lt", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "Ord.toLT": [{"id": "Ord___toLT", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "Ord.toLE": [{"id": "Ord___toLE", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "Ord.toBEq": [{"id": "Ord___toBEq", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "Ord.opposite": [{"id": "Ord___opposite", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "Ord.on": [{"id": "Ord___on", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "Ord.mk": [{"id": "Ord___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "Ord.lex'": [{"id": "Ord___lex___", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "Ord.lex": [{"id": "Ord___lex", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "Ord.compare": [{"id": "Ord___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "Ord": [{"id": "Ord___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "OrOp.or": [{"id": "OrOp___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "OrOp.mk": [{"id": "OrOp___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "OrOp": [{"id": "OrOp___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "Or.inr": [{"id": "Or___inl", "data": null, "address": "/Basic-Propositions/Logical-Connectives/"}], "Or.inl": [{"id": "Or___inl", "data": null, "address": "/Basic-Propositions/Logical-Connectives/"}], "Or.by_cases'": [{"id": "Or___by_cases___", "data": null, "address": "/Basic-Propositions/Logical-Connectives/"}], "Or.by_cases": [{"id": "Or___by_cases", "data": null, "address": "/Basic-Propositions/Logical-Connectives/"}], "Or": [{"id": "Or___inl", "data": null, "address": "/Basic-Propositions/Logical-Connectives/"}], "OptionT.tryCatch": [{"id": "OptionT___tryCatch", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "OptionT.run": [{"id": "OptionT___run", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "OptionT.pure": [{"id": "OptionT___pure", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "OptionT.orElse": [{"id": "OptionT___orElse", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "OptionT.mk": [{"id": "OptionT___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "OptionT.lift": [{"id": "OptionT___lift", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "OptionT.fail": [{"id": "OptionT___fail", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "OptionT.bind": [{"id": "OptionT___bind", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "OptionT": [{"id": "OptionT", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "Option.unattach": [{"id": "Option___unattach", "data": null, "address": "/Basic-Types/Optional-Values/"}], "Option.tryCatch": [{"id": "Option___tryCatch", "data": null, "address": "/Basic-Types/Optional-Values/"}], "Option.toList": [{"id": "Option___toList", "data": null, "address": "/Basic-Types/Optional-Values/"}], "Option.toArray": [{"id": "Option___toArray", "data": null, "address": "/Basic-Types/Optional-Values/"}], "Option.some": [{"id": "Option___none", "data": null, "address": "/Basic-Types/Optional-Values/"}], "Option.sequence": [{"id": "Option___sequence", "data": null, "address": "/Basic-Types/Optional-Values/"}], "Option.repr": [{"id": "Option___repr", "data": null, "address": "/Basic-Types/Optional-Values/"}], "Option.pmap": [{"id": "Option___pmap", "data": null, "address": "/Basic-Types/Optional-Values/"}], "Option.pelim": [{"id": "Option___pelim", "data": null, "address": "/Basic-Types/Optional-Values/"}], "Option.pbind": [{"id": "Option___pbind", "data": null, "address": "/Basic-Types/Optional-Values/"}], "Option.orElse": [{"id": "Option___orElse", "data": null, "address": "/Basic-Types/Optional-Values/"}], "Option.or": [{"id": "Option___or", "data": null, "address": "/Basic-Types/Optional-Values/"}], "Option.none": [{"id": "Option___none", "data": null, "address": "/Basic-Types/Optional-Values/"}], "Option.min": [{"id": "Option___min", "data": null, "address": "/Basic-Types/Optional-Values/"}], "Option.merge": [{"id": "Option___merge", "data": null, "address": "/Basic-Types/Optional-Values/"}], "Option.max": [{"id": "Option___max", "data": null, "address": "/Basic-Types/Optional-Values/"}], "Option.mapM": [{"id": "Option___mapM", "data": null, "address": "/Basic-Types/Optional-Values/"}], "Option.mapA": [{"id": "Option___mapA", "data": null, "address": "/Basic-Types/Optional-Values/"}], "Option.map": [{"id": "Option___map", "data": null, "address": "/Basic-Types/Optional-Values/"}], "Option.lt": [{"id": "Option___lt", "data": null, "address": "/Basic-Types/Optional-Values/"}], "Option.join": [{"id": "Option___join", "data": null, "address": "/Basic-Types/Optional-Values/"}], "Option.isSome": [{"id": "Option___isSome", "data": null, "address": "/Basic-Types/Optional-Values/"}], "Option.isNone": [{"id": "Option___isNone", "data": null, "address": "/Basic-Types/Optional-Values/"}], "Option.isEqSome": [{"id": "Option___isEqSome", "data": null, "address": "/Basic-Types/Optional-Values/"}], "Option.guard": [{"id": "Option___guard", "data": null, "address": "/Basic-Types/Optional-Values/"}], "Option.getM": [{"id": "Option___getM", "data": null, "address": "/Basic-Types/Optional-Values/"}], "Option.getDM": [{"id": "Option___getDM", "data": null, "address": "/Basic-Types/Optional-Values/"}], "Option.getD": [{"id": "Option___getD", "data": null, "address": "/Basic-Types/Optional-Values/"}], "Option.get!": [{"id": "Option___get___", "data": null, "address": "/Basic-Types/Optional-Values/"}], "Option.get": [{"id": "Option___get", "data": null, "address": "/Basic-Types/Optional-Values/"}], "Option.format": [{"id": "Option___format", "data": null, "address": "/Basic-Types/Optional-Values/"}], "Option.forM": [{"id": "Option___forM", "data": null, "address": "/Basic-Types/Optional-Values/"}], "Option.filterM": [{"id": "Option___filterM", "data": null, "address": "/Basic-Types/Optional-Values/"}], "Option.filter": [{"id": "Option___filter", "data": null, "address": "/Basic-Types/Optional-Values/"}], "Option.elimM": [{"id": "Option___elimM", "data": null, "address": "/Basic-Types/Optional-Values/"}], "Option.elim": [{"id": "Option___elim", "data": null, "address": "/Basic-Types/Optional-Values/"}], "Option.decidableEqNone": [{"id": "Option___decidableEqNone", "data": null, "address": "/Basic-Types/Optional-Values/"}], "Option.choice": [{"id": "Option___choice", "data": null, "address": "/Basic-Types/Optional-Values/"}], "Option.bindM": [{"id": "Option___bindM", "data": null, "address": "/Basic-Types/Optional-Values/"}], "Option.bind": [{"id": "Option___bind", "data": null, "address": "/Basic-Types/Optional-Values/"}], "Option.attachWith": [{"id": "Option___attachWith", "data": null, "address": "/Basic-Types/Optional-Values/"}], "Option.attach": [{"id": "Option___attach", "data": null, "address": "/Basic-Types/Optional-Values/"}], "Option.any": [{"id": "Option___any", "data": null, "address": "/Basic-Types/Optional-Values/"}], "Option.all": [{"id": "Option___all", "data": null, "address": "/Basic-Types/Optional-Values/"}], "Option": [{"id": "Option___none", "data": null, "address": "/Basic-Types/Optional-Values/"}], "OfScientific.ofScientific": [{"id": "OfScientific___mk", "data": null, "address": "/Terms/Numeric-Literals/"}], "OfScientific.mk": [{"id": "OfScientific___mk", "data": null, "address": "/Terms/Numeric-Literals/"}], "OfScientific": [{"id": "OfScientific___mk", "data": null, "address": "/Terms/Numeric-Literals/"}], "OfNat.ofNat": [{"id": "OfNat___mk", "data": null, "address": "/Terms/Numeric-Literals/"}], "OfNat.mk": [{"id": "OfNat___mk", "data": null, "address": "/Terms/Numeric-Literals/"}], "OfNat": [{"id": "OfNat___mk", "data": null, "address": "/Terms/Numeric-Literals/"}], "Not.elim": [{"id": "Not___elim", "data": null, "address": "/Basic-Propositions/Logical-Connectives/"}], "Not": [{"id": "Not", "data": null, "address": "/Basic-Propositions/Logical-Connectives/"}], "Nonempty.intro": [{"id": "Nonempty___intro", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "Nonempty": [{"id": "Nonempty___intro", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "Neg.neg": [{"id": "Neg___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "Neg.mk": [{"id": "Neg___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "Neg": [{"id": "Neg___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "NeZero.out": [{"id": "NeZero___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "NeZero.mk": [{"id": "NeZero___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "NeZero": [{"id": "NeZero___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "NatPow.pow": [{"id": "NatPow___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "NatPow.mk": [{"id": "NatPow___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "NatPow": [{"id": "NatPow___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "NatCast.natCast": [{"id": "NatCast___mk", "data": null, "address": "/Coercions/Coercing-Between-Types/"}], "NatCast.mk": [{"id": "NatCast___mk", "data": null, "address": "/Coercions/Coercing-Between-Types/"}], "NatCast": [{"id": "NatCast___mk", "data": null, "address": "/Coercions/Coercing-Between-Types/"}], "Nat.zero": [{"id": "Nat___zero", "data": null, "address": "/Basic-Types/Natural-Numbers/"}], "Nat.xor": [{"id": "Nat___xor", "data": null, "address": "/Basic-Types/Natural-Numbers/"}], "Nat.toUSize": [{"id": "Nat___toUSize", "data": null, "address": "/Basic-Types/Natural-Numbers/"}], "Nat.toUInt8": [{"id": "Nat___toUInt8", "data": null, "address": "/Basic-Types/Natural-Numbers/"}], "Nat.toUInt64": [{"id": "Nat___toUInt64", "data": null, "address": "/Basic-Types/Natural-Numbers/"}], "Nat.toUInt32": [{"id": "Nat___toUInt32", "data": null, "address": "/Basic-Types/Natural-Numbers/"}], "Nat.toUInt16": [{"id": "Nat___toUInt16", "data": null, "address": "/Basic-Types/Natural-Numbers/"}], "Nat.toSuperscriptString": [{"id": "Nat___toSuperscriptString", "data": null, "address": "/Basic-Types/Natural-Numbers/"}], "Nat.toSuperDigits": [{"id": "Nat___toSuperDigits", "data": null, "address": "/Basic-Types/Natural-Numbers/"}], "Nat.toSubscriptString": [{"id": "Nat___toSubscriptString", "data": null, "address": "/Basic-Types/Natural-Numbers/"}], "Nat.toSubDigits": [{"id": "Nat___toSubDigits", "data": null, "address": "/Basic-Types/Natural-Numbers/"}], "Nat.toInt8": [{"id": "Nat___toInt8", "data": null, "address": "/Basic-Types/Natural-Numbers/"}], "Nat.toInt64": [{"id": "Nat___toInt64", "data": null, "address": "/Basic-Types/Natural-Numbers/"}], "Nat.toInt32": [{"id": "Nat___toInt32", "data": null, "address": "/Basic-Types/Natural-Numbers/"}], "Nat.toInt16": [{"id": "Nat___toInt16", "data": null, "address": "/Basic-Types/Natural-Numbers/"}], "Nat.toISize": [{"id": "Nat___toISize", "data": null, "address": "/Basic-Types/Natural-Numbers/"}], "Nat.toFloat32": [{"id": "Nat___toFloat32", "data": null, "address": "/Basic-Types/Natural-Numbers/"}], "Nat.toFloat": [{"id": "Nat___toFloat", "data": null, "address": "/Basic-Types/Natural-Numbers/"}], "Nat.toDigits": [{"id": "Nat___toDigits", "data": null, "address": "/Basic-Types/Natural-Numbers/"}], "Nat.testBit": [{"id": "Nat___testBit", "data": null, "address": "/Basic-Types/Natural-Numbers/"}], "Nat.superDigitChar": [{"id": "Nat___superDigitChar", "data": null, "address": "/Basic-Types/Natural-Numbers/"}], "Nat.succ": [{"id": "Nat___zero", "data": null, "address": "/Basic-Types/Natural-Numbers/"}], "Nat.subDigitChar": [{"id": "Nat___subDigitChar", "data": null, "address": "/Basic-Types/Natural-Numbers/"}], "Nat.sub": [{"id": "Nat___sub", "data": null, "address": "/Basic-Types/Natural-Numbers/"}], "Nat.strongRecOn": [{"id": "Nat___strongRecOn", "data": null, "address": "/Basic-Types/Natural-Numbers/"}], "Nat.shiftRight": [{"id": "Nat___shiftRight", "data": null, "address": "/Basic-Types/Natural-Numbers/"}], "Nat.shiftLeft": [{"id": "Nat___shiftLeft", "data": null, "address": "/Basic-Types/Natural-Numbers/"}], "Nat.repr": [{"id": "Nat___repr", "data": null, "address": "/Basic-Types/Natural-Numbers/"}], "Nat.repeatTR": [{"id": "Nat___repeatTR", "data": null, "address": "/Basic-Types/Natural-Numbers/"}], "Nat.repeat": [{"id": "Nat___repeat", "data": null, "address": "/Basic-Types/Natural-Numbers/"}], "Nat.recAux": [{"id": "Nat___recAux", "data": null, "address": "/Basic-Types/Natural-Numbers/"}], "Nat.pred": [{"id": "Nat___pred", "data": null, "address": "/Basic-Types/Natural-Numbers/"}], "Nat.pow": [{"id": "Nat___pow", "data": null, "address": "/Basic-Types/Natural-Numbers/"}], "Nat.nextPowerOfTwo": [{"id": "Nat___nextPowerOfTwo", "data": null, "address": "/Basic-Types/Natural-Numbers/"}], "Nat.mul": [{"id": "Nat___mul", "data": null, "address": "/Basic-Types/Natural-Numbers/"}], "Nat.modCore": [{"id": "Nat___modCore", "data": null, "address": "/Basic-Types/Natural-Numbers/"}], "Nat.mod.inductionOn": [{"id": "Nat___mod___inductionOn", "data": null, "address": "/Basic-Types/Natural-Numbers/"}], "Nat.mod": [{"id": "Nat___mod", "data": null, "address": "/Basic-Types/Natural-Numbers/"}], "Nat.min": [{"id": "Nat___min", "data": null, "address": "/Basic-Types/Natural-Numbers/"}], "Nat.max": [{"id": "Nat___max", "data": null, "address": "/Basic-Types/Natural-Numbers/"}], "Nat.lt": [{"id": "Nat___lt", "data": null, "address": "/Basic-Types/Natural-Numbers/"}], "Nat.lor": [{"id": "Nat___lor", "data": null, "address": "/Basic-Types/Natural-Numbers/"}], "Nat.log2": [{"id": "Nat___log2", "data": null, "address": "/Basic-Types/Natural-Numbers/"}], "Nat.le.step": [{"id": "Nat___le___refl", "data": null, "address": "/Basic-Types/Natural-Numbers/"}], "Nat.le.refl": [{"id": "Nat___le___refl", "data": null, "address": "/Basic-Types/Natural-Numbers/"}], "Nat.le": [{"id": "Nat___le___refl", "data": null, "address": "/Basic-Types/Natural-Numbers/"}], "Nat.lcm": [{"id": "Nat___lcm", "data": null, "address": "/Basic-Types/Natural-Numbers/"}], "Nat.land": [{"id": "Nat___land", "data": null, "address": "/Basic-Types/Natural-Numbers/"}], "Nat.isValidChar": [{"id": "Nat___isValidChar", "data": null, "address": "/Basic-Types/Natural-Numbers/"}], "Nat.isPowerOfTwo": [{"id": "Nat___isPowerOfTwo", "data": null, "address": "/Basic-Types/Natural-Numbers/"}], "Nat.gcd": [{"id": "Nat___gcd", "data": null, "address": "/Basic-Types/Natural-Numbers/"}], "Nat.forRevM": [{"id": "Nat___forRevM", "data": null, "address": "/Basic-Types/Natural-Numbers/"}], "Nat.forM": [{"id": "Nat___forM", "data": null, "address": "/Basic-Types/Natural-Numbers/"}], "Nat.foldTR": [{"id": "Nat___foldTR", "data": null, "address": "/Basic-Types/Natural-Numbers/"}], "Nat.foldRevM": [{"id": "Nat___foldRevM", "data": null, "address": "/Basic-Types/Natural-Numbers/"}], "Nat.foldRev": [{"id": "Nat___foldRev", "data": null, "address": "/Basic-Types/Natural-Numbers/"}], "Nat.foldM": [{"id": "Nat___foldM", "data": null, "address": "/Basic-Types/Natural-Numbers/"}], "Nat.fold": [{"id": "Nat___fold", "data": null, "address": "/Basic-Types/Natural-Numbers/"}], "Nat.div2Induction": [{"id": "Nat___div2Induction", "data": null, "address": "/Basic-Types/Natural-Numbers/"}], "Nat.div.inductionOn": [{"id": "Nat___div___inductionOn", "data": null, "address": "/Basic-Types/Natural-Numbers/"}], "Nat.div": [{"id": "Nat___div", "data": null, "address": "/Basic-Types/Natural-Numbers/"}], "Nat.digitChar": [{"id": "Nat___digitChar", "data": null, "address": "/Basic-Types/Natural-Numbers/"}], "Nat.decLt": [{"id": "Nat___decLt", "data": null, "address": "/Basic-Types/Natural-Numbers/"}], "Nat.decLe": [{"id": "Nat___decLe", "data": null, "address": "/Basic-Types/Natural-Numbers/"}], "Nat.decEq": [{"id": "Nat___decEq", "data": null, "address": "/Basic-Types/Natural-Numbers/"}], "Nat.cast": [{"id": "Nat___cast", "data": null, "address": "/Coercions/Coercing-Between-Types/"}], "Nat.casesAuxOn": [{"id": "Nat___casesAuxOn", "data": null, "address": "/Basic-Types/Natural-Numbers/"}], "Nat.caseStrongRecOn": [{"id": "Nat___caseStrongRecOn", "data": null, "address": "/Basic-Types/Natural-Numbers/"}], "Nat.blt": [{"id": "Nat___blt", "data": null, "address": "/Basic-Types/Natural-Numbers/"}], "Nat.ble": [{"id": "Nat___ble", "data": null, "address": "/Basic-Types/Natural-Numbers/"}], "Nat.bitwise": [{"id": "Nat___bitwise", "data": null, "address": "/Basic-Types/Natural-Numbers/"}], "Nat.beq": [{"id": "Nat___beq", "data": null, "address": "/Basic-Types/Natural-Numbers/"}], "Nat.anyTR": [{"id": "Nat___anyTR", "data": null, "address": "/Basic-Types/Natural-Numbers/"}], "Nat.anyM": [{"id": "Nat___anyM", "data": null, "address": "/Basic-Types/Natural-Numbers/"}], "Nat.any": [{"id": "Nat___any", "data": null, "address": "/Basic-Types/Natural-Numbers/"}], "Nat.allTR": [{"id": "Nat___allTR", "data": null, "address": "/Basic-Types/Natural-Numbers/"}], "Nat.allM": [{"id": "Nat___allM", "data": null, "address": "/Basic-Types/Natural-Numbers/"}], "Nat.all": [{"id": "Nat___all", "data": null, "address": "/Basic-Types/Natural-Numbers/"}], "Nat.add": [{"id": "Nat___add", "data": null, "address": "/Basic-Types/Natural-Numbers/"}], "Nat": [{"id": "Nat___zero", "data": null, "address": "/Basic-Types/Natural-Numbers/"}], "Mul.mul": [{"id": "Mul___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "Mul.mk": [{"id": "Mul___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "Mul": [{"id": "Mul___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "MonadWithReaderOf.withReader": [{"id": "MonadWithReaderOf___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "MonadWithReaderOf.mk": [{"id": "MonadWithReaderOf___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "MonadWithReaderOf": [{"id": "MonadWithReaderOf___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "MonadWithReader.withReader": [{"id": "MonadWithReader___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "MonadWithReader.mk": [{"id": "MonadWithReader___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "MonadWithReader": [{"id": "MonadWithReader___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "MonadStateOf.set": [{"id": "MonadStateOf___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "MonadStateOf.modifyGet": [{"id": "MonadStateOf___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "MonadStateOf.mk": [{"id": "MonadStateOf___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "MonadStateOf.get": [{"id": "MonadStateOf___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "MonadStateOf": [{"id": "MonadStateOf___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "MonadState.set": [{"id": "MonadState___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "MonadState.modifyGet": [{"id": "MonadState___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}, {"id": "MonadState___modifyGet", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "MonadState.mk": [{"id": "MonadState___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "MonadState.get": [{"id": "MonadState___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}, {"id": "MonadState___get", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "MonadState": [{"id": "MonadState___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "MonadReaderOf.read": [{"id": "MonadReaderOf___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "MonadReaderOf.mk": [{"id": "MonadReaderOf___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "MonadReaderOf": [{"id": "MonadReaderOf___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "MonadReader.read": [{"id": "MonadReader___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "MonadReader.mk": [{"id": "MonadReader___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "MonadReader": [{"id": "MonadReader___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "MonadLiftT.monadLift": [{"id": "MonadLiftT___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/Lifting-Monads/"}], "MonadLiftT.mk": [{"id": "MonadLiftT___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/Lifting-Monads/"}], "MonadLiftT": [{"id": "MonadLiftT___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/Lifting-Monads/"}], "MonadLift.monadLift": [{"id": "MonadLift___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/Lifting-Monads/"}], "MonadLift.mk": [{"id": "MonadLift___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/Lifting-Monads/"}], "MonadLift": [{"id": "MonadLift___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/Lifting-Monads/"}], "MonadFunctorT.monadMap": [{"id": "MonadFunctorT___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/Lifting-Monads/"}], "MonadFunctorT.mk": [{"id": "MonadFunctorT___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/Lifting-Monads/"}], "MonadFunctorT": [{"id": "MonadFunctorT___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/Lifting-Monads/"}], "MonadFunctor.monadMap": [{"id": "MonadFunctor___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/Lifting-Monads/"}], "MonadFunctor.mk": [{"id": "MonadFunctor___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/Lifting-Monads/"}], "MonadFunctor": [{"id": "MonadFunctor___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/Lifting-Monads/"}], "MonadFinally.tryFinally'": [{"id": "MonadFinally___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "MonadFinally.mk": [{"id": "MonadFinally___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "MonadFinally": [{"id": "MonadFinally___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "MonadExceptOf.tryCatch": [{"id": "MonadExceptOf___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "MonadExceptOf.throw": [{"id": "MonadExceptOf___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "MonadExceptOf.mk": [{"id": "MonadExceptOf___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "MonadExceptOf": [{"id": "MonadExceptOf___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "MonadExcept.tryCatch": [{"id": "MonadExcept___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "MonadExcept.throw": [{"id": "MonadExcept___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "MonadExcept.orelse'": [{"id": "MonadExcept___orelse___", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "MonadExcept.orElse": [{"id": "MonadExcept___orElse", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "MonadExcept.ofExcept": [{"id": "MonadExcept___ofExcept", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "MonadExcept.mk": [{"id": "MonadExcept___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "MonadExcept": [{"id": "MonadExcept___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "MonadEvalT.monadEval": [{"id": "MonadEvalT___mk", "data": null, "address": "/Interacting-with-Lean/"}], "MonadEvalT.mk": [{"id": "MonadEvalT___mk", "data": null, "address": "/Interacting-with-Lean/"}], "MonadEvalT": [{"id": "MonadEvalT___mk", "data": null, "address": "/Interacting-with-Lean/"}], "MonadEval.monadEval": [{"id": "MonadEval___mk", "data": null, "address": "/Interacting-with-Lean/"}], "MonadEval.mk": [{"id": "MonadEval___mk", "data": null, "address": "/Interacting-with-Lean/"}], "MonadEval": [{"id": "MonadEval___mk", "data": null, "address": "/Interacting-with-Lean/"}], "MonadControlT.stM": [{"id": "MonadControlT___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/Lifting-Monads/"}], "MonadControlT.restoreM": [{"id": "MonadControlT___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/Lifting-Monads/"}], "MonadControlT.mk": [{"id": "MonadControlT___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/Lifting-Monads/"}], "MonadControlT.liftWith": [{"id": "MonadControlT___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/Lifting-Monads/"}], "MonadControlT": [{"id": "MonadControlT___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/Lifting-Monads/"}], "MonadControl.stM": [{"id": "MonadControl___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/Lifting-Monads/"}], "MonadControl.restoreM": [{"id": "MonadControl___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/Lifting-Monads/"}], "MonadControl.mk": [{"id": "MonadControl___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/Lifting-Monads/"}], "MonadControl.liftWith": [{"id": "MonadControl___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/Lifting-Monads/"}], "MonadControl": [{"id": "MonadControl___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/Lifting-Monads/"}], "Monad.toApplicative": [{"id": "Monad___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/"}], "Monad.mk": [{"id": "Monad___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/"}], "Monad": [{"id": "Monad___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/"}], "Mod.mod": [{"id": "Mod___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "Mod.mk": [{"id": "Mod___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "Mod": [{"id": "Mod___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "Min.mk": [{"id": "Min___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "Min.min": [{"id": "Min___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "Min": [{"id": "Min___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "Max.mk": [{"id": "Max___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "Max.max": [{"id": "Max___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "Max": [{"id": "Max___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "MProd.snd": [{"id": "MProd___mk", "data": null, "address": "/Basic-Types/Tuples/"}], "MProd.mk": [{"id": "MProd___mk", "data": null, "address": "/Basic-Types/Tuples/"}], "MProd.fst": [{"id": "MProd___mk", "data": null, "address": "/Basic-Types/Tuples/"}], "MProd": [{"id": "MProd___mk", "data": null, "address": "/Basic-Types/Tuples/"}], "List.zipWithTR": [{"id": "List___zipWithTR", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.zipWithAll": [{"id": "List___zipWithAll", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.zipWith": [{"id": "List___zipWith", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.zipIdxTR": [{"id": "List___zipIdxTR", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.zipIdx": [{"id": "List___zipIdx", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.zip": [{"id": "List___zip", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.unzipTR": [{"id": "List___unzipTR", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.unzip": [{"id": "List___unzip", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.unattach": [{"id": "List___unattach", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.toString": [{"id": "List___toString", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.toFloatArray": [{"id": "List___toFloatArray", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.toByteArray": [{"id": "List___toByteArray", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.toArrayImpl": [{"id": "List___toArrayImpl", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.toArray": [{"id": "List___toArray", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.takeWhileTR": [{"id": "List___takeWhileTR", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.takeWhile": [{"id": "List___takeWhile", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.takeTR": [{"id": "List___takeTR", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.take": [{"id": "List___take", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.tailD": [{"id": "List___tailD", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.tail?": [{"id": "List___tail___-next", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.tail!": [{"id": "List___tail___", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.tail": [{"id": "List___tail", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.sum": [{"id": "List___sum", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.splitBy": [{"id": "List___splitBy", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.splitAt": [{"id": "List___splitAt", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.span": [{"id": "List___span", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.singleton": [{"id": "List___singleton", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.setTR": [{"id": "List___setTR", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.set": [{"id": "List___set", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.rotateRight": [{"id": "List___rotateRight", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.rotateLeft": [{"id": "List___rotateLeft", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.rightpad": [{"id": "List___rightpad", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.reverse": [{"id": "List___reverse", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.replicateTR": [{"id": "List___replicateTR", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.replicate": [{"id": "List___replicate", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.replaceTR": [{"id": "List___replaceTR", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.replace": [{"id": "List___replace", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.removeAll": [{"id": "List___removeAll", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.range'TR": [{"id": "List___range___TR", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.range'": [{"id": "List___range___", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.range": [{"id": "List___range", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.pmap": [{"id": "List___pmap", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.partitionMap": [{"id": "List___partitionMap", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.partitionM": [{"id": "List___partitionM", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.partition": [{"id": "List___partition", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.or": [{"id": "List___or", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.ofFn": [{"id": "List___ofFn", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.nil": [{"id": "List___nil", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.modifyTailIdx": [{"id": "List___modifyTailIdx", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.modifyTR": [{"id": "List___modifyTR", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.modifyHead": [{"id": "List___modifyHead", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.modify": [{"id": "List___modify", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.min?": [{"id": "List___min___", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.mergeSort": [{"id": "List___mergeSort", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.merge": [{"id": "List___merge", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.max?": [{"id": "List___max___", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.mapTR": [{"id": "List___mapTR", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.mapMonoM": [{"id": "List___mapMonoM", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.mapMono": [{"id": "List___mapMono", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.mapM'": [{"id": "List___mapM___", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.mapM": [{"id": "List___mapM", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.mapIdxM": [{"id": "List___mapIdxM", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.mapIdx": [{"id": "List___mapIdx", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.mapFinIdxM": [{"id": "List___mapFinIdxM", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.mapFinIdx": [{"id": "List___mapFinIdx", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.mapA": [{"id": "List___mapA", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.map": [{"id": "List___map", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.lt": [{"id": "List___lt", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.lookup": [{"id": "List___lookup", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.lex": [{"id": "List___lex", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.lengthTR": [{"id": "List___lengthTR", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.length": [{"id": "List___length", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.leftpadTR": [{"id": "List___leftpadTR", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.leftpad": [{"id": "List___leftpad", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.le": [{"id": "List___le", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.iterM": [{"id": "List___iterM", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.iter": [{"id": "List___iter", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.isSuffixOf?": [{"id": "List___isSuffixOf___", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.isSuffixOf": [{"id": "List___isSuffixOf", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.isSublist": [{"id": "List___isSublist", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.isPrefixOf?": [{"id": "List___isPrefixOf___", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.isPrefixOf": [{"id": "List___isPrefixOf", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.isPerm": [{"id": "List___isPerm", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.isEqv": [{"id": "List___isEqv", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.isEmpty": [{"id": "List___isEmpty", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.intersperseTR": [{"id": "List___intersperseTR", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.intersperse": [{"id": "List___intersperse", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.intercalateTR": [{"id": "List___intercalateTR", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.intercalate": [{"id": "List___intercalate", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.insertIdxTR": [{"id": "List___insertIdxTR", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.insertIdx": [{"id": "List___insertIdx", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.insert": [{"id": "List___insert", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.idxOf?": [{"id": "List___idxOf___", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.idxOf": [{"id": "List___idxOf", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.headD": [{"id": "List___headD", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.head?": [{"id": "List___head___", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.head!": [{"id": "List___head___-next", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.head": [{"id": "List___head", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.groupByKey": [{"id": "List___groupByKey", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.getLastD": [{"id": "List___getLastD", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.getLast?": [{"id": "List___getLast___", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.getLast!": [{"id": "List___getLast___-next", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.getLast": [{"id": "List___getLast", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.getD": [{"id": "List___getD", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.get": [{"id": "List___get", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.forM": [{"id": "List___forM", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.forA": [{"id": "List___forA", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.foldrTR": [{"id": "List___foldrTR", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.foldrRecOn": [{"id": "List___foldrRecOn", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.foldrM": [{"id": "List___foldrM", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.foldr": [{"id": "List___foldr", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.foldlRecOn": [{"id": "List___foldlRecOn", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.foldlM": [{"id": "List___foldlM", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.foldl": [{"id": "List___foldl", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.flattenTR": [{"id": "List___flattenTR", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.flatten": [{"id": "List___flatten", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.flatMapTR": [{"id": "List___flatMapTR", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.flatMapM": [{"id": "List___flatMapM", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.flatMap": [{"id": "List___flatMap", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.firstM": [{"id": "List___firstM", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.findSomeM?": [{"id": "List___findSomeM___", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.findSome?": [{"id": "List___findSome___", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.findM?": [{"id": "List___findM___", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.findIdx?": [{"id": "List___findIdx___", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.findIdx": [{"id": "List___findIdx", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.findFinIdx?": [{"id": "List___findFinIdx___", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.find?": [{"id": "List___find___", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.finRange": [{"id": "List___finRange", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.finIdxOf?": [{"id": "List___finIdxOf___", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.filterTR": [{"id": "List___filterTR", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.filterRevM": [{"id": "List___filterRevM", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.filterMapTR": [{"id": "List___filterMapTR", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.filterMapM": [{"id": "List___filterMapM", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.filterMap": [{"id": "List___filterMap", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.filterM": [{"id": "List___filterM", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.filter": [{"id": "List___filter", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.extract": [{"id": "List___extract", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.eraseTR": [{"id": "List___eraseTR", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.eraseReps": [{"id": "List___eraseReps", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.erasePTR": [{"id": "List___erasePTR", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.eraseP": [{"id": "List___eraseP", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.eraseIdxTR": [{"id": "List___eraseIdxTR", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.eraseIdx": [{"id": "List___eraseIdx", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.eraseDups": [{"id": "List___eraseDups", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.erase": [{"id": "List___erase", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.elem": [{"id": "List___elem", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.dropWhile": [{"id": "List___dropWhile", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.dropLastTR": [{"id": "List___dropLastTR", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.dropLast": [{"id": "List___dropLast", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.drop": [{"id": "List___drop", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.countP": [{"id": "List___countP", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.count": [{"id": "List___count", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.contains": [{"id": "List___contains", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.cons": [{"id": "List___nil", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.concat": [{"id": "List___concat", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.beq": [{"id": "List___beq", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.attachWith": [{"id": "List___attachWith", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.attach": [{"id": "List___attach", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.appendTR": [{"id": "List___appendTR", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.append": [{"id": "List___append", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.anyM": [{"id": "List___anyM", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.any": [{"id": "List___any", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.and": [{"id": "List___and", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.allM": [{"id": "List___allM", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.all": [{"id": "List___all", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.Sublist.slnil": [{"id": "List___Sublist___slnil", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.Sublist.cons₂": [{"id": "List___Sublist___slnil", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.Sublist.cons": [{"id": "List___Sublist___slnil", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.Sublist": [{"id": "List___Sublist___slnil", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.Perm.trans": [{"id": "List___Perm___nil", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.Perm.swap": [{"id": "List___Perm___nil", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.Perm.nil": [{"id": "List___Perm___nil", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.Perm.cons": [{"id": "List___Perm___nil", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.Perm": [{"id": "List___Perm___nil", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.Pairwise.nil": [{"id": "List___Pairwise___nil", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.Pairwise.cons": [{"id": "List___Pairwise___nil", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.Pairwise": [{"id": "List___Pairwise___nil", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.Nodup": [{"id": "List___Nodup", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.Mem.tail": [{"id": "List___Mem___head", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.Mem.head": [{"id": "List___Mem___head", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.Mem": [{"id": "List___Mem___head", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.Lex.rel": [{"id": "List___Lex___nil", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.Lex.nil": [{"id": "List___Lex___nil", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.Lex.cons": [{"id": "List___Lex___nil", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.Lex": [{"id": "List___Lex___nil", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.IsSuffix": [{"id": "List___IsSuffix", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.IsPrefix": [{"id": "List___IsPrefix", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.IsInfix": [{"id": "List___IsInfix", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "List.Cursor.tail": [{"id": "List___Cursor___tail", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "List.Cursor.suffix": [{"id": "List___Cursor___mk", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "List.Cursor.property": [{"id": "List___Cursor___mk", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "List.Cursor.prefix": [{"id": "List___Cursor___mk", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "List.Cursor.pos": [{"id": "List___Cursor___pos", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "List.Cursor.mk": [{"id": "List___Cursor___mk", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "List.Cursor.end": [{"id": "List___Cursor___end", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "List.Cursor.current": [{"id": "List___Cursor___current", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "List.Cursor.begin": [{"id": "List___Cursor___begin", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "List.Cursor.at": [{"id": "List___Cursor___at", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "List.Cursor": [{"id": "List___Cursor___mk", "data": null, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "List": [{"id": "List___nil", "data": null, "address": "/Basic-Types/Linked-Lists/"}], "Lean.strLitKind": [{"id": "Lean___strLitKind", "data": null, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "Lean.scientificLitKind": [{"id": "Lean___scientificLitKind", "data": null, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "Lean.numLitKind": [{"id": "Lean___numLitKind", "data": null, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "Lean.nullKind": [{"id": "Lean___nullKind", "data": null, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "Lean.nameLitKind": [{"id": "Lean___nameLitKind", "data": null, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "Lean.interpolatedStrLitKind": [{"id": "Lean___interpolatedStrLitKind", "data": null, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "Lean.interpolatedStrKind": [{"id": "Lean___interpolatedStrKind", "data": null, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "Lean.identKind": [{"id": "Lean___identKind", "data": null, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "Lean.hygieneInfoKind": [{"id": "Lean___hygieneInfoKind", "data": null, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "Lean.groupKind": [{"id": "Lean___groupKind", "data": null, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "Lean.fieldIdxKind": [{"id": "Lean___fieldIdxKind", "data": null, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "Lean.choiceKind": [{"id": "Lean___choiceKind", "data": null, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "Lean.charLitKind": [{"id": "Lean___charLitKind", "data": null, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "Lean.TSyntaxArray": [{"id": "Lean___TSyntaxArray", "data": null, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "Lean.TSyntax.raw": [{"id": "Lean___TSyntax___mk", "data": null, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "Lean.TSyntax.mk": [{"id": "Lean___TSyntax___mk", "data": null, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "Lean.TSyntax.getString": [{"id": "Lean___TSyntax___getString", "data": null, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "Lean.TSyntax.getScientific": [{"id": "Lean___TSyntax___getScientific", "data": null, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "Lean.TSyntax.getNat": [{"id": "Lean___TSyntax___getNat", "data": null, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "Lean.TSyntax.getName": [{"id": "Lean___TSyntax___getName", "data": null, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "Lean.TSyntax.getId": [{"id": "Lean___TSyntax___getId", "data": null, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "Lean.TSyntax.getHygieneInfo": [{"id": "Lean___TSyntax___getHygieneInfo", "data": null, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "Lean.TSyntax.getChar": [{"id": "Lean___TSyntax___getChar", "data": null, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "Lean.TSyntax": [{"id": "Lean___TSyntax___mk", "data": null, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "Lean.SyntaxNodeKinds": [{"id": "Lean___SyntaxNodeKinds", "data": null, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "Lean.SyntaxNodeKind": [{"id": "Lean___SyntaxNodeKind", "data": null, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "Lean.Syntax.setKind": [{"id": "Lean___Syntax___setKind", "data": null, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "Lean.Syntax.node": [{"id": "Lean___Syntax___missing", "data": null, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "Lean.Syntax.missing": [{"id": "Lean___Syntax___missing", "data": null, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "Lean.Syntax.isOfKind": [{"id": "Lean___Syntax___isOfKind", "data": null, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "Lean.Syntax.ident": [{"id": "Lean___Syntax___missing", "data": null, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "Lean.Syntax.getKind": [{"id": "Lean___Syntax___getKind", "data": null, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "Lean.Syntax.atom": [{"id": "Lean___Syntax___missing", "data": null, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "Lean.Syntax.Term": [{"id": "Lean___Syntax___Term", "data": null, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "Lean.Syntax.Tactic": [{"id": "Lean___Syntax___Tactic", "data": null, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "Lean.Syntax.TSepArray.mk": [{"id": "Lean___Syntax___TSepArray___mk", "data": null, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "Lean.Syntax.TSepArray.elemsAndSeps": [{"id": "Lean___Syntax___TSepArray___mk", "data": null, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "Lean.Syntax.TSepArray": [{"id": "Lean___Syntax___TSepArray___mk", "data": null, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "Lean.Syntax.StrLit": [{"id": "Lean___Syntax___StrLit", "data": null, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "Lean.Syntax.ScientificLit": [{"id": "Lean___Syntax___ScientificLit", "data": null, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "Lean.Syntax.Prio": [{"id": "Lean___Syntax___Prio", "data": null, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "Lean.Syntax.Preresolved.namespace": [{"id": "Lean___Syntax___Preresolved___namespace", "data": null, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "Lean.Syntax.Preresolved.decl": [{"id": "Lean___Syntax___Preresolved___namespace", "data": null, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "Lean.Syntax.Preresolved": [{"id": "Lean___Syntax___Preresolved___namespace", "data": null, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "Lean.Syntax.Prec": [{"id": "Lean___Syntax___Prec", "data": null, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "Lean.Syntax.NumLit": [{"id": "Lean___Syntax___NumLit", "data": null, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "Lean.Syntax.NameLit": [{"id": "Lean___Syntax___NameLit", "data": null, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "Lean.Syntax.Level": [{"id": "Lean___Syntax___Level", "data": null, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "Lean.Syntax.Ident": [{"id": "Lean___Syntax___Ident", "data": null, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "Lean.Syntax.HygieneInfo": [{"id": "Lean___Syntax___HygieneInfo", "data": null, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "Lean.Syntax.Command": [{"id": "Lean___Syntax___Command", "data": null, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "Lean.Syntax.CharLit": [{"id": "Lean___Syntax___CharLit", "data": null, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "Lean.Syntax": [{"id": "Lean___Syntax___missing", "data": null, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "Lean.SourceInfo.synthetic": [{"id": "Lean___SourceInfo___original", "data": null, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "Lean.SourceInfo.original": [{"id": "Lean___SourceInfo___original", "data": null, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "Lean.SourceInfo.none": [{"id": "Lean___SourceInfo___original", "data": null, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "Lean.SourceInfo": [{"id": "Lean___SourceInfo___original", "data": null, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "Lean.PrettyPrinter.Unexpander": [{"id": "Lean___PrettyPrinter___Unexpander", "data": null, "address": "/Notations-and-Macros/Extending-Lean___s-Output/"}], "Lean.PrettyPrinter.UnexpandM": [{"id": "Lean___PrettyPrinter___UnexpandM", "data": null, "address": "/Notations-and-Macros/Extending-Lean___s-Output/"}], "Lean.Parser.LeadingIdentBehavior.symbol": [{"id": "Lean___Parser___LeadingIdentBehavior___default", "data": null, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "Lean.Parser.LeadingIdentBehavior.default": [{"id": "Lean___Parser___LeadingIdentBehavior___default", "data": null, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "Lean.Parser.LeadingIdentBehavior.both": [{"id": "Lean___Parser___LeadingIdentBehavior___default", "data": null, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "Lean.Parser.LeadingIdentBehavior": [{"id": "Lean___Parser___LeadingIdentBehavior___default", "data": null, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "Lean.Order.monotone": [{"id": "Lean___Order___monotone", "data": null, "address": "/Definitions/Recursive-Definitions/"}], "Lean.Order.fix_eq": [{"id": "Lean___Order___fix_eq", "data": null, "address": "/Definitions/Recursive-Definitions/"}], "Lean.Order.fix": [{"id": "Lean___Order___fix", "data": null, "address": "/Definitions/Recursive-Definitions/"}], "Lean.Order.PartialOrder.rel_trans": [{"id": "Lean___Order___PartialOrder___mk", "data": null, "address": "/Definitions/Recursive-Definitions/"}], "Lean.Order.PartialOrder.rel_refl": [{"id": "Lean___Order___PartialOrder___mk", "data": null, "address": "/Definitions/Recursive-Definitions/"}], "Lean.Order.PartialOrder.rel_antisymm": [{"id": "Lean___Order___PartialOrder___mk", "data": null, "address": "/Definitions/Recursive-Definitions/"}], "Lean.Order.PartialOrder.rel": [{"id": "Lean___Order___PartialOrder___mk", "data": null, "address": "/Definitions/Recursive-Definitions/"}], "Lean.Order.PartialOrder.mk": [{"id": "Lean___Order___PartialOrder___mk", "data": null, "address": "/Definitions/Recursive-Definitions/"}], "Lean.Order.PartialOrder": [{"id": "Lean___Order___PartialOrder___mk", "data": null, "address": "/Definitions/Recursive-Definitions/"}], "Lean.Order.CCPO.toPartialOrder": [{"id": "Lean___Order___CCPO___mk", "data": null, "address": "/Definitions/Recursive-Definitions/"}], "Lean.Order.CCPO.mk": [{"id": "Lean___Order___CCPO___mk", "data": null, "address": "/Definitions/Recursive-Definitions/"}], "Lean.Order.CCPO": [{"id": "Lean___Order___CCPO___mk", "data": null, "address": "/Definitions/Recursive-Definitions/"}], "Lean.Meta.registerSimpAttr": [{"id": "Lean___Meta___registerSimpAttr", "data": null, "address": "/The-Simplifier/Simp-sets/"}], "Lean.Meta.TransparencyMode.reducible": [{"id": "Lean___Meta___TransparencyMode___all", "data": null, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Meta.TransparencyMode.instances": [{"id": "Lean___Meta___TransparencyMode___all", "data": null, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Meta.TransparencyMode.default": [{"id": "Lean___Meta___TransparencyMode___all", "data": null, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Meta.TransparencyMode.all": [{"id": "Lean___Meta___TransparencyMode___all", "data": null, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Meta.TransparencyMode": [{"id": "Lean___Meta___TransparencyMode___all", "data": null, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Meta.SimpExtension": [{"id": "Lean___Meta___SimpExtension", "data": null, "address": "/The-Simplifier/Simp-sets/"}], "Lean.Meta.Simp.neutralConfig": [{"id": "Lean___Meta___Simp___neutralConfig", "data": null, "address": "/The-Simplifier/Configuring-Simplification/"}], "Lean.Meta.Simp.Config.zetaUnused": [{"id": "Lean___Meta___Simp___Config___mk", "data": null, "address": "/The-Simplifier/Configuring-Simplification/"}], "Lean.Meta.Simp.Config.zetaHave": [{"id": "Lean___Meta___Simp___Config___mk", "data": null, "address": "/The-Simplifier/Configuring-Simplification/"}], "Lean.Meta.Simp.Config.zetaDelta": [{"id": "Lean___Meta___Simp___Config___mk", "data": null, "address": "/The-Simplifier/Configuring-Simplification/"}], "Lean.Meta.Simp.Config.zeta": [{"id": "Lean___Meta___Simp___Config___mk", "data": null, "address": "/The-Simplifier/Configuring-Simplification/"}], "Lean.Meta.Simp.Config.warnExponents": [{"id": "Lean___Meta___Simp___Config___mk", "data": null, "address": "/The-Simplifier/Configuring-Simplification/"}], "Lean.Meta.Simp.Config.unfoldPartialApp": [{"id": "Lean___Meta___Simp___Config___mk", "data": null, "address": "/The-Simplifier/Configuring-Simplification/"}], "Lean.Meta.Simp.Config.suggestions": [{"id": "Lean___Meta___Simp___Config___mk", "data": null, "address": "/The-Simplifier/Configuring-Simplification/"}], "Lean.Meta.Simp.Config.singlePass": [{"id": "Lean___Meta___Simp___Config___mk", "data": null, "address": "/The-Simplifier/Configuring-Simplification/"}], "Lean.Meta.Simp.Config.proj": [{"id": "Lean___Meta___Simp___Config___mk", "data": null, "address": "/The-Simplifier/Configuring-Simplification/"}], "Lean.Meta.Simp.Config.mk": [{"id": "Lean___Meta___Simp___Config___mk", "data": null, "address": "/The-Simplifier/Configuring-Simplification/"}], "Lean.Meta.Simp.Config.memoize": [{"id": "Lean___Meta___Simp___Config___mk", "data": null, "address": "/The-Simplifier/Configuring-Simplification/"}], "Lean.Meta.Simp.Config.maxSteps": [{"id": "Lean___Meta___Simp___Config___mk", "data": null, "address": "/The-Simplifier/Configuring-Simplification/"}], "Lean.Meta.Simp.Config.maxDischargeDepth": [{"id": "Lean___Meta___Simp___Config___mk", "data": null, "address": "/The-Simplifier/Configuring-Simplification/"}], "Lean.Meta.Simp.Config.letToHave": [{"id": "Lean___Meta___Simp___Config___mk", "data": null, "address": "/The-Simplifier/Configuring-Simplification/"}], "Lean.Meta.Simp.Config.iota": [{"id": "Lean___Meta___Simp___Config___mk", "data": null, "address": "/The-Simplifier/Configuring-Simplification/"}], "Lean.Meta.Simp.Config.index": [{"id": "Lean___Meta___Simp___Config___mk", "data": null, "address": "/The-Simplifier/Configuring-Simplification/"}], "Lean.Meta.Simp.Config.implicitDefEqProofs": [{"id": "Lean___Meta___Simp___Config___mk", "data": null, "address": "/The-Simplifier/Configuring-Simplification/"}], "Lean.Meta.Simp.Config.ground": [{"id": "Lean___Meta___Simp___Config___mk", "data": null, "address": "/The-Simplifier/Configuring-Simplification/"}], "Lean.Meta.Simp.Config.failIfUnchanged": [{"id": "Lean___Meta___Simp___Config___mk", "data": null, "address": "/The-Simplifier/Configuring-Simplification/"}], "Lean.Meta.Simp.Config.etaStruct": [{"id": "Lean___Meta___Simp___Config___mk", "data": null, "address": "/The-Simplifier/Configuring-Simplification/"}], "Lean.Meta.Simp.Config.eta": [{"id": "Lean___Meta___Simp___Config___mk", "data": null, "address": "/The-Simplifier/Configuring-Simplification/"}], "Lean.Meta.Simp.Config.dsimp": [{"id": "Lean___Meta___Simp___Config___mk", "data": null, "address": "/The-Simplifier/Configuring-Simplification/"}], "Lean.Meta.Simp.Config.decide": [{"id": "Lean___Meta___Simp___Config___mk", "data": null, "address": "/The-Simplifier/Configuring-Simplification/"}], "Lean.Meta.Simp.Config.contextual": [{"id": "Lean___Meta___Simp___Config___mk", "data": null, "address": "/The-Simplifier/Configuring-Simplification/"}], "Lean.Meta.Simp.Config.congrConsts": [{"id": "Lean___Meta___Simp___Config___mk", "data": null, "address": "/The-Simplifier/Configuring-Simplification/"}], "Lean.Meta.Simp.Config.catchRuntime": [{"id": "Lean___Meta___Simp___Config___mk", "data": null, "address": "/The-Simplifier/Configuring-Simplification/"}], "Lean.Meta.Simp.Config.bitVecOfNat": [{"id": "Lean___Meta___Simp___Config___mk", "data": null, "address": "/The-Simplifier/Configuring-Simplification/"}], "Lean.Meta.Simp.Config.beta": [{"id": "Lean___Meta___Simp___Config___mk", "data": null, "address": "/The-Simplifier/Configuring-Simplification/"}], "Lean.Meta.Simp.Config.autoUnfold": [{"id": "Lean___Meta___Simp___Config___mk", "data": null, "address": "/The-Simplifier/Configuring-Simplification/"}], "Lean.Meta.Simp.Config.arith": [{"id": "Lean___Meta___Simp___Config___mk", "data": null, "address": "/The-Simplifier/Configuring-Simplification/"}], "Lean.Meta.Simp.Config": [{"id": "Lean___Meta___Simp___Config___mk", "data": null, "address": "/The-Simplifier/Configuring-Simplification/"}], "Lean.Meta.Rewrite.NewGoals": [{"id": "Lean___Meta___Rewrite___NewGoals", "data": null, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Meta.Rewrite.Config.transparency": [{"id": "Lean___Meta___Rewrite___Config___mk", "data": null, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Meta.Rewrite.Config.offsetCnstrs": [{"id": "Lean___Meta___Rewrite___Config___mk", "data": null, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Meta.Rewrite.Config.occs": [{"id": "Lean___Meta___Rewrite___Config___mk", "data": null, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Meta.Rewrite.Config.newGoals": [{"id": "Lean___Meta___Rewrite___Config___mk", "data": null, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Meta.Rewrite.Config.mk": [{"id": "Lean___Meta___Rewrite___Config___mk", "data": null, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Meta.Rewrite.Config": [{"id": "Lean___Meta___Rewrite___Config___mk", "data": null, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Meta.Occurrences.pos": [{"id": "Lean___Meta___Occurrences___all", "data": null, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Meta.Occurrences.neg": [{"id": "Lean___Meta___Occurrences___all", "data": null, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Meta.Occurrences.all": [{"id": "Lean___Meta___Occurrences___all", "data": null, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Meta.Occurrences": [{"id": "Lean___Meta___Occurrences___all", "data": null, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Meta.DSimp.Config.zetaUnused": [{"id": "Lean___Meta___DSimp___Config___mk", "data": null, "address": "/The-Simplifier/Configuring-Simplification/"}], "Lean.Meta.DSimp.Config.zetaHave": [{"id": "Lean___Meta___DSimp___Config___mk", "data": null, "address": "/The-Simplifier/Configuring-Simplification/"}], "Lean.Meta.DSimp.Config.zetaDelta": [{"id": "Lean___Meta___DSimp___Config___mk", "data": null, "address": "/The-Simplifier/Configuring-Simplification/"}], "Lean.Meta.DSimp.Config.zeta": [{"id": "Lean___Meta___DSimp___Config___mk", "data": null, "address": "/The-Simplifier/Configuring-Simplification/"}], "Lean.Meta.DSimp.Config.unfoldPartialApp": [{"id": "Lean___Meta___DSimp___Config___mk", "data": null, "address": "/The-Simplifier/Configuring-Simplification/"}], "Lean.Meta.DSimp.Config.proj": [{"id": "Lean___Meta___DSimp___Config___mk", "data": null, "address": "/The-Simplifier/Configuring-Simplification/"}], "Lean.Meta.DSimp.Config.mk": [{"id": "Lean___Meta___DSimp___Config___mk", "data": null, "address": "/The-Simplifier/Configuring-Simplification/"}], "Lean.Meta.DSimp.Config.iota": [{"id": "Lean___Meta___DSimp___Config___mk", "data": null, "address": "/The-Simplifier/Configuring-Simplification/"}], "Lean.Meta.DSimp.Config.index": [{"id": "Lean___Meta___DSimp___Config___mk", "data": null, "address": "/The-Simplifier/Configuring-Simplification/"}], "Lean.Meta.DSimp.Config.failIfUnchanged": [{"id": "Lean___Meta___DSimp___Config___mk", "data": null, "address": "/The-Simplifier/Configuring-Simplification/"}], "Lean.Meta.DSimp.Config.etaStruct": [{"id": "Lean___Meta___DSimp___Config___mk", "data": null, "address": "/The-Simplifier/Configuring-Simplification/"}], "Lean.Meta.DSimp.Config.eta": [{"id": "Lean___Meta___DSimp___Config___mk", "data": null, "address": "/The-Simplifier/Configuring-Simplification/"}], "Lean.Meta.DSimp.Config.decide": [{"id": "Lean___Meta___DSimp___Config___mk", "data": null, "address": "/The-Simplifier/Configuring-Simplification/"}], "Lean.Meta.DSimp.Config.beta": [{"id": "Lean___Meta___DSimp___Config___mk", "data": null, "address": "/The-Simplifier/Configuring-Simplification/"}], "Lean.Meta.DSimp.Config.autoUnfold": [{"id": "Lean___Meta___DSimp___Config___mk", "data": null, "address": "/The-Simplifier/Configuring-Simplification/"}], "Lean.Meta.DSimp.Config": [{"id": "Lean___Meta___DSimp___Config___mk", "data": null, "address": "/The-Simplifier/Configuring-Simplification/"}], "Lean.MacroM": [{"id": "Lean___MacroM", "data": null, "address": "/Notations-and-Macros/Macros/"}], "Lean.Macro.withFreshMacroScope": [{"id": "Lean___Macro___withFreshMacroScope", "data": null, "address": "/Notations-and-Macros/Macros/"}], "Lean.Macro.trace": [{"id": "Lean___Macro___trace", "data": null, "address": "/Notations-and-Macros/Macros/"}], "Lean.Macro.throwUnsupported": [{"id": "Lean___Macro___throwUnsupported", "data": null, "address": "/Notations-and-Macros/Macros/"}], "Lean.Macro.throwErrorAt": [{"id": "Lean___Macro___throwErrorAt", "data": null, "address": "/Notations-and-Macros/Macros/"}], "Lean.Macro.throwError": [{"id": "Lean___Macro___throwError", "data": null, "address": "/Notations-and-Macros/Macros/"}], "Lean.Macro.resolveNamespace": [{"id": "Lean___Macro___resolveNamespace", "data": null, "address": "/Notations-and-Macros/Macros/"}], "Lean.Macro.resolveGlobalName": [{"id": "Lean___Macro___resolveGlobalName", "data": null, "address": "/Notations-and-Macros/Macros/"}], "Lean.Macro.hasDecl": [{"id": "Lean___Macro___hasDecl", "data": null, "address": "/Notations-and-Macros/Macros/"}], "Lean.Macro.getCurrNamespace": [{"id": "Lean___Macro___getCurrNamespace", "data": null, "address": "/Notations-and-Macros/Macros/"}], "Lean.Macro.expandMacro?": [{"id": "Lean___Macro___expandMacro___", "data": null, "address": "/Notations-and-Macros/Macros/"}], "Lean.Macro.addMacroScope": [{"id": "Lean___Macro___addMacroScope", "data": null, "address": "/Notations-and-Macros/Macros/"}], "Lean.Macro.Exception.unsupportedSyntax": [{"id": "Lean___Macro___Exception___unsupportedSyntax", "data": null, "address": "/Notations-and-Macros/Macros/"}], "Lean.LeanOption.value": [{"id": "Lean___LeanOption___mk", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lean.LeanOption.name": [{"id": "Lean___LeanOption___mk", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lean.LeanOption.mk": [{"id": "Lean___LeanOption___mk", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lean.LeanOption": [{"id": "Lean___LeanOption___mk", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lean.Grind.ToInt.toInt_mem": [{"id": "Lean___Grind___ToInt___mk", "data": null, "address": "/The--grind--tactic/Linear-Integer-Arithmetic/"}], "Lean.Grind.ToInt.toInt_inj": [{"id": "Lean___Grind___ToInt___mk", "data": null, "address": "/The--grind--tactic/Linear-Integer-Arithmetic/"}], "Lean.Grind.ToInt.toInt": [{"id": "Lean___Grind___ToInt___mk", "data": null, "address": "/The--grind--tactic/Linear-Integer-Arithmetic/"}], "Lean.Grind.ToInt.mk": [{"id": "Lean___Grind___ToInt___mk", "data": null, "address": "/The--grind--tactic/Linear-Integer-Arithmetic/"}], "Lean.Grind.ToInt": [{"id": "Lean___Grind___ToInt___mk", "data": null, "address": "/The--grind--tactic/Linear-Integer-Arithmetic/"}], "Lean.Grind.Semiring.zero_mul": [{"id": "Lean___Grind___Semiring___mk", "data": null, "address": "/The--grind--tactic/Algebraic-Solver-_LPAR_Commutative-Rings___-Fields_RPAR_/"}], "Lean.Grind.Semiring.toMul": [{"id": "Lean___Grind___Semiring___mk", "data": null, "address": "/The--grind--tactic/Algebraic-Solver-_LPAR_Commutative-Rings___-Fields_RPAR_/"}], "Lean.Grind.Semiring.toAdd": [{"id": "Lean___Grind___Semiring___mk", "data": null, "address": "/The--grind--tactic/Algebraic-Solver-_LPAR_Commutative-Rings___-Fields_RPAR_/"}], "Lean.Grind.Semiring.right_distrib": [{"id": "Lean___Grind___Semiring___mk", "data": null, "address": "/The--grind--tactic/Algebraic-Solver-_LPAR_Commutative-Rings___-Fields_RPAR_/"}], "Lean.Grind.Semiring.pow_zero": [{"id": "Lean___Grind___Semiring___mk", "data": null, "address": "/The--grind--tactic/Algebraic-Solver-_LPAR_Commutative-Rings___-Fields_RPAR_/"}], "Lean.Grind.Semiring.pow_succ": [{"id": "Lean___Grind___Semiring___mk", "data": null, "address": "/The--grind--tactic/Algebraic-Solver-_LPAR_Commutative-Rings___-Fields_RPAR_/"}], "Lean.Grind.Semiring.one_mul": [{"id": "Lean___Grind___Semiring___mk", "data": null, "address": "/The--grind--tactic/Algebraic-Solver-_LPAR_Commutative-Rings___-Fields_RPAR_/"}], "Lean.Grind.Semiring.ofNat_succ": [{"id": "Lean___Grind___Semiring___mk", "data": null, "address": "/The--grind--tactic/Algebraic-Solver-_LPAR_Commutative-Rings___-Fields_RPAR_/"}], "Lean.Grind.Semiring.ofNat": [{"id": "Lean___Grind___Semiring___mk", "data": null, "address": "/The--grind--tactic/Algebraic-Solver-_LPAR_Commutative-Rings___-Fields_RPAR_/"}], "Lean.Grind.Semiring.nsmul": [{"id": "Lean___Grind___Semiring___mk", "data": null, "address": "/The--grind--tactic/Algebraic-Solver-_LPAR_Commutative-Rings___-Fields_RPAR_/"}], "Lean.Grind.Semiring.npow": [{"id": "Lean___Grind___Semiring___mk", "data": null, "address": "/The--grind--tactic/Algebraic-Solver-_LPAR_Commutative-Rings___-Fields_RPAR_/"}], "Lean.Grind.Semiring.natCast": [{"id": "Lean___Grind___Semiring___mk", "data": null, "address": "/The--grind--tactic/Algebraic-Solver-_LPAR_Commutative-Rings___-Fields_RPAR_/"}], "Lean.Grind.Semiring.mul_zero": [{"id": "Lean___Grind___Semiring___mk", "data": null, "address": "/The--grind--tactic/Algebraic-Solver-_LPAR_Commutative-Rings___-Fields_RPAR_/"}], "Lean.Grind.Semiring.mul_one": [{"id": "Lean___Grind___Semiring___mk", "data": null, "address": "/The--grind--tactic/Algebraic-Solver-_LPAR_Commutative-Rings___-Fields_RPAR_/"}], "Lean.Grind.Semiring.mul_assoc": [{"id": "Lean___Grind___Semiring___mk", "data": null, "address": "/The--grind--tactic/Algebraic-Solver-_LPAR_Commutative-Rings___-Fields_RPAR_/"}], "Lean.Grind.Semiring.mk": [{"id": "Lean___Grind___Semiring___mk", "data": null, "address": "/The--grind--tactic/Algebraic-Solver-_LPAR_Commutative-Rings___-Fields_RPAR_/"}], "Lean.Grind.Semiring.left_distrib": [{"id": "Lean___Grind___Semiring___mk", "data": null, "address": "/The--grind--tactic/Algebraic-Solver-_LPAR_Commutative-Rings___-Fields_RPAR_/"}], "Lean.Grind.Semiring.add_zero": [{"id": "Lean___Grind___Semiring___mk", "data": null, "address": "/The--grind--tactic/Algebraic-Solver-_LPAR_Commutative-Rings___-Fields_RPAR_/"}], "Lean.Grind.Semiring.add_comm": [{"id": "Lean___Grind___Semiring___mk", "data": null, "address": "/The--grind--tactic/Algebraic-Solver-_LPAR_Commutative-Rings___-Fields_RPAR_/"}], "Lean.Grind.Semiring.add_assoc": [{"id": "Lean___Grind___Semiring___mk", "data": null, "address": "/The--grind--tactic/Algebraic-Solver-_LPAR_Commutative-Rings___-Fields_RPAR_/"}], "Lean.Grind.Semiring": [{"id": "Lean___Grind___Semiring___mk", "data": null, "address": "/The--grind--tactic/Algebraic-Solver-_LPAR_Commutative-Rings___-Fields_RPAR_/"}], "Lean.Grind.Ring.toSemiring": [{"id": "Lean___Grind___Ring___mk", "data": null, "address": "/The--grind--tactic/Algebraic-Solver-_LPAR_Commutative-Rings___-Fields_RPAR_/"}], "Lean.Grind.Ring.mk": [{"id": "Lean___Grind___Ring___mk", "data": null, "address": "/The--grind--tactic/Algebraic-Solver-_LPAR_Commutative-Rings___-Fields_RPAR_/"}], "Lean.Grind.Ring": [{"id": "Lean___Grind___Ring___mk", "data": null, "address": "/The--grind--tactic/Algebraic-Solver-_LPAR_Commutative-Rings___-Fields_RPAR_/"}], "Lean.Grind.OrderedRing.zero_lt_one": [{"id": "Lean___Grind___OrderedRing___mk", "data": null, "address": "/The--grind--tactic/Linear-Arithmetic-Solver/"}], "Lean.Grind.OrderedRing.toOrderedAdd": [{"id": "Lean___Grind___OrderedRing___mk", "data": null, "address": "/The--grind--tactic/Linear-Arithmetic-Solver/"}], "Lean.Grind.OrderedRing.mul_lt_mul_of_pos_left": [{"id": "Lean___Grind___OrderedRing___mk", "data": null, "address": "/The--grind--tactic/Linear-Arithmetic-Solver/"}], "Lean.Grind.OrderedRing.mk": [{"id": "Lean___Grind___OrderedRing___mk", "data": null, "address": "/The--grind--tactic/Linear-Arithmetic-Solver/"}], "Lean.Grind.OrderedRing": [{"id": "Lean___Grind___OrderedRing___mk", "data": null, "address": "/The--grind--tactic/Linear-Arithmetic-Solver/"}], "Lean.Grind.OrderedAdd.mk": [{"id": "Lean___Grind___OrderedAdd___mk", "data": null, "address": "/The--grind--tactic/Linear-Arithmetic-Solver/"}], "Lean.Grind.OrderedAdd.add_le_left_iff": [{"id": "Lean___Grind___OrderedAdd___mk", "data": null, "address": "/The--grind--tactic/Linear-Arithmetic-Solver/"}], "Lean.Grind.OrderedAdd": [{"id": "Lean___Grind___OrderedAdd___mk", "data": null, "address": "/The--grind--tactic/Linear-Arithmetic-Solver/"}], "Lean.Grind.NoNatZeroDivisors.no_nat_zero_divisors": [{"id": "Lean___Grind___NoNatZeroDivisors___mk", "data": null, "address": "/The--grind--tactic/Algebraic-Solver-_LPAR_Commutative-Rings___-Fields_RPAR_/"}], "Lean.Grind.NoNatZeroDivisors.mk'": [{"id": "Lean___Grind___NoNatZeroDivisors___mk___", "data": null, "address": "/The--grind--tactic/Algebraic-Solver-_LPAR_Commutative-Rings___-Fields_RPAR_/"}], "Lean.Grind.NoNatZeroDivisors.mk": [{"id": "Lean___Grind___NoNatZeroDivisors___mk", "data": null, "address": "/The--grind--tactic/Algebraic-Solver-_LPAR_Commutative-Rings___-Fields_RPAR_/"}], "Lean.Grind.NoNatZeroDivisors": [{"id": "Lean___Grind___NoNatZeroDivisors___mk", "data": null, "address": "/The--grind--tactic/Algebraic-Solver-_LPAR_Commutative-Rings___-Fields_RPAR_/"}], "Lean.Grind.NatModule.toAddCommMonoid": [{"id": "Lean___Grind___NatModule___mk", "data": null, "address": "/The--grind--tactic/Linear-Arithmetic-Solver/"}], "Lean.Grind.NatModule.mk": [{"id": "Lean___Grind___NatModule___mk", "data": null, "address": "/The--grind--tactic/Linear-Arithmetic-Solver/"}], "Lean.Grind.NatModule": [{"id": "Lean___Grind___NatModule___mk", "data": null, "address": "/The--grind--tactic/Linear-Arithmetic-Solver/"}], "Lean.Grind.IsCharP.ofNat_ext_iff": [{"id": "Lean___Grind___IsCharP___mk", "data": null, "address": "/The--grind--tactic/Algebraic-Solver-_LPAR_Commutative-Rings___-Fields_RPAR_/"}], "Lean.Grind.IsCharP.mk": [{"id": "Lean___Grind___IsCharP___mk", "data": null, "address": "/The--grind--tactic/Algebraic-Solver-_LPAR_Commutative-Rings___-Fields_RPAR_/"}], "Lean.Grind.IsCharP": [{"id": "Lean___Grind___IsCharP___mk", "data": null, "address": "/The--grind--tactic/Algebraic-Solver-_LPAR_Commutative-Rings___-Fields_RPAR_/"}], "Lean.Grind.IntModule.toAddCommGroup": [{"id": "Lean___Grind___IntModule___mk", "data": null, "address": "/The--grind--tactic/Linear-Arithmetic-Solver/"}], "Lean.Grind.IntModule.mk": [{"id": "Lean___Grind___IntModule___mk", "data": null, "address": "/The--grind--tactic/Linear-Arithmetic-Solver/"}], "Lean.Grind.IntModule": [{"id": "Lean___Grind___IntModule___mk", "data": null, "address": "/The--grind--tactic/Linear-Arithmetic-Solver/"}], "Lean.Grind.IntInterval.io": [{"id": "Lean___Grind___IntInterval___co", "data": null, "address": "/The--grind--tactic/Linear-Integer-Arithmetic/"}], "Lean.Grind.IntInterval.ii": [{"id": "Lean___Grind___IntInterval___co", "data": null, "address": "/The--grind--tactic/Linear-Integer-Arithmetic/"}], "Lean.Grind.IntInterval.co": [{"id": "Lean___Grind___IntInterval___co", "data": null, "address": "/The--grind--tactic/Linear-Integer-Arithmetic/"}], "Lean.Grind.IntInterval.ci": [{"id": "Lean___Grind___IntInterval___co", "data": null, "address": "/The--grind--tactic/Linear-Integer-Arithmetic/"}], "Lean.Grind.IntInterval": [{"id": "Lean___Grind___IntInterval___co", "data": null, "address": "/The--grind--tactic/Linear-Integer-Arithmetic/"}], "Lean.Grind.Field.toCommRing": [{"id": "Lean___Grind___Field___mk", "data": null, "address": "/The--grind--tactic/Algebraic-Solver-_LPAR_Commutative-Rings___-Fields_RPAR_/"}], "Lean.Grind.Field.mk": [{"id": "Lean___Grind___Field___mk", "data": null, "address": "/The--grind--tactic/Algebraic-Solver-_LPAR_Commutative-Rings___-Fields_RPAR_/"}], "Lean.Grind.Field": [{"id": "Lean___Grind___Field___mk", "data": null, "address": "/The--grind--tactic/Algebraic-Solver-_LPAR_Commutative-Rings___-Fields_RPAR_/"}], "Lean.Grind.CommSemiring.toSemiring": [{"id": "Lean___Grind___CommSemiring___mk", "data": null, "address": "/The--grind--tactic/Algebraic-Solver-_LPAR_Commutative-Rings___-Fields_RPAR_/"}], "Lean.Grind.CommSemiring.mk": [{"id": "Lean___Grind___CommSemiring___mk", "data": null, "address": "/The--grind--tactic/Algebraic-Solver-_LPAR_Commutative-Rings___-Fields_RPAR_/"}], "Lean.Grind.CommSemiring": [{"id": "Lean___Grind___CommSemiring___mk", "data": null, "address": "/The--grind--tactic/Algebraic-Solver-_LPAR_Commutative-Rings___-Fields_RPAR_/"}], "Lean.Grind.CommRing.toRing": [{"id": "Lean___Grind___CommRing___mk", "data": null, "address": "/The--grind--tactic/Algebraic-Solver-_LPAR_Commutative-Rings___-Fields_RPAR_/"}], "Lean.Grind.CommRing.mk": [{"id": "Lean___Grind___CommRing___mk", "data": null, "address": "/The--grind--tactic/Algebraic-Solver-_LPAR_Commutative-Rings___-Fields_RPAR_/"}], "Lean.Grind.CommRing": [{"id": "Lean___Grind___CommRing___mk", "data": null, "address": "/The--grind--tactic/Algebraic-Solver-_LPAR_Commutative-Rings___-Fields_RPAR_/"}], "Lean.Grind.AddRightCancel.mk": [{"id": "Lean___Grind___AddRightCancel___mk", "data": null, "address": "/The--grind--tactic/Algebraic-Solver-_LPAR_Commutative-Rings___-Fields_RPAR_/"}], "Lean.Grind.AddRightCancel.add_right_cancel": [{"id": "Lean___Grind___AddRightCancel___mk", "data": null, "address": "/The--grind--tactic/Algebraic-Solver-_LPAR_Commutative-Rings___-Fields_RPAR_/"}], "Lean.Grind.AddRightCancel": [{"id": "Lean___Grind___AddRightCancel___mk", "data": null, "address": "/The--grind--tactic/Algebraic-Solver-_LPAR_Commutative-Rings___-Fields_RPAR_/"}], "Lean.Elab.registerDerivingHandler": [{"id": "Lean___Elab___registerDerivingHandler", "data": null, "address": "/Type-Classes/Deriving-Instances/"}], "LawfulMonad.toLawfulApplicative": [{"id": "LawfulMonad___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/Laws/"}], "LawfulMonad.mk'": [{"id": "LawfulMonad___mk___", "data": null, "address": "/Functors___-Monads-and--do--Notation/Laws/"}], "LawfulMonad.mk": [{"id": "LawfulMonad___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/Laws/"}], "LawfulMonad": [{"id": "LawfulMonad___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/Laws/"}], "LawfulHashable.mk": [{"id": "LawfulHashable___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "LawfulHashable.hash_eq": [{"id": "LawfulHashable___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "LawfulHashable": [{"id": "LawfulHashable___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "LawfulGetElem.mk": [{"id": "LawfulGetElem___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "LawfulGetElem.getElem?_def": [{"id": "LawfulGetElem___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "LawfulGetElem.getElem!_def": [{"id": "LawfulGetElem___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "LawfulGetElem": [{"id": "LawfulGetElem___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "LawfulFunctor.mk": [{"id": "LawfulFunctor___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/Laws/"}], "LawfulFunctor.map_const": [{"id": "LawfulFunctor___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/Laws/"}], "LawfulFunctor.id_map": [{"id": "LawfulFunctor___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/Laws/"}], "LawfulFunctor.comp_map": [{"id": "LawfulFunctor___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/Laws/"}], "LawfulFunctor": [{"id": "LawfulFunctor___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/Laws/"}], "LawfulBEq.toReflBEq": [{"id": "LawfulBEq___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "LawfulBEq.mk": [{"id": "LawfulBEq___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "LawfulBEq": [{"id": "LawfulBEq___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "LawfulApplicative.toLawfulFunctor": [{"id": "LawfulApplicative___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/Laws/"}], "LawfulApplicative.seqRight_eq": [{"id": "LawfulApplicative___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/Laws/"}], "LawfulApplicative.seqLeft_eq": [{"id": "LawfulApplicative___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/Laws/"}], "LawfulApplicative.pure_seq": [{"id": "LawfulApplicative___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/Laws/"}], "LawfulApplicative.mk": [{"id": "LawfulApplicative___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/Laws/"}], "LawfulApplicative": [{"id": "LawfulApplicative___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/Laws/"}], "Lake.getTryCache": [{"id": "Lake___getTryCache", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.getSharedLibPath": [{"id": "Lake___getSharedLibPath", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.getRootPackage": [{"id": "Lake___getRootPackage", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.getPkgUrlMap": [{"id": "Lake___getPkgUrlMap", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.getNoCache": [{"id": "Lake___getNoCache", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.getLeanc": [{"id": "Lake___getLeanc", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.getLeanSystemLibDir": [{"id": "Lake___getLeanSystemLibDir", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.getLeanSysroot": [{"id": "Lake___getLeanSysroot", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.getLeanSrcPath": [{"id": "Lake___getLeanSrcPath", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.getLeanSrcDir": [{"id": "Lake___getLeanSrcDir", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.getLeanSharedLib": [{"id": "Lake___getLeanSharedLib", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.getLeanPath": [{"id": "Lake___getLeanPath", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.getLeanLibDir": [{"id": "Lake___getLeanLibDir", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.getLeanInstall": [{"id": "Lake___getLeanInstall", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.getLeanIncludeDir": [{"id": "Lake___getLeanIncludeDir", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.getLeanCc?": [{"id": "Lake___getLeanCc___", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.getLeanCc": [{"id": "Lake___getLeanCc", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.getLeanAr": [{"id": "Lake___getLeanAr", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.getLean": [{"id": "Lake___getLean", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.getLakeSrcDir": [{"id": "Lake___getLakeSrcDir", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.getLakeLibDir": [{"id": "Lake___getLakeLibDir", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.getLakeInstall": [{"id": "Lake___getLakeInstall", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.getLakeHome": [{"id": "Lake___getLakeHome", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.getLakeEnv": [{"id": "Lake___getLakeEnv", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.getLake": [{"id": "Lake___getLake", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.getEnvSharedLibPath": [{"id": "Lake___getEnvSharedLibPath", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.getEnvLeanSrcPath": [{"id": "Lake___getEnvLeanSrcPath", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.getEnvLeanPath": [{"id": "Lake___getEnvLeanPath", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.getElanToolchain": [{"id": "Lake___getElanToolchain", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.getElanInstall?": [{"id": "Lake___getElanInstall___", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.getElanHome?": [{"id": "Lake___getElanHome___", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.getElan?": [{"id": "Lake___getElan___", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.getAugmentedSharedLibPath": [{"id": "Lake___getAugmentedSharedLibPath", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.getAugmentedLeanSrcPath": [{"id": "Lake___getAugmentedLeanSrcPath", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.getAugmentedLeanPath": [{"id": "Lake___getAugmentedLeanPath", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.getAugmentedEnv": [{"id": "Lake___getAugmentedEnv", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.findPackage?": [{"id": "Lake___findPackage___", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.findModule?": [{"id": "Lake___findModule___", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.findLeanLib?": [{"id": "Lake___findLeanLib___", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.findLeanExe?": [{"id": "Lake___findLeanExe___", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.findExternLib?": [{"id": "Lake___findExternLib___", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.ScriptM": [{"id": "Lake___ScriptM", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}, {"id": "Lake___ScriptM-next", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.MonadWorkspace.mk": [{"id": "Lake___MonadWorkspace___mk", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.MonadWorkspace.getWorkspace": [{"id": "Lake___MonadWorkspace___mk", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.MonadWorkspace": [{"id": "Lake___MonadWorkspace___mk", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.MonadLakeEnv": [{"id": "Lake___MonadLakeEnv", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.LeanLibConfig.toLeanConfig": [{"id": "Lake___LeanLibConfig___mk", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.LeanLibConfig.mk": [{"id": "Lake___LeanLibConfig___mk", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.LeanLibConfig": [{"id": "Lake___LeanLibConfig___mk", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.LeanExeConfig.toLeanConfig": [{"id": "Lake___LeanExeConfig___mk", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.LeanExeConfig.mk": [{"id": "Lake___LeanExeConfig___mk", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.LeanExeConfig": [{"id": "Lake___LeanExeConfig___mk", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.Glob.submodules": [{"id": "Lake___Glob___one", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.Glob.one": [{"id": "Lake___Glob___one", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.Glob.andSubmodules": [{"id": "Lake___Glob___one", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.Glob": [{"id": "Lake___Glob___one", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.BuildType.release": [{"id": "Lake___BuildType___debug", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.BuildType.relWithDebInfo": [{"id": "Lake___BuildType___debug", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.BuildType.minSizeRel": [{"id": "Lake___BuildType___debug", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.BuildType.debug": [{"id": "Lake___BuildType___debug", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.BuildType": [{"id": "Lake___BuildType___debug", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.Backend.llvm": [{"id": "Lake___Backend___c", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.Backend.default": [{"id": "Lake___Backend___c", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.Backend.c": [{"id": "Lake___Backend___c", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.Backend": [{"id": "Lake___Backend___c", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "LT.mk": [{"id": "LT___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "LT.lt": [{"id": "LT___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "LT": [{"id": "LT___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "LE.mk": [{"id": "LE___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "LE.le": [{"id": "LE___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "LE": [{"id": "LE___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "IntCast.mk": [{"id": "IntCast___mk", "data": null, "address": "/Coercions/Coercing-Between-Types/"}], "IntCast.intCast": [{"id": "IntCast___mk", "data": null, "address": "/Coercions/Coercing-Between-Types/"}], "IntCast": [{"id": "IntCast___mk", "data": null, "address": "/Coercions/Coercing-Between-Types/"}], "Int8.xor": [{"id": "Int8___xor", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int8.toUInt8": [{"id": "Int8___ofUInt8", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int8.toNatClampNeg": [{"id": "Int8___toNatClampNeg", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int8.toInt64": [{"id": "Int8___toInt64", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int8.toInt32": [{"id": "Int8___toInt32", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int8.toInt16": [{"id": "Int8___toInt16", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int8.toInt": [{"id": "Int8___toInt", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int8.toISize": [{"id": "Int8___toISize", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int8.toFloat32": [{"id": "Int8___toFloat32", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int8.toFloat": [{"id": "Int8___toFloat", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int8.toBitVec": [{"id": "Int8___toBitVec", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int8.sub": [{"id": "Int8___sub", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int8.size": [{"id": "Int8___size", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int8.shiftRight": [{"id": "Int8___shiftRight", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int8.shiftLeft": [{"id": "Int8___shiftLeft", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int8.ofUInt8": [{"id": "Int8___ofUInt8", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int8.ofNat": [{"id": "Int8___ofNat", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int8.ofIntTruncate": [{"id": "Int8___ofIntTruncate", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int8.ofIntLE": [{"id": "Int8___ofIntLE", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int8.ofInt": [{"id": "Int8___ofInt", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int8.ofBitVec": [{"id": "Int8___ofBitVec", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int8.neg": [{"id": "Int8___neg", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int8.mul": [{"id": "Int8___mul", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int8.mod": [{"id": "Int8___mod", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int8.minValue": [{"id": "Int8___minValue", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int8.maxValue": [{"id": "Int8___maxValue", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int8.lt": [{"id": "Int8___lt", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int8.lor": [{"id": "Int8___lor", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int8.le": [{"id": "Int8___le", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int8.land": [{"id": "Int8___land", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int8.div": [{"id": "Int8___div", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int8.decLt": [{"id": "Int8___decLt", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int8.decLe": [{"id": "Int8___decLe", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int8.decEq": [{"id": "Int8___decEq", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int8.complement": [{"id": "Int8___complement", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int8.add": [{"id": "Int8___add", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int8.abs": [{"id": "Int8___abs", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int8": [{"id": "Int8___ofUInt8", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int64.xor": [{"id": "Int64___xor", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int64.toUInt64": [{"id": "Int64___ofUInt64", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int64.toNatClampNeg": [{"id": "Int64___toNatClampNeg", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int64.toInt8": [{"id": "Int64___toInt8", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int64.toInt32": [{"id": "Int64___toInt32", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int64.toInt16": [{"id": "Int64___toInt16", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int64.toInt": [{"id": "Int64___toInt", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int64.toISize": [{"id": "Int64___toISize", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int64.toFloat32": [{"id": "Int64___toFloat32", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int64.toFloat": [{"id": "Int64___toFloat", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int64.toBitVec": [{"id": "Int64___toBitVec", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int64.sub": [{"id": "Int64___sub", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int64.size": [{"id": "Int64___size", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int64.shiftRight": [{"id": "Int64___shiftRight", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int64.shiftLeft": [{"id": "Int64___shiftLeft", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int64.ofUInt64": [{"id": "Int64___ofUInt64", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int64.ofNat": [{"id": "Int64___ofNat", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int64.ofIntTruncate": [{"id": "Int64___ofIntTruncate", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int64.ofIntLE": [{"id": "Int64___ofIntLE", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int64.ofInt": [{"id": "Int64___ofInt", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int64.ofBitVec": [{"id": "Int64___ofBitVec", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int64.neg": [{"id": "Int64___neg", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int64.mul": [{"id": "Int64___mul", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int64.mod": [{"id": "Int64___mod", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int64.minValue": [{"id": "Int64___minValue", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int64.maxValue": [{"id": "Int64___maxValue", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int64.lt": [{"id": "Int64___lt", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int64.lor": [{"id": "Int64___lor", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int64.le": [{"id": "Int64___le", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int64.land": [{"id": "Int64___land", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int64.div": [{"id": "Int64___div", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int64.decLt": [{"id": "Int64___decLt", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int64.decLe": [{"id": "Int64___decLe", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int64.decEq": [{"id": "Int64___decEq", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int64.complement": [{"id": "Int64___complement", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int64.add": [{"id": "Int64___add", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int64.abs": [{"id": "Int64___abs", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int64": [{"id": "Int64___ofUInt64", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int32.xor": [{"id": "Int32___xor", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int32.toUInt32": [{"id": "Int32___ofUInt32", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int32.toNatClampNeg": [{"id": "Int32___toNatClampNeg", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int32.toInt8": [{"id": "Int32___toInt8", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int32.toInt64": [{"id": "Int32___toInt64", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int32.toInt16": [{"id": "Int32___toInt16", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int32.toInt": [{"id": "Int32___toInt", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int32.toISize": [{"id": "Int32___toISize", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int32.toFloat32": [{"id": "Int32___toFloat32", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int32.toFloat": [{"id": "Int32___toFloat", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int32.toBitVec": [{"id": "Int32___toBitVec", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int32.sub": [{"id": "Int32___sub", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int32.size": [{"id": "Int32___size", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int32.shiftRight": [{"id": "Int32___shiftRight", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int32.shiftLeft": [{"id": "Int32___shiftLeft", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int32.ofUInt32": [{"id": "Int32___ofUInt32", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int32.ofNat": [{"id": "Int32___ofNat", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int32.ofIntTruncate": [{"id": "Int32___ofIntTruncate", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int32.ofIntLE": [{"id": "Int32___ofIntLE", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int32.ofInt": [{"id": "Int32___ofInt", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int32.ofBitVec": [{"id": "Int32___ofBitVec", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int32.neg": [{"id": "Int32___neg", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int32.mul": [{"id": "Int32___mul", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int32.mod": [{"id": "Int32___mod", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int32.minValue": [{"id": "Int32___minValue", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int32.maxValue": [{"id": "Int32___maxValue", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int32.lt": [{"id": "Int32___lt", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int32.lor": [{"id": "Int32___lor", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int32.le": [{"id": "Int32___le", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int32.land": [{"id": "Int32___land", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int32.div": [{"id": "Int32___div", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int32.decLt": [{"id": "Int32___decLt", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int32.decLe": [{"id": "Int32___decLe", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int32.decEq": [{"id": "Int32___decEq", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int32.complement": [{"id": "Int32___complement", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int32.add": [{"id": "Int32___add", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int32.abs": [{"id": "Int32___abs", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int32": [{"id": "Int32___ofUInt32", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int16.xor": [{"id": "Int16___xor", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int16.toUInt16": [{"id": "Int16___ofUInt16", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int16.toNatClampNeg": [{"id": "Int16___toNatClampNeg", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int16.toInt8": [{"id": "Int16___toInt8", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int16.toInt64": [{"id": "Int16___toInt64", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int16.toInt32": [{"id": "Int16___toInt32", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int16.toInt": [{"id": "Int16___toInt", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int16.toISize": [{"id": "Int16___toISize", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int16.toFloat32": [{"id": "Int16___toFloat32", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int16.toFloat": [{"id": "Int16___toFloat", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int16.toBitVec": [{"id": "Int16___toBitVec", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int16.sub": [{"id": "Int16___sub", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int16.size": [{"id": "Int16___size", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int16.shiftRight": [{"id": "Int16___shiftRight", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int16.shiftLeft": [{"id": "Int16___shiftLeft", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int16.ofUInt16": [{"id": "Int16___ofUInt16", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int16.ofNat": [{"id": "Int16___ofNat", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int16.ofIntTruncate": [{"id": "Int16___ofIntTruncate", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int16.ofIntLE": [{"id": "Int16___ofIntLE", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int16.ofInt": [{"id": "Int16___ofInt", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int16.ofBitVec": [{"id": "Int16___ofBitVec", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int16.neg": [{"id": "Int16___neg", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int16.mul": [{"id": "Int16___mul", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int16.mod": [{"id": "Int16___mod", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int16.minValue": [{"id": "Int16___minValue", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int16.maxValue": [{"id": "Int16___maxValue", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int16.lt": [{"id": "Int16___lt", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int16.lor": [{"id": "Int16___lor", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int16.le": [{"id": "Int16___le", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int16.land": [{"id": "Int16___land", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int16.div": [{"id": "Int16___div", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int16.decLt": [{"id": "Int16___decLt", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int16.decLe": [{"id": "Int16___decLe", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int16.decEq": [{"id": "Int16___decEq", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int16.complement": [{"id": "Int16___complement", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int16.add": [{"id": "Int16___add", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int16.abs": [{"id": "Int16___abs", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int16": [{"id": "Int16___ofUInt16", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "Int.toNat?": [{"id": "Int___toNat___", "data": null, "address": "/Basic-Types/Integers/"}], "Int.toNat": [{"id": "Int___toNat", "data": null, "address": "/Basic-Types/Integers/"}], "Int.toInt8": [{"id": "Int___toInt8", "data": null, "address": "/Basic-Types/Integers/"}], "Int.toInt64": [{"id": "Int___toInt64", "data": null, "address": "/Basic-Types/Integers/"}], "Int.toInt32": [{"id": "Int___toInt32", "data": null, "address": "/Basic-Types/Integers/"}], "Int.toInt16": [{"id": "Int___toInt16", "data": null, "address": "/Basic-Types/Integers/"}], "Int.toISize": [{"id": "Int___toISize", "data": null, "address": "/Basic-Types/Integers/"}], "Int.tmod": [{"id": "Int___tmod", "data": null, "address": "/Basic-Types/Integers/"}], "Int.tdiv": [{"id": "Int___tdiv", "data": null, "address": "/Basic-Types/Integers/"}], "Int.subNatNat": [{"id": "Int___subNatNat", "data": null, "address": "/Basic-Types/Integers/"}], "Int.sub": [{"id": "Int___sub", "data": null, "address": "/Basic-Types/Integers/"}], "Int.sign": [{"id": "Int___sign", "data": null, "address": "/Basic-Types/Integers/"}], "Int.shiftRight": [{"id": "Int___shiftRight", "data": null, "address": "/Basic-Types/Integers/"}], "Int.repr": [{"id": "Int___repr", "data": null, "address": "/Basic-Types/Integers/"}], "Int.pow": [{"id": "Int___pow", "data": null, "address": "/Basic-Types/Integers/"}], "Int.ofNat": [{"id": "Int___ofNat", "data": null, "address": "/Basic-Types/Integers/"}], "Int.not": [{"id": "Int___not", "data": null, "address": "/Basic-Types/Integers/"}], "Int.negSucc": [{"id": "Int___ofNat", "data": null, "address": "/Basic-Types/Integers/"}], "Int.negOfNat": [{"id": "Int___negOfNat", "data": null, "address": "/Basic-Types/Integers/"}], "Int.neg": [{"id": "Int___neg", "data": null, "address": "/Basic-Types/Integers/"}], "Int.natAbs": [{"id": "Int___natAbs", "data": null, "address": "/Basic-Types/Integers/"}], "Int.mul": [{"id": "Int___mul", "data": null, "address": "/Basic-Types/Integers/"}], "Int.lt": [{"id": "Int___lt", "data": null, "address": "/Basic-Types/Integers/"}], "Int.le": [{"id": "Int___le", "data": null, "address": "/Basic-Types/Integers/"}], "Int.lcm": [{"id": "Int___lcm", "data": null, "address": "/Basic-Types/Integers/"}], "Int.gcd": [{"id": "Int___gcd", "data": null, "address": "/Basic-Types/Integers/"}], "Int.fmod": [{"id": "Int___fmod", "data": null, "address": "/Basic-Types/Integers/"}], "Int.fdiv": [{"id": "Int___fdiv", "data": null, "address": "/Basic-Types/Integers/"}], "Int.emod": [{"id": "Int___emod", "data": null, "address": "/Basic-Types/Integers/"}], "Int.ediv": [{"id": "Int___ediv", "data": null, "address": "/Basic-Types/Integers/"}], "Int.decEq": [{"id": "Int___decEq", "data": null, "address": "/Basic-Types/Integers/"}], "Int.cast": [{"id": "Int___cast", "data": null, "address": "/Coercions/Coercing-Between-Types/"}], "Int.bmod": [{"id": "Int___bmod", "data": null, "address": "/Basic-Types/Integers/"}], "Int.bdiv": [{"id": "Int___bdiv", "data": null, "address": "/Basic-Types/Integers/"}], "Int.add": [{"id": "Int___add", "data": null, "address": "/Basic-Types/Integers/"}], "Int": [{"id": "Int___ofNat", "data": null, "address": "/Basic-Types/Integers/"}], "Inhabited.mk": [{"id": "Inhabited___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "Inhabited.default": [{"id": "Inhabited___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "Inhabited": [{"id": "Inhabited___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "Iff.mpr": [{"id": "Iff___intro", "data": null, "address": "/Basic-Propositions/Logical-Connectives/"}], "Iff.mp": [{"id": "Iff___intro", "data": null, "address": "/Basic-Propositions/Logical-Connectives/"}], "Iff.intro": [{"id": "Iff___intro", "data": null, "address": "/Basic-Propositions/Logical-Connectives/"}], "Iff.elim": [{"id": "Iff___elim", "data": null, "address": "/Basic-Propositions/Logical-Connectives/"}], "Iff": [{"id": "Iff___intro", "data": null, "address": "/Basic-Propositions/Logical-Connectives/"}], "Id.run": [{"id": "Id___run", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "Id": [{"id": "Id", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "ISize.xor": [{"id": "ISize___xor", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "ISize.toUSize": [{"id": "ISize___ofUSize", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "ISize.toNatClampNeg": [{"id": "ISize___toNatClampNeg", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "ISize.toInt8": [{"id": "ISize___toInt8", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "ISize.toInt64": [{"id": "ISize___toInt64", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "ISize.toInt32": [{"id": "ISize___toInt32", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "ISize.toInt16": [{"id": "ISize___toInt16", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "ISize.toInt": [{"id": "ISize___toInt", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "ISize.toFloat32": [{"id": "ISize___toFloat32", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "ISize.toFloat": [{"id": "ISize___toFloat", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "ISize.toBitVec": [{"id": "ISize___toBitVec", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "ISize.sub": [{"id": "ISize___sub", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "ISize.size": [{"id": "ISize___size", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "ISize.shiftRight": [{"id": "ISize___shiftRight", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "ISize.shiftLeft": [{"id": "ISize___shiftLeft", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "ISize.ofUSize": [{"id": "ISize___ofUSize", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "ISize.ofNat": [{"id": "ISize___ofNat", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "ISize.ofIntTruncate": [{"id": "ISize___ofIntTruncate", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "ISize.ofIntLE": [{"id": "ISize___ofIntLE", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "ISize.ofInt": [{"id": "ISize___ofInt", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "ISize.ofBitVec": [{"id": "ISize___ofBitVec", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "ISize.neg": [{"id": "ISize___neg", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "ISize.mul": [{"id": "ISize___mul", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "ISize.mod": [{"id": "ISize___mod", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "ISize.minValue": [{"id": "ISize___minValue", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "ISize.maxValue": [{"id": "ISize___maxValue", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "ISize.lt": [{"id": "ISize___lt", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "ISize.lor": [{"id": "ISize___lor", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "ISize.le": [{"id": "ISize___le", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "ISize.land": [{"id": "ISize___land", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "ISize.div": [{"id": "ISize___div", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "ISize.decLt": [{"id": "ISize___decLt", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "ISize.decLe": [{"id": "ISize___decLe", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "ISize.decEq": [{"id": "ISize___decEq", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "ISize.complement": [{"id": "ISize___complement", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "ISize.add": [{"id": "ISize___add", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "ISize.abs": [{"id": "ISize___abs", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "ISize": [{"id": "ISize___ofUSize", "data": null, "address": "/Basic-Types/Fixed-Precision-Integers/"}], "IO.withStdout": [{"id": "IO___withStdout", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "IO.withStdin": [{"id": "IO___withStdin", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "IO.withStderr": [{"id": "IO___withStderr", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "IO.waitAny": [{"id": "IO___waitAny", "data": null, "address": "/IO/Tasks-and-Threads/"}], "IO.wait": [{"id": "IO___wait", "data": null, "address": "/IO/Tasks-and-Threads/"}], "IO.userError": [{"id": "IO___userError", "data": null, "address": "/IO/Logical-Model/"}], "IO.toEIO": [{"id": "IO___toEIO", "data": null, "address": "/IO/Logical-Model/"}], "IO.sleep": [{"id": "IO___sleep", "data": null, "address": "/IO/Timing/"}], "IO.setStdout": [{"id": "IO___setStdout", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "IO.setStdin": [{"id": "IO___setStdin", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "IO.setStderr": [{"id": "IO___setStderr", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "IO.setRandSeed": [{"id": "IO___setRandSeed", "data": null, "address": "/IO/Random-Numbers/"}], "IO.setAccessRights": [{"id": "IO___setAccessRights", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "IO.rand": [{"id": "IO___rand", "data": null, "address": "/IO/Random-Numbers/"}], "IO.println": [{"id": "IO___println", "data": null, "address": "/IO/Console-Output/"}], "IO.print": [{"id": "IO___print", "data": null, "address": "/IO/Console-Output/"}], "IO.ofExcept": [{"id": "IO___ofExcept", "data": null, "address": "/IO/Logical-Model/"}], "IO.monoNanosNow": [{"id": "IO___monoNanosNow", "data": null, "address": "/IO/Timing/"}], "IO.monoMsNow": [{"id": "IO___monoMsNow", "data": null, "address": "/IO/Timing/"}], "IO.mkRef": [{"id": "IO___mkRef", "data": null, "address": "/IO/Mutable-References/"}], "IO.mapTasks": [{"id": "IO___mapTasks", "data": null, "address": "/IO/Tasks-and-Threads/"}], "IO.mapTask": [{"id": "IO___mapTask", "data": null, "address": "/IO/Tasks-and-Threads/"}], "IO.lazyPure": [{"id": "IO___lazyPure", "data": null, "address": "/IO/Logical-Model/"}], "IO.iterate": [{"id": "IO___iterate", "data": null, "address": "/IO/Control-Structures/"}], "IO.hasFinished": [{"id": "IO___hasFinished", "data": null, "address": "/IO/Tasks-and-Threads/"}], "IO.getTaskState": [{"id": "IO___getTaskState", "data": null, "address": "/IO/Tasks-and-Threads/"}], "IO.getTID": [{"id": "IO___getTID", "data": null, "address": "/IO/Tasks-and-Threads/"}], "IO.getStdout": [{"id": "IO___getStdout", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "IO.getStdin": [{"id": "IO___getStdin", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "IO.getStderr": [{"id": "IO___getStderr", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "IO.getRandomBytes": [{"id": "IO___getRandomBytes", "data": null, "address": "/IO/Random-Numbers/"}], "IO.getNumHeartbeats": [{"id": "IO___getNumHeartbeats", "data": null, "address": "/IO/Timing/"}], "IO.getEnv": [{"id": "IO___getEnv", "data": null, "address": "/IO/Environment-Variables/"}], "IO.eprintln": [{"id": "IO___eprintln", "data": null, "address": "/IO/Console-Output/"}], "IO.eprint": [{"id": "IO___eprint", "data": null, "address": "/IO/Console-Output/"}], "IO.currentDir": [{"id": "IO___currentDir", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "IO.checkCanceled": [{"id": "IO___checkCanceled", "data": null, "address": "/IO/Tasks-and-Threads/"}], "IO.chainTask": [{"id": "IO___chainTask", "data": null, "address": "/IO/Tasks-and-Threads/"}], "IO.cancel": [{"id": "IO___cancel", "data": null, "address": "/IO/Tasks-and-Threads/"}], "IO.bindTask": [{"id": "IO___bindTask", "data": null, "address": "/IO/Tasks-and-Threads/"}], "IO.asTask": [{"id": "IO___asTask", "data": null, "address": "/IO/Tasks-and-Threads/"}], "IO.appPath": [{"id": "IO___appPath", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "IO.appDir": [{"id": "IO___appDir", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "IO.addHeartbeats": [{"id": "IO___addHeartbeats", "data": null, "address": "/IO/Timing/"}], "IO.TaskState.waiting": [{"id": "IO___TaskState___waiting", "data": null, "address": "/IO/Tasks-and-Threads/"}], "IO.TaskState.running": [{"id": "IO___TaskState___waiting", "data": null, "address": "/IO/Tasks-and-Threads/"}], "IO.TaskState.finished": [{"id": "IO___TaskState___waiting", "data": null, "address": "/IO/Tasks-and-Threads/"}], "IO.TaskState": [{"id": "IO___TaskState___waiting", "data": null, "address": "/IO/Tasks-and-Threads/"}], "IO.Ref": [{"id": "IO___Ref", "data": null, "address": "/IO/Mutable-References/"}], "IO.Promise.resultD": [{"id": "IO___Promise___resultD", "data": null, "address": "/IO/Tasks-and-Threads/"}], "IO.Promise.result?": [{"id": "IO___Promise___result___", "data": null, "address": "/IO/Tasks-and-Threads/"}], "IO.Promise.result!": [{"id": "IO___Promise___result___-next", "data": null, "address": "/IO/Tasks-and-Threads/"}], "IO.Promise.resolve": [{"id": "IO___Promise___resolve", "data": null, "address": "/IO/Tasks-and-Threads/"}], "IO.Promise.new": [{"id": "IO___Promise___new", "data": null, "address": "/IO/Tasks-and-Threads/"}], "IO.Promise.isResolved": [{"id": "IO___Promise___isResolved", "data": null, "address": "/IO/Tasks-and-Threads/"}], "IO.Promise": [{"id": "IO___Promise", "data": null, "address": "/IO/Tasks-and-Threads/"}], "IO.Process.spawn": [{"id": "IO___Process___spawn", "data": null, "address": "/IO/Processes/"}], "IO.Process.setCurrentDir": [{"id": "IO___Process___setCurrentDir", "data": null, "address": "/IO/Processes/"}], "IO.Process.run": [{"id": "IO___Process___run", "data": null, "address": "/IO/Processes/"}], "IO.Process.output": [{"id": "IO___Process___output", "data": null, "address": "/IO/Processes/"}], "IO.Process.getPID": [{"id": "IO___Process___getPID", "data": null, "address": "/IO/Processes/"}], "IO.Process.getCurrentDir": [{"id": "IO___Process___getCurrentDir", "data": null, "address": "/IO/Processes/"}], "IO.Process.exit": [{"id": "IO___Process___exit", "data": null, "address": "/IO/Processes/"}], "IO.Process.StdioConfig.stdout": [{"id": "IO___Process___StdioConfig___mk", "data": null, "address": "/IO/Processes/"}], "IO.Process.StdioConfig.stdin": [{"id": "IO___Process___StdioConfig___mk", "data": null, "address": "/IO/Processes/"}], "IO.Process.StdioConfig.stderr": [{"id": "IO___Process___StdioConfig___mk", "data": null, "address": "/IO/Processes/"}], "IO.Process.StdioConfig.mk": [{"id": "IO___Process___StdioConfig___mk", "data": null, "address": "/IO/Processes/"}], "IO.Process.StdioConfig": [{"id": "IO___Process___StdioConfig___mk", "data": null, "address": "/IO/Processes/"}], "IO.Process.Stdio.toHandleType": [{"id": "IO___Process___Stdio___toHandleType", "data": null, "address": "/IO/Processes/"}], "IO.Process.Stdio.piped": [{"id": "IO___Process___Stdio___piped", "data": null, "address": "/IO/Processes/"}], "IO.Process.Stdio.null": [{"id": "IO___Process___Stdio___piped", "data": null, "address": "/IO/Processes/"}], "IO.Process.Stdio.inherit": [{"id": "IO___Process___Stdio___piped", "data": null, "address": "/IO/Processes/"}], "IO.Process.Stdio": [{"id": "IO___Process___Stdio___piped", "data": null, "address": "/IO/Processes/"}], "IO.Process.SpawnArgs.toStdioConfig": [{"id": "IO___Process___SpawnArgs___mk", "data": null, "address": "/IO/Processes/"}], "IO.Process.SpawnArgs.mk": [{"id": "IO___Process___SpawnArgs___mk", "data": null, "address": "/IO/Processes/"}], "IO.Process.SpawnArgs.cwd": [{"id": "IO___Process___SpawnArgs___mk", "data": null, "address": "/IO/Processes/"}], "IO.Process.SpawnArgs.cmd": [{"id": "IO___Process___SpawnArgs___mk", "data": null, "address": "/IO/Processes/"}], "IO.Process.SpawnArgs.args": [{"id": "IO___Process___SpawnArgs___mk", "data": null, "address": "/IO/Processes/"}], "IO.Process.SpawnArgs": [{"id": "IO___Process___SpawnArgs___mk", "data": null, "address": "/IO/Processes/"}], "IO.Process.Output.stdout": [{"id": "IO___Process___Output___mk", "data": null, "address": "/IO/Processes/"}], "IO.Process.Output.stderr": [{"id": "IO___Process___Output___mk", "data": null, "address": "/IO/Processes/"}], "IO.Process.Output.mk": [{"id": "IO___Process___Output___mk", "data": null, "address": "/IO/Processes/"}], "IO.Process.Output.exitCode": [{"id": "IO___Process___Output___mk", "data": null, "address": "/IO/Processes/"}], "IO.Process.Output": [{"id": "IO___Process___Output___mk", "data": null, "address": "/IO/Processes/"}], "IO.Process.Child.wait": [{"id": "IO___Process___Child___wait", "data": null, "address": "/IO/Processes/"}], "IO.Process.Child.tryWait": [{"id": "IO___Process___Child___tryWait", "data": null, "address": "/IO/Processes/"}], "IO.Process.Child.takeStdin": [{"id": "IO___Process___Child___takeStdin", "data": null, "address": "/IO/Processes/"}], "IO.Process.Child.stdout": [{"id": "IO___Process___Child___stdin", "data": null, "address": "/IO/Processes/"}], "IO.Process.Child.stdin": [{"id": "IO___Process___Child___stdin", "data": null, "address": "/IO/Processes/"}], "IO.Process.Child.stderr": [{"id": "IO___Process___Child___stdin", "data": null, "address": "/IO/Processes/"}], "IO.Process.Child.kill": [{"id": "IO___Process___Child___kill", "data": null, "address": "/IO/Processes/"}], "IO.Process.Child": [{"id": "IO___Process___Child___stdin", "data": null, "address": "/IO/Processes/"}], "IO.FileRight.user": [{"id": "IO___FileRight___mk", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "IO.FileRight.other": [{"id": "IO___FileRight___mk", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "IO.FileRight.mk": [{"id": "IO___FileRight___mk", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "IO.FileRight.group": [{"id": "IO___FileRight___mk", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "IO.FileRight.flags": [{"id": "IO___FileRight___flags", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "IO.FileRight": [{"id": "IO___FileRight___mk", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "IO.FS.writeFile": [{"id": "IO___FS___writeFile", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "IO.FS.writeBinFile": [{"id": "IO___FS___writeBinFile", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "IO.FS.withTempFile": [{"id": "IO___FS___withTempFile", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "IO.FS.withTempDir": [{"id": "IO___FS___withTempDir", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "IO.FS.withIsolatedStreams": [{"id": "IO___FS___withIsolatedStreams", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "IO.FS.withFile": [{"id": "IO___FS___withFile", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "IO.FS.rename": [{"id": "IO___FS___rename", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "IO.FS.removeFile": [{"id": "IO___FS___removeFile", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "IO.FS.removeDirAll": [{"id": "IO___FS___removeDirAll", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "IO.FS.removeDir": [{"id": "IO___FS___removeDir", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "IO.FS.realPath": [{"id": "IO___FS___realPath", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "IO.FS.readFile": [{"id": "IO___FS___readFile", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "IO.FS.readBinFile": [{"id": "IO___FS___readBinFile", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "IO.FS.lines": [{"id": "IO___FS___lines", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "IO.FS.createTempFile": [{"id": "IO___FS___createTempFile", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "IO.FS.createTempDir": [{"id": "IO___FS___createTempDir", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "IO.FS.createDirAll": [{"id": "IO___FS___createDirAll", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "IO.FS.createDir": [{"id": "IO___FS___createDir", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "IO.FS.Stream.write": [{"id": "IO___FS___Stream___mk", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "IO.FS.Stream.read": [{"id": "IO___FS___Stream___mk", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "IO.FS.Stream.putStrLn": [{"id": "IO___FS___Stream___putStrLn", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "IO.FS.Stream.putStr": [{"id": "IO___FS___Stream___mk", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "IO.FS.Stream.ofHandle": [{"id": "IO___FS___Stream___ofHandle", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "IO.FS.Stream.ofBuffer": [{"id": "IO___FS___Stream___ofBuffer", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "IO.FS.Stream.mk": [{"id": "IO___FS___Stream___mk", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "IO.FS.Stream.isTty": [{"id": "IO___FS___Stream___mk", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "IO.FS.Stream.getLine": [{"id": "IO___FS___Stream___mk", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "IO.FS.Stream.flush": [{"id": "IO___FS___Stream___mk", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "IO.FS.Stream.Buffer.pos": [{"id": "IO___FS___Stream___Buffer___mk", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "IO.FS.Stream.Buffer.mk": [{"id": "IO___FS___Stream___Buffer___mk", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "IO.FS.Stream.Buffer.data": [{"id": "IO___FS___Stream___Buffer___mk", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "IO.FS.Stream.Buffer": [{"id": "IO___FS___Stream___Buffer___mk", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "IO.FS.Stream": [{"id": "IO___FS___Stream___mk", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "IO.FS.Mode.writeNew": [{"id": "IO___FS___Mode___read", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "IO.FS.Mode.write": [{"id": "IO___FS___Mode___read", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "IO.FS.Mode.readWrite": [{"id": "IO___FS___Mode___read", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "IO.FS.Mode.read": [{"id": "IO___FS___Mode___read", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "IO.FS.Mode.append": [{"id": "IO___FS___Mode___read", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "IO.FS.Mode": [{"id": "IO___FS___Mode___read", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "IO.FS.Metadata.type": [{"id": "IO___FS___Metadata___mk", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "IO.FS.Metadata.modified": [{"id": "IO___FS___Metadata___mk", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "IO.FS.Metadata.mk": [{"id": "IO___FS___Metadata___mk", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "IO.FS.Metadata.byteSize": [{"id": "IO___FS___Metadata___mk", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "IO.FS.Metadata.accessed": [{"id": "IO___FS___Metadata___mk", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "IO.FS.Metadata": [{"id": "IO___FS___Metadata___mk", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "IO.FS.Handle.write": [{"id": "IO___FS___Handle___write", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "IO.FS.Handle.unlock": [{"id": "IO___FS___Handle___unlock", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "IO.FS.Handle.tryLock": [{"id": "IO___FS___Handle___tryLock", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "IO.FS.Handle.truncate": [{"id": "IO___FS___Handle___truncate", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "IO.FS.Handle.rewind": [{"id": "IO___FS___Handle___rewind", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "IO.FS.Handle.readToEnd": [{"id": "IO___FS___Handle___readToEnd", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "IO.FS.Handle.readBinToEndInto": [{"id": "IO___FS___Handle___readBinToEndInto", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "IO.FS.Handle.readBinToEnd": [{"id": "IO___FS___Handle___readBinToEnd", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "IO.FS.Handle.read": [{"id": "IO___FS___Handle___read", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "IO.FS.Handle.putStrLn": [{"id": "IO___FS___Handle___putStrLn", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "IO.FS.Handle.putStr": [{"id": "IO___FS___Handle___putStr", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "IO.FS.Handle.mk": [{"id": "IO___FS___Handle___mk", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "IO.FS.Handle.lock": [{"id": "IO___FS___Handle___lock", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "IO.FS.Handle.isTty": [{"id": "IO___FS___Handle___isTty", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "IO.FS.Handle.getLine": [{"id": "IO___FS___Handle___getLine", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "IO.FS.Handle.flush": [{"id": "IO___FS___Handle___flush", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "IO.FS.Handle": [{"id": "IO___FS___Handle", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "IO.FS.DirEntry.root": [{"id": "IO___FS___DirEntry___mk", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "IO.FS.DirEntry.path": [{"id": "IO___FS___DirEntry___path", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "IO.FS.DirEntry.mk": [{"id": "IO___FS___DirEntry___mk", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "IO.FS.DirEntry.fileName": [{"id": "IO___FS___DirEntry___mk", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "IO.FS.DirEntry": [{"id": "IO___FS___DirEntry___mk", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "IO.Error.userError": [{"id": "IO___Error___alreadyExists", "data": null, "address": "/IO/Logical-Model/"}], "IO.Error.unsupportedOperation": [{"id": "IO___Error___alreadyExists", "data": null, "address": "/IO/Logical-Model/"}], "IO.Error.unsatisfiedConstraints": [{"id": "IO___Error___alreadyExists", "data": null, "address": "/IO/Logical-Model/"}], "IO.Error.unexpectedEof": [{"id": "IO___Error___alreadyExists", "data": null, "address": "/IO/Logical-Model/"}], "IO.Error.toString": [{"id": "IO___Error___toString", "data": null, "address": "/IO/Logical-Model/"}], "IO.Error.timeExpired": [{"id": "IO___Error___alreadyExists", "data": null, "address": "/IO/Logical-Model/"}], "IO.Error.resourceVanished": [{"id": "IO___Error___alreadyExists", "data": null, "address": "/IO/Logical-Model/"}], "IO.Error.resourceExhausted": [{"id": "IO___Error___alreadyExists", "data": null, "address": "/IO/Logical-Model/"}], "IO.Error.resourceBusy": [{"id": "IO___Error___alreadyExists", "data": null, "address": "/IO/Logical-Model/"}], "IO.Error.protocolError": [{"id": "IO___Error___alreadyExists", "data": null, "address": "/IO/Logical-Model/"}], "IO.Error.permissionDenied": [{"id": "IO___Error___alreadyExists", "data": null, "address": "/IO/Logical-Model/"}], "IO.Error.otherError": [{"id": "IO___Error___alreadyExists", "data": null, "address": "/IO/Logical-Model/"}], "IO.Error.noSuchThing": [{"id": "IO___Error___alreadyExists", "data": null, "address": "/IO/Logical-Model/"}], "IO.Error.noFileOrDirectory": [{"id": "IO___Error___alreadyExists", "data": null, "address": "/IO/Logical-Model/"}], "IO.Error.invalidArgument": [{"id": "IO___Error___alreadyExists", "data": null, "address": "/IO/Logical-Model/"}], "IO.Error.interrupted": [{"id": "IO___Error___alreadyExists", "data": null, "address": "/IO/Logical-Model/"}], "IO.Error.inappropriateType": [{"id": "IO___Error___alreadyExists", "data": null, "address": "/IO/Logical-Model/"}], "IO.Error.illegalOperation": [{"id": "IO___Error___alreadyExists", "data": null, "address": "/IO/Logical-Model/"}], "IO.Error.hardwareFault": [{"id": "IO___Error___alreadyExists", "data": null, "address": "/IO/Logical-Model/"}], "IO.Error.alreadyExists": [{"id": "IO___Error___alreadyExists", "data": null, "address": "/IO/Logical-Model/"}], "IO.Error": [{"id": "IO___Error___alreadyExists", "data": null, "address": "/IO/Logical-Model/"}], "IO.AccessRight.write": [{"id": "IO___AccessRight___mk", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "IO.AccessRight.read": [{"id": "IO___AccessRight___mk", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "IO.AccessRight.mk": [{"id": "IO___AccessRight___mk", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "IO.AccessRight.flags": [{"id": "IO___AccessRight___flags", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "IO.AccessRight.execution": [{"id": "IO___AccessRight___mk", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "IO.AccessRight": [{"id": "IO___AccessRight___mk", "data": null, "address": "/IO/Files___-File-Handles___-and-Streams/"}], "IO": [{"id": "IO", "data": null, "address": "/IO/Logical-Model/"}], "HomogeneousPow.pow": [{"id": "HomogeneousPow___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "HomogeneousPow.mk": [{"id": "HomogeneousPow___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "HomogeneousPow": [{"id": "HomogeneousPow___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "Hashable.mk": [{"id": "Hashable___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "Hashable.hash": [{"id": "Hashable___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "Hashable": [{"id": "Hashable___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "HasEquiv.mk": [{"id": "HasEquiv___mk", "data": null, "address": "/The-Type-System/Quotients/"}], "HasEquiv.Equiv": [{"id": "HasEquiv___mk", "data": null, "address": "/The-Type-System/Quotients/"}], "HasEquiv": [{"id": "HasEquiv___mk", "data": null, "address": "/The-Type-System/Quotients/"}], "HXor.mk": [{"id": "HXor___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "HXor.hXor": [{"id": "HXor___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "HXor": [{"id": "HXor___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "HSub.mk": [{"id": "HSub___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "HSub.hSub": [{"id": "HSub___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "HSub": [{"id": "HSub___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "HShiftRight.mk": [{"id": "HShiftRight___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "HShiftRight.hShiftRight": [{"id": "HShiftRight___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "HShiftRight": [{"id": "HShiftRight___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "HShiftLeft.mk": [{"id": "HShiftLeft___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "HShiftLeft.hShiftLeft": [{"id": "HShiftLeft___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "HShiftLeft": [{"id": "HShiftLeft___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "HPow.mk": [{"id": "HPow___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "HPow.hPow": [{"id": "HPow___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "HPow": [{"id": "HPow___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "HOr.mk": [{"id": "HOr___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "HOr.hOr": [{"id": "HOr___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "HOr": [{"id": "HOr___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "HMul.mk": [{"id": "HMul___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "HMul.hMul": [{"id": "HMul___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "HMul": [{"id": "HMul___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "HMod.mk": [{"id": "HMod___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "HMod.hMod": [{"id": "HMod___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "HMod": [{"id": "HMod___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "HEq.subst": [{"id": "HEq___subst", "data": null, "address": "/Basic-Propositions/Propositional-Equality/"}], "HEq.rfl": [{"id": "HEq___rfl", "data": null, "address": "/Basic-Propositions/Propositional-Equality/"}], "HEq.refl": [{"id": "HEq___refl", "data": null, "address": "/Basic-Propositions/Propositional-Equality/"}], "HEq.ndrecOn": [{"id": "HEq___ndrecOn", "data": null, "address": "/Basic-Propositions/Propositional-Equality/"}], "HEq.ndrec": [{"id": "HEq___ndrec", "data": null, "address": "/Basic-Propositions/Propositional-Equality/"}], "HEq.elim": [{"id": "HEq___elim", "data": null, "address": "/Basic-Propositions/Propositional-Equality/"}], "HEq": [{"id": "HEq___refl", "data": null, "address": "/Basic-Propositions/Propositional-Equality/"}], "HDiv.mk": [{"id": "HDiv___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "HDiv.hDiv": [{"id": "HDiv___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "HDiv": [{"id": "HDiv___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "HAppend.mk": [{"id": "HAppend___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "HAppend.hAppend": [{"id": "HAppend___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "HAppend": [{"id": "HAppend___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "HAnd.mk": [{"id": "HAnd___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "HAnd.hAnd": [{"id": "HAnd___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "HAnd": [{"id": "HAnd___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "HAdd.mk": [{"id": "HAdd___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "HAdd.hAdd": [{"id": "HAdd___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "HAdd": [{"id": "HAdd___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "GetElem?.toGetElem": [{"id": "GetElem______mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "GetElem?.mk": [{"id": "GetElem______mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "GetElem?.getElem?": [{"id": "GetElem______mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "GetElem?": [{"id": "GetElem______mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "GetElem.mk": [{"id": "GetElem___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "GetElem.getElem": [{"id": "GetElem___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "GetElem": [{"id": "GetElem___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "Functor.mk": [{"id": "Functor___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/"}], "Functor.mapRev": [{"id": "Functor___mapRev", "data": null, "address": "/Functors___-Monads-and--do--Notation/API-Reference/"}], "Functor.mapConst": [{"id": "Functor___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/"}], "Functor.map": [{"id": "Functor___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/"}], "Functor.discard": [{"id": "Functor___discard", "data": null, "address": "/Functors___-Monads-and--do--Notation/API-Reference/"}], "Functor": [{"id": "Functor___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/"}], "Function.uncurry": [{"id": "Function___uncurry", "data": null, "address": "/The-Type-System/Functions/"}], "Function.curry": [{"id": "Function___curry", "data": null, "address": "/The-Type-System/Functions/"}], "Function.const": [{"id": "Function___const", "data": null, "address": "/The-Type-System/Functions/"}], "Function.comp": [{"id": "Function___comp", "data": null, "address": "/The-Type-System/Functions/"}], "Function.Surjective": [{"id": "Function___Surjective", "data": null, "address": "/The-Type-System/Functions/"}], "Function.RightInverse": [{"id": "Function___RightInverse", "data": null, "address": "/The-Type-System/Functions/"}], "Function.LeftInverse": [{"id": "Function___LeftInverse", "data": null, "address": "/The-Type-System/Functions/"}], "Function.Injective": [{"id": "Function___Injective", "data": null, "address": "/The-Type-System/Functions/"}], "Function.HasRightInverse": [{"id": "Function___HasRightInverse", "data": null, "address": "/The-Type-System/Functions/"}], "Function.HasLeftInverse": [{"id": "Function___HasLeftInverse", "data": null, "address": "/The-Type-System/Functions/"}], "ForM.mk": [{"id": "ForM___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}], "ForM.forM": [{"id": "ForM___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}], "ForM.forIn": [{"id": "ForM___forIn", "data": null, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}], "ForM": [{"id": "ForM___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}], "ForInStep.yield": [{"id": "ForInStep___done", "data": null, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}], "ForInStep.value": [{"id": "ForInStep___value", "data": null, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}], "ForInStep.done": [{"id": "ForInStep___done", "data": null, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}], "ForInStep": [{"id": "ForInStep___done", "data": null, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}], "ForIn.mk": [{"id": "ForIn___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}], "ForIn.forIn": [{"id": "ForIn___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}], "ForIn'.mk": [{"id": "ForIn______mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}], "ForIn'.forIn'": [{"id": "ForIn______mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}], "ForIn'": [{"id": "ForIn______mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}], "ForIn": [{"id": "ForIn___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}], "Float32.toUSize": [{"id": "Float32___toUSize", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float32.toUInt8": [{"id": "Float32___toUInt8", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float32.toUInt64": [{"id": "Float32___toUInt64", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float32.toUInt32": [{"id": "Float32___toUInt32", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float32.toUInt16": [{"id": "Float32___toUInt16", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float32.toString": [{"id": "Float32___toString", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float32.toInt8": [{"id": "Float32___toInt8", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float32.toInt64": [{"id": "Float32___toInt64", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float32.toInt32": [{"id": "Float32___toInt32", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float32.toInt16": [{"id": "Float32___toInt16", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float32.toISize": [{"id": "Float32___toISize", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float32.toFloat": [{"id": "Float32___toFloat", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float32.toBits": [{"id": "Float32___toBits", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float32.tanh": [{"id": "Float32___tanh", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float32.tan": [{"id": "Float32___tan", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float32.sub": [{"id": "Float32___sub", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float32.sqrt": [{"id": "Float32___sqrt", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float32.sinh": [{"id": "Float32___sinh", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float32.sin": [{"id": "Float32___sin", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float32.scaleB": [{"id": "Float32___scaleB", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float32.round": [{"id": "Float32___round", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float32.pow": [{"id": "Float32___pow", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float32.ofScientific": [{"id": "Float32___ofScientific", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float32.ofNat": [{"id": "Float32___ofNat", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float32.ofInt": [{"id": "Float32___ofInt", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float32.ofBits": [{"id": "Float32___ofBits", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float32.ofBinaryScientific": [{"id": "Float32___ofBinaryScientific", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float32.neg": [{"id": "Float32___neg", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float32.mul": [{"id": "Float32___mul", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float32.lt": [{"id": "Float32___lt", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float32.log2": [{"id": "Float32___log2", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float32.log10": [{"id": "Float32___log10", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float32.log": [{"id": "Float32___log", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float32.le": [{"id": "Float32___le", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float32.isNaN": [{"id": "Float32___isNaN", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float32.isInf": [{"id": "Float32___isInf", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float32.isFinite": [{"id": "Float32___isFinite", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float32.frExp": [{"id": "Float32___frExp", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float32.floor": [{"id": "Float32___floor", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float32.exp2": [{"id": "Float32___exp2", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float32.exp": [{"id": "Float32___exp", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float32.div": [{"id": "Float32___div", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float32.decLt": [{"id": "Float32___decLt", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float32.decLe": [{"id": "Float32___decLe", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float32.cosh": [{"id": "Float32___cosh", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float32.cos": [{"id": "Float32___cos", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float32.ceil": [{"id": "Float32___ceil", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float32.cbrt": [{"id": "Float32___cbrt", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float32.beq": [{"id": "Float32___beq", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float32.atanh": [{"id": "Float32___atanh", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float32.atan2": [{"id": "Float32___atan2", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float32.atan": [{"id": "Float32___atan", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float32.asinh": [{"id": "Float32___asinh", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float32.asin": [{"id": "Float32___asin", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float32.add": [{"id": "Float32___add", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float32.acosh": [{"id": "Float32___acosh", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float32.acos": [{"id": "Float32___acos", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float32.abs": [{"id": "Float32___abs", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float32": [{"id": "Float32", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float.toUSize": [{"id": "Float___toUSize", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float.toUInt8": [{"id": "Float___toUInt8", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float.toUInt64": [{"id": "Float___toUInt64", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float.toUInt32": [{"id": "Float___toUInt32", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float.toUInt16": [{"id": "Float___toUInt16", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float.toString": [{"id": "Float___toString", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float.toInt8": [{"id": "Float___toInt8", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float.toInt64": [{"id": "Float___toInt64", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float.toInt32": [{"id": "Float___toInt32", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float.toInt16": [{"id": "Float___toInt16", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float.toISize": [{"id": "Float___toISize", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float.toFloat32": [{"id": "Float___toFloat32", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float.toBits": [{"id": "Float___toBits", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float.tanh": [{"id": "Float___tanh", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float.tan": [{"id": "Float___tan", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float.sub": [{"id": "Float___sub", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float.sqrt": [{"id": "Float___sqrt", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float.sinh": [{"id": "Float___sinh", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float.sin": [{"id": "Float___sin", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float.scaleB": [{"id": "Float___scaleB", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float.round": [{"id": "Float___round", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float.pow": [{"id": "Float___pow", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float.ofScientific": [{"id": "Float___ofScientific", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float.ofNat": [{"id": "Float___ofNat", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float.ofInt": [{"id": "Float___ofInt", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float.ofBits": [{"id": "Float___ofBits", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float.ofBinaryScientific": [{"id": "Float___ofBinaryScientific", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float.neg": [{"id": "Float___neg", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float.mul": [{"id": "Float___mul", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float.lt": [{"id": "Float___lt", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float.log2": [{"id": "Float___log2", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float.log10": [{"id": "Float___log10", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float.log": [{"id": "Float___log", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float.le": [{"id": "Float___le", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float.isNaN": [{"id": "Float___isNaN", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float.isInf": [{"id": "Float___isInf", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float.isFinite": [{"id": "Float___isFinite", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float.frExp": [{"id": "Float___frExp", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float.floor": [{"id": "Float___floor", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float.exp2": [{"id": "Float___exp2", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float.exp": [{"id": "Float___exp", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float.div": [{"id": "Float___div", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float.decLt": [{"id": "Float___decLt", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float.decLe": [{"id": "Float___decLe", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float.cosh": [{"id": "Float___cosh", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float.cos": [{"id": "Float___cos", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float.ceil": [{"id": "Float___ceil", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float.cbrt": [{"id": "Float___cbrt", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float.beq": [{"id": "Float___beq", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float.atanh": [{"id": "Float___atanh", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float.atan2": [{"id": "Float___atan2", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float.atan": [{"id": "Float___atan", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float.asinh": [{"id": "Float___asinh", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float.asin": [{"id": "Float___asin", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float.add": [{"id": "Float___add", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float.acosh": [{"id": "Float___acosh", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float.acos": [{"id": "Float___acos", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float.abs": [{"id": "Float___abs", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Float": [{"id": "Float-next", "data": null, "address": "/Basic-Types/Floating-Point-Numbers/"}], "Fin.xor": [{"id": "Fin___xor", "data": null, "address": "/Basic-Types/Finite-Natural-Numbers/"}], "Fin.val": [{"id": "Fin___mk", "data": null, "address": "/Basic-Types/Finite-Natural-Numbers/"}], "Fin.toNat": [{"id": "Fin___toNat", "data": null, "address": "/Basic-Types/Finite-Natural-Numbers/"}], "Fin.succRecOn": [{"id": "Fin___succRecOn", "data": null, "address": "/Basic-Types/Finite-Natural-Numbers/"}], "Fin.succRec": [{"id": "Fin___succRec", "data": null, "address": "/Basic-Types/Finite-Natural-Numbers/"}], "Fin.succ": [{"id": "Fin___succ", "data": null, "address": "/Basic-Types/Finite-Natural-Numbers/"}], "Fin.subNat": [{"id": "Fin___subNat", "data": null, "address": "/Basic-Types/Finite-Natural-Numbers/"}], "Fin.sub": [{"id": "Fin___sub", "data": null, "address": "/Basic-Types/Finite-Natural-Numbers/"}], "Fin.shiftRight": [{"id": "Fin___shiftRight", "data": null, "address": "/Basic-Types/Finite-Natural-Numbers/"}], "Fin.shiftLeft": [{"id": "Fin___shiftLeft", "data": null, "address": "/Basic-Types/Finite-Natural-Numbers/"}], "Fin.reverseInduction": [{"id": "Fin___reverseInduction", "data": null, "address": "/Basic-Types/Finite-Natural-Numbers/"}], "Fin.rev": [{"id": "Fin___rev", "data": null, "address": "/Basic-Types/Finite-Natural-Numbers/"}], "Fin.pred": [{"id": "Fin___pred", "data": null, "address": "/Basic-Types/Finite-Natural-Numbers/"}], "Fin.ofNat": [{"id": "Fin___ofNat", "data": null, "address": "/Basic-Types/Finite-Natural-Numbers/"}], "Fin.natAdd": [{"id": "Fin___natAdd", "data": null, "address": "/Basic-Types/Finite-Natural-Numbers/"}], "Fin.mul": [{"id": "Fin___mul", "data": null, "address": "/Basic-Types/Finite-Natural-Numbers/"}], "Fin.modn": [{"id": "Fin___modn", "data": null, "address": "/Basic-Types/Finite-Natural-Numbers/"}], "Fin.mod": [{"id": "Fin___mod", "data": null, "address": "/Basic-Types/Finite-Natural-Numbers/"}], "Fin.mk": [{"id": "Fin___mk", "data": null, "address": "/Basic-Types/Finite-Natural-Numbers/"}], "Fin.lor": [{"id": "Fin___lor", "data": null, "address": "/Basic-Types/Finite-Natural-Numbers/"}], "Fin.log2": [{"id": "Fin___log2", "data": null, "address": "/Basic-Types/Finite-Natural-Numbers/"}], "Fin.lastCases": [{"id": "Fin___lastCases", "data": null, "address": "/Basic-Types/Finite-Natural-Numbers/"}], "Fin.last": [{"id": "Fin___last", "data": null, "address": "/Basic-Types/Finite-Natural-Numbers/"}], "Fin.land": [{"id": "Fin___land", "data": null, "address": "/Basic-Types/Finite-Natural-Numbers/"}], "Fin.isLt": [{"id": "Fin___mk", "data": null, "address": "/Basic-Types/Finite-Natural-Numbers/"}], "Fin.inductionOn": [{"id": "Fin___inductionOn", "data": null, "address": "/Basic-Types/Finite-Natural-Numbers/"}], "Fin.induction": [{"id": "Fin___induction", "data": null, "address": "/Basic-Types/Finite-Natural-Numbers/"}], "Fin.hIterateFrom": [{"id": "Fin___hIterateFrom", "data": null, "address": "/Basic-Types/Finite-Natural-Numbers/"}], "Fin.hIterate": [{"id": "Fin___hIterate", "data": null, "address": "/Basic-Types/Finite-Natural-Numbers/"}], "Fin.foldrM": [{"id": "Fin___foldrM", "data": null, "address": "/Basic-Types/Finite-Natural-Numbers/"}], "Fin.foldr": [{"id": "Fin___foldr", "data": null, "address": "/Basic-Types/Finite-Natural-Numbers/"}], "Fin.foldlM": [{"id": "Fin___foldlM", "data": null, "address": "/Basic-Types/Finite-Natural-Numbers/"}], "Fin.foldl": [{"id": "Fin___foldl", "data": null, "address": "/Basic-Types/Finite-Natural-Numbers/"}], "Fin.elim0": [{"id": "Fin___elim0", "data": null, "address": "/Basic-Types/Finite-Natural-Numbers/"}], "Fin.div": [{"id": "Fin___div", "data": null, "address": "/Basic-Types/Finite-Natural-Numbers/"}], "Fin.castSucc": [{"id": "Fin___castSucc", "data": null, "address": "/Basic-Types/Finite-Natural-Numbers/"}], "Fin.castLT": [{"id": "Fin___castLT", "data": null, "address": "/Basic-Types/Finite-Natural-Numbers/"}], "Fin.castLE": [{"id": "Fin___castLE", "data": null, "address": "/Basic-Types/Finite-Natural-Numbers/"}], "Fin.castAdd": [{"id": "Fin___castAdd", "data": null, "address": "/Basic-Types/Finite-Natural-Numbers/"}], "Fin.cast": [{"id": "Fin___cast", "data": null, "address": "/Basic-Types/Finite-Natural-Numbers/"}], "Fin.cases": [{"id": "Fin___cases", "data": null, "address": "/Basic-Types/Finite-Natural-Numbers/"}], "Fin.addNat": [{"id": "Fin___addNat", "data": null, "address": "/Basic-Types/Finite-Natural-Numbers/"}], "Fin.addCases": [{"id": "Fin___addCases", "data": null, "address": "/Basic-Types/Finite-Natural-Numbers/"}], "Fin.add": [{"id": "Fin___add", "data": null, "address": "/Basic-Types/Finite-Natural-Numbers/"}], "Fin": [{"id": "Fin___mk", "data": null, "address": "/Basic-Types/Finite-Natural-Numbers/"}], "False.elim": [{"id": "False___elim", "data": null, "address": "/Basic-Propositions/Truth/"}], "False": [{"id": "False", "data": null, "address": "/Basic-Propositions/Truth/"}], "Exists.intro": [{"id": "Exists___intro", "data": null, "address": "/Basic-Propositions/Quantifiers/"}], "Exists.choose": [{"id": "Exists___choose", "data": null, "address": "/Basic-Propositions/Quantifiers/"}], "Exists": [{"id": "Exists___intro", "data": null, "address": "/Basic-Propositions/Quantifiers/"}], "ExceptT.tryCatch": [{"id": "ExceptT___tryCatch", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "ExceptT.run": [{"id": "ExceptT___run", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "ExceptT.pure": [{"id": "ExceptT___pure", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "ExceptT.mk": [{"id": "ExceptT___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "ExceptT.map": [{"id": "ExceptT___map", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "ExceptT.lift": [{"id": "ExceptT___lift", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "ExceptT.bindCont": [{"id": "ExceptT___bindCont", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "ExceptT.bind": [{"id": "ExceptT___bind", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "ExceptT.adapt": [{"id": "ExceptT___adapt", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "ExceptT": [{"id": "ExceptT", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "ExceptCpsT.runK": [{"id": "ExceptCpsT___runK", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "ExceptCpsT.runCatch": [{"id": "ExceptCpsT___runCatch", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "ExceptCpsT.run": [{"id": "ExceptCpsT___run", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "ExceptCpsT.lift": [{"id": "ExceptCpsT___lift", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "ExceptCpsT": [{"id": "ExceptCpsT", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "Except.tryCatch": [{"id": "Except___tryCatch", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "Except.toOption": [{"id": "Except___toOption", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "Except.toBool": [{"id": "Except___toBool", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "Except.pure": [{"id": "Except___pure", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "Except.orElseLazy": [{"id": "Except___orElseLazy", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "Except.ok": [{"id": "Except___error", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "Except.mapError": [{"id": "Except___mapError", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "Except.map": [{"id": "Except___map", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "Except.isOk": [{"id": "Except___isOk", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "Except.error": [{"id": "Except___error", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "Except.bind": [{"id": "Except___bind", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "Except": [{"id": "Except___error", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "Even.zero": [{"id": "Even___zero-next", "data": null, "address": "/Introduction/"}], "Even.plusTwo": [{"id": "Even___zero-next", "data": null, "address": "/Introduction/"}], "Even": [{"id": "Even___zero-next", "data": null, "address": "/Introduction/"}], "Equivalence.trans": [{"id": "Equivalence___mk", "data": null, "address": "/The-Type-System/Quotients/"}], "Equivalence.symm": [{"id": "Equivalence___mk", "data": null, "address": "/The-Type-System/Quotients/"}], "Equivalence.refl": [{"id": "Equivalence___mk", "data": null, "address": "/The-Type-System/Quotients/"}], "Equivalence.mk": [{"id": "Equivalence___mk", "data": null, "address": "/The-Type-System/Quotients/"}], "Equivalence": [{"id": "Equivalence___mk", "data": null, "address": "/The-Type-System/Quotients/"}], "EquivBEq.toPartialEquivBEq": [{"id": "EquivBEq___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "EquivBEq.mk": [{"id": "EquivBEq___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "EquivBEq": [{"id": "EquivBEq___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "Eq.trans": [{"id": "Eq___trans", "data": null, "address": "/Basic-Propositions/Propositional-Equality/"}], "Eq.symm": [{"id": "Eq___symm", "data": null, "address": "/Basic-Propositions/Propositional-Equality/"}], "Eq.subst": [{"id": "Eq___subst", "data": null, "address": "/Basic-Propositions/Propositional-Equality/"}], "Eq.refl": [{"id": "Eq___refl", "data": null, "address": "/Basic-Propositions/Propositional-Equality/"}], "Eq.mpr": [{"id": "Eq___mpr", "data": null, "address": "/Basic-Propositions/Propositional-Equality/"}], "Eq.mp": [{"id": "Eq___mp", "data": null, "address": "/Basic-Propositions/Propositional-Equality/"}], "Eq": [{"id": "Eq___refl", "data": null, "address": "/Basic-Propositions/Propositional-Equality/"}], "Empty.elim": [{"id": "Empty___elim", "data": null, "address": "/Basic-Types/The-Empty-Type/"}], "Empty": [{"id": "Empty", "data": null, "address": "/Basic-Types/The-Empty-Type/"}], "EStateM.tryCatch": [{"id": "EStateM___tryCatch", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "EStateM.throw": [{"id": "EStateM___throw", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "EStateM.set": [{"id": "EStateM___set", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "EStateM.seqRight": [{"id": "EStateM___seqRight", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "EStateM.run'": [{"id": "EStateM___run___", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "EStateM.run": [{"id": "EStateM___run", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "EStateM.pure": [{"id": "EStateM___pure", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "EStateM.orElse'": [{"id": "EStateM___orElse___", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "EStateM.orElse": [{"id": "EStateM___orElse", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "EStateM.nonBacktrackable": [{"id": "EStateM___nonBacktrackable", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "EStateM.modifyGet": [{"id": "EStateM___modifyGet", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "EStateM.map": [{"id": "EStateM___map", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "EStateM.get": [{"id": "EStateM___get", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "EStateM.fromStateM": [{"id": "EStateM___fromStateM", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "EStateM.bind": [{"id": "EStateM___bind", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "EStateM.adaptExcept": [{"id": "EStateM___adaptExcept", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "EStateM.Result.ok": [{"id": "EStateM___Result___ok", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "EStateM.Result.error": [{"id": "EStateM___Result___ok", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "EStateM.Result": [{"id": "EStateM___Result___ok", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "EStateM.Backtrackable.save": [{"id": "EStateM___Backtrackable___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "EStateM.Backtrackable.restore": [{"id": "EStateM___Backtrackable___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "EStateM.Backtrackable.mk": [{"id": "EStateM___Backtrackable___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "EStateM.Backtrackable": [{"id": "EStateM___Backtrackable___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "EStateM": [{"id": "EStateM", "data": null, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "EST": [{"id": "EST", "data": null, "address": "/IO/Mutable-References/"}], "EIO.toIO'": [{"id": "EIO___toIO___", "data": null, "address": "/IO/Logical-Model/"}], "EIO.toIO": [{"id": "EIO___toIO", "data": null, "address": "/IO/Logical-Model/"}], "EIO.toBaseIO": [{"id": "EIO___toBaseIO", "data": null, "address": "/IO/Logical-Model/"}], "EIO.mapTasks": [{"id": "EIO___mapTasks", "data": null, "address": "/IO/Tasks-and-Threads/"}], "EIO.mapTask": [{"id": "EIO___mapTask", "data": null, "address": "/IO/Tasks-and-Threads/"}], "EIO.chainTask": [{"id": "EIO___chainTask", "data": null, "address": "/IO/Tasks-and-Threads/"}], "EIO.catchExceptions": [{"id": "EIO___catchExceptions", "data": null, "address": "/IO/Logical-Model/"}], "EIO.bindTask": [{"id": "EIO___bindTask", "data": null, "address": "/IO/Tasks-and-Threads/"}], "EIO.asTask": [{"id": "EIO___asTask", "data": null, "address": "/IO/Tasks-and-Threads/"}], "EIO": [{"id": "EIO", "data": null, "address": "/IO/Logical-Model/"}], "Dvd.mk": [{"id": "Dvd___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "Dvd.dvd": [{"id": "Dvd___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "Dvd": [{"id": "Dvd___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "Div.mk": [{"id": "Div___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "Div.div": [{"id": "Div___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "Div": [{"id": "Div___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "DecidableRel": [{"id": "DecidableRel", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "DecidablePred": [{"id": "DecidablePred", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "DecidableLT": [{"id": "DecidableLT", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "DecidableLE": [{"id": "DecidableLE", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "DecidableEq": [{"id": "DecidableEq", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "Decidable.isTrue": [{"id": "Decidable___isFalse", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "Decidable.isFalse": [{"id": "Decidable___isFalse", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "Decidable.decide": [{"id": "Decidable___decide", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "Decidable.byCases": [{"id": "Decidable___byCases", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "Decidable": [{"id": "Decidable___isFalse", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "CoeTail.mk": [{"id": "CoeTail___mk", "data": null, "address": "/Coercions/Coercing-Between-Types/"}], "CoeTail.coe": [{"id": "CoeTail___mk", "data": null, "address": "/Coercions/Coercing-Between-Types/"}], "CoeTail": [{"id": "CoeTail___mk", "data": null, "address": "/Coercions/Coercing-Between-Types/"}], "CoeTC.mk": [{"id": "CoeTC___mk", "data": null, "address": "/Coercions/Implementation-Details/"}], "CoeTC.coe": [{"id": "CoeTC___mk", "data": null, "address": "/Coercions/Implementation-Details/"}], "CoeTC": [{"id": "CoeTC___mk", "data": null, "address": "/Coercions/Implementation-Details/"}], "CoeT.mk": [{"id": "CoeT___mk", "data": null, "address": "/Coercions/Coercing-Between-Types/"}], "CoeT.coe": [{"id": "CoeT___mk", "data": null, "address": "/Coercions/Coercing-Between-Types/"}], "CoeT": [{"id": "CoeT___mk", "data": null, "address": "/Coercions/Coercing-Between-Types/"}], "CoeSort.mk": [{"id": "CoeSort___mk", "data": null, "address": "/Coercions/Coercing-to-Sorts/"}], "CoeSort.coe": [{"id": "CoeSort___mk", "data": null, "address": "/Coercions/Coercing-to-Sorts/"}], "CoeSort": [{"id": "CoeSort___mk", "data": null, "address": "/Coercions/Coercing-to-Sorts/"}], "CoeOut.mk": [{"id": "CoeOut___mk", "data": null, "address": "/Coercions/Coercing-Between-Types/"}], "CoeOut.coe": [{"id": "CoeOut___mk", "data": null, "address": "/Coercions/Coercing-Between-Types/"}], "CoeOut": [{"id": "CoeOut___mk", "data": null, "address": "/Coercions/Coercing-Between-Types/"}], "CoeOTC.mk": [{"id": "CoeOTC___mk", "data": null, "address": "/Coercions/Implementation-Details/"}], "CoeOTC.coe": [{"id": "CoeOTC___mk", "data": null, "address": "/Coercions/Implementation-Details/"}], "CoeOTC": [{"id": "CoeOTC___mk", "data": null, "address": "/Coercions/Implementation-Details/"}], "CoeHead.mk": [{"id": "CoeHead___mk", "data": null, "address": "/Coercions/Coercing-Between-Types/"}], "CoeHead.coe": [{"id": "CoeHead___mk", "data": null, "address": "/Coercions/Coercing-Between-Types/"}], "CoeHead": [{"id": "CoeHead___mk", "data": null, "address": "/Coercions/Coercing-Between-Types/"}], "CoeHTCT.mk": [{"id": "CoeHTCT___mk", "data": null, "address": "/Coercions/Implementation-Details/"}], "CoeHTCT.coe": [{"id": "CoeHTCT___mk", "data": null, "address": "/Coercions/Implementation-Details/"}], "CoeHTCT": [{"id": "CoeHTCT___mk", "data": null, "address": "/Coercions/Implementation-Details/"}], "CoeHTC.mk": [{"id": "CoeHTC___mk", "data": null, "address": "/Coercions/Implementation-Details/"}], "CoeHTC.coe": [{"id": "CoeHTC___mk", "data": null, "address": "/Coercions/Implementation-Details/"}], "CoeHTC": [{"id": "CoeHTC___mk", "data": null, "address": "/Coercions/Implementation-Details/"}], "CoeFun.mk": [{"id": "CoeFun___mk", "data": null, "address": "/Coercions/Coercing-to-Function-Types/"}], "CoeFun.coe": [{"id": "CoeFun___mk", "data": null, "address": "/Coercions/Coercing-to-Function-Types/"}], "CoeFun": [{"id": "CoeFun___mk", "data": null, "address": "/Coercions/Coercing-to-Function-Types/"}], "CoeDep.mk": [{"id": "CoeDep___mk", "data": null, "address": "/Coercions/Coercing-Between-Types/"}], "CoeDep.coe": [{"id": "CoeDep___mk", "data": null, "address": "/Coercions/Coercing-Between-Types/"}], "CoeDep": [{"id": "CoeDep___mk", "data": null, "address": "/Coercions/Coercing-Between-Types/"}], "Coe.mk": [{"id": "Coe___mk", "data": null, "address": "/Coercions/"}], "Coe.coe": [{"id": "Coe___mk", "data": null, "address": "/Coercions/"}], "Coe": [{"id": "Coe___mk", "data": null, "address": "/Coercions/"}], "Char.valid": [{"id": "Char___mk", "data": null, "address": "/Basic-Types/Characters/"}], "Char.val": [{"id": "Char___mk", "data": null, "address": "/Basic-Types/Characters/"}], "Char.utf8Size": [{"id": "Char___utf8Size", "data": null, "address": "/Basic-Types/Characters/"}], "Char.utf16Size": [{"id": "Char___utf16Size", "data": null, "address": "/Basic-Types/Characters/"}], "Char.toUpper": [{"id": "Char___toUpper", "data": null, "address": "/Basic-Types/Characters/"}], "Char.toUInt8": [{"id": "Char___toUInt8", "data": null, "address": "/Basic-Types/Characters/"}], "Char.toString": [{"id": "Char___toString", "data": null, "address": "/Basic-Types/Characters/"}], "Char.toNat": [{"id": "Char___toNat", "data": null, "address": "/Basic-Types/Characters/"}], "Char.toLower": [{"id": "Char___toLower", "data": null, "address": "/Basic-Types/Characters/"}], "Char.quote": [{"id": "Char___quote", "data": null, "address": "/Basic-Types/Characters/"}], "Char.ofUInt8": [{"id": "Char___ofUInt8", "data": null, "address": "/Basic-Types/Characters/"}], "Char.ofNat": [{"id": "Char___ofNat", "data": null, "address": "/Basic-Types/Characters/"}], "Char.mk": [{"id": "Char___mk", "data": null, "address": "/Basic-Types/Characters/"}], "Char.lt": [{"id": "Char___lt", "data": null, "address": "/Basic-Types/Characters/"}], "Char.le": [{"id": "Char___le", "data": null, "address": "/Basic-Types/Characters/"}], "Char.isWhitespace": [{"id": "Char___isWhitespace", "data": null, "address": "/Basic-Types/Characters/"}], "Char.isValidCharNat": [{"id": "Char___isValidCharNat", "data": null, "address": "/Basic-Types/Characters/"}], "Char.isUpper": [{"id": "Char___isUpper", "data": null, "address": "/Basic-Types/Characters/"}], "Char.isLower": [{"id": "Char___isLower", "data": null, "address": "/Basic-Types/Characters/"}], "Char.isDigit": [{"id": "Char___isDigit", "data": null, "address": "/Basic-Types/Characters/"}], "Char.isAlphanum": [{"id": "Char___isAlphanum", "data": null, "address": "/Basic-Types/Characters/"}], "Char.isAlpha": [{"id": "Char___isAlpha", "data": null, "address": "/Basic-Types/Characters/"}], "Char": [{"id": "Char___mk", "data": null, "address": "/Basic-Types/Characters/"}], "ByteSlice.toByteArray": [{"id": "ByteSlice___toByteArray", "data": null, "address": "/Basic-Types/Byte-Arrays/"}], "ByteSlice.stop": [{"id": "ByteSlice___stop", "data": null, "address": "/Basic-Types/Byte-Arrays/"}], "ByteSlice.start": [{"id": "ByteSlice___start", "data": null, "address": "/Basic-Types/Byte-Arrays/"}], "ByteSlice.slice": [{"id": "ByteSlice___slice", "data": null, "address": "/Basic-Types/Byte-Arrays/"}], "ByteSlice.size": [{"id": "ByteSlice___size", "data": null, "address": "/Basic-Types/Byte-Arrays/"}], "ByteSlice.ofByteArray": [{"id": "ByteSlice___ofByteArray", "data": null, "address": "/Basic-Types/Byte-Arrays/"}], "ByteSlice.getD": [{"id": "ByteSlice___getD", "data": null, "address": "/Basic-Types/Byte-Arrays/"}], "ByteSlice.get!": [{"id": "ByteSlice___get___", "data": null, "address": "/Basic-Types/Byte-Arrays/"}], "ByteSlice.get": [{"id": "ByteSlice___get", "data": null, "address": "/Basic-Types/Byte-Arrays/"}], "ByteSlice.forM": [{"id": "ByteSlice___forM", "data": null, "address": "/Basic-Types/Byte-Arrays/"}], "ByteSlice.foldrM": [{"id": "ByteSlice___foldrM", "data": null, "address": "/Basic-Types/Byte-Arrays/"}], "ByteSlice.foldr": [{"id": "ByteSlice___foldr", "data": null, "address": "/Basic-Types/Byte-Arrays/"}], "ByteSlice.empty": [{"id": "ByteSlice___empty", "data": null, "address": "/Basic-Types/Byte-Arrays/"}], "ByteSlice.contains": [{"id": "ByteSlice___contains", "data": null, "address": "/Basic-Types/Byte-Arrays/"}], "ByteSlice.byteArray": [{"id": "ByteSlice___byteArray", "data": null, "address": "/Basic-Types/Byte-Arrays/"}], "ByteSlice.beq": [{"id": "ByteSlice___beq", "data": null, "address": "/Basic-Types/Byte-Arrays/"}], "ByteSlice": [{"id": "ByteSlice", "data": null, "address": "/Basic-Types/Byte-Arrays/"}], "ByteArray.utf8DecodeChar?": [{"id": "ByteArray___utf8DecodeChar___", "data": null, "address": "/Basic-Types/Byte-Arrays/"}], "ByteArray.utf8DecodeChar": [{"id": "ByteArray___utf8DecodeChar", "data": null, "address": "/Basic-Types/Byte-Arrays/"}], "ByteArray.utf8Decode?": [{"id": "ByteArray___utf8Decode___", "data": null, "address": "/Basic-Types/Byte-Arrays/"}], "ByteArray.usize": [{"id": "ByteArray___usize", "data": null, "address": "/Basic-Types/Byte-Arrays/"}], "ByteArray.uset": [{"id": "ByteArray___uset", "data": null, "address": "/Basic-Types/Byte-Arrays/"}], "ByteArray.uget": [{"id": "ByteArray___uget", "data": null, "address": "/Basic-Types/Byte-Arrays/"}], "ByteArray.toUInt64LE!": [{"id": "ByteArray___toUInt64LE___", "data": null, "address": "/Basic-Types/Byte-Arrays/"}], "ByteArray.toUInt64BE!": [{"id": "ByteArray___toUInt64BE___", "data": null, "address": "/Basic-Types/Byte-Arrays/"}], "ByteArray.toList": [{"id": "ByteArray___toList", "data": null, "address": "/Basic-Types/Byte-Arrays/"}], "ByteArray.toByteSlice": [{"id": "ByteArray___toByteSlice", "data": null, "address": "/Basic-Types/Byte-Arrays/"}], "ByteArray.size": [{"id": "ByteArray___size", "data": null, "address": "/Basic-Types/Byte-Arrays/"}], "ByteArray.set!": [{"id": "ByteArray___set___", "data": null, "address": "/Basic-Types/Byte-Arrays/"}], "ByteArray.set": [{"id": "ByteArray___set", "data": null, "address": "/Basic-Types/Byte-Arrays/"}], "ByteArray.push": [{"id": "ByteArray___push", "data": null, "address": "/Basic-Types/Byte-Arrays/"}], "ByteArray.mk": [{"id": "ByteArray___mk", "data": null, "address": "/Basic-Types/Byte-Arrays/"}], "ByteArray.iter": [{"id": "ByteArray___iter", "data": null, "address": "/Basic-Types/Byte-Arrays/"}], "ByteArray.isEmpty": [{"id": "ByteArray___isEmpty", "data": null, "address": "/Basic-Types/Byte-Arrays/"}], "ByteArray.get!": [{"id": "ByteArray___get___", "data": null, "address": "/Basic-Types/Byte-Arrays/"}], "ByteArray.get": [{"id": "ByteArray___get", "data": null, "address": "/Basic-Types/Byte-Arrays/"}], "ByteArray.forIn": [{"id": "ByteArray___forIn", "data": null, "address": "/Basic-Types/Byte-Arrays/"}], "ByteArray.foldlM": [{"id": "ByteArray___foldlM", "data": null, "address": "/Basic-Types/Byte-Arrays/"}], "ByteArray.foldl": [{"id": "ByteArray___foldl", "data": null, "address": "/Basic-Types/Byte-Arrays/"}], "ByteArray.findIdx?": [{"id": "ByteArray___findIdx___", "data": null, "address": "/Basic-Types/Byte-Arrays/"}], "ByteArray.findFinIdx?": [{"id": "ByteArray___findFinIdx___", "data": null, "address": "/Basic-Types/Byte-Arrays/"}], "ByteArray.fastAppend": [{"id": "ByteArray___fastAppend", "data": null, "address": "/Basic-Types/Byte-Arrays/"}], "ByteArray.extract": [{"id": "ByteArray___extract", "data": null, "address": "/Basic-Types/Byte-Arrays/"}], "ByteArray.emptyWithCapacity": [{"id": "ByteArray___emptyWithCapacity", "data": null, "address": "/Basic-Types/Byte-Arrays/"}], "ByteArray.empty": [{"id": "ByteArray___empty", "data": null, "address": "/Basic-Types/Byte-Arrays/"}], "ByteArray.data": [{"id": "ByteArray___mk", "data": null, "address": "/Basic-Types/Byte-Arrays/"}], "ByteArray.copySlice": [{"id": "ByteArray___copySlice", "data": null, "address": "/Basic-Types/Byte-Arrays/"}], "ByteArray.append": [{"id": "ByteArray___append", "data": null, "address": "/Basic-Types/Byte-Arrays/"}], "ByteArray.Iterator.toEnd": [{"id": "ByteArray___Iterator___toEnd", "data": null, "address": "/Basic-Types/Byte-Arrays/"}], "ByteArray.Iterator.remainingBytes": [{"id": "ByteArray___Iterator___remainingBytes", "data": null, "address": "/Basic-Types/Byte-Arrays/"}], "ByteArray.Iterator.prevn": [{"id": "ByteArray___Iterator___prevn", "data": null, "address": "/Basic-Types/Byte-Arrays/"}], "ByteArray.Iterator.prev": [{"id": "ByteArray___Iterator___prev", "data": null, "address": "/Basic-Types/Byte-Arrays/"}], "ByteArray.Iterator.pos": [{"id": "ByteArray___Iterator___pos", "data": null, "address": "/Basic-Types/Byte-Arrays/"}], "ByteArray.Iterator.nextn": [{"id": "ByteArray___Iterator___nextn", "data": null, "address": "/Basic-Types/Byte-Arrays/"}], "ByteArray.Iterator.next'": [{"id": "ByteArray___Iterator___next___", "data": null, "address": "/Basic-Types/Byte-Arrays/"}], "ByteArray.Iterator.next": [{"id": "ByteArray___Iterator___next", "data": null, "address": "/Basic-Types/Byte-Arrays/"}], "ByteArray.Iterator.mk": [{"id": "ByteArray___Iterator___mk", "data": null, "address": "/Basic-Types/Byte-Arrays/"}], "ByteArray.Iterator.idx": [{"id": "ByteArray___Iterator___mk", "data": null, "address": "/Basic-Types/Byte-Arrays/"}], "ByteArray.Iterator.hasPrev": [{"id": "ByteArray___Iterator___hasPrev", "data": null, "address": "/Basic-Types/Byte-Arrays/"}], "ByteArray.Iterator.hasNext": [{"id": "ByteArray___Iterator___hasNext", "data": null, "address": "/Basic-Types/Byte-Arrays/"}], "ByteArray.Iterator.forward": [{"id": "ByteArray___Iterator___forward", "data": null, "address": "/Basic-Types/Byte-Arrays/"}], "ByteArray.Iterator.curr'": [{"id": "ByteArray___Iterator___curr___", "data": null, "address": "/Basic-Types/Byte-Arrays/"}], "ByteArray.Iterator.curr": [{"id": "ByteArray___Iterator___curr", "data": null, "address": "/Basic-Types/Byte-Arrays/"}], "ByteArray.Iterator.atEnd": [{"id": "ByteArray___Iterator___atEnd", "data": null, "address": "/Basic-Types/Byte-Arrays/"}], "ByteArray.Iterator.array": [{"id": "ByteArray___Iterator___mk", "data": null, "address": "/Basic-Types/Byte-Arrays/"}], "ByteArray.Iterator": [{"id": "ByteArray___Iterator___mk", "data": null, "address": "/Basic-Types/Byte-Arrays/"}], "ByteArray": [{"id": "ByteArray___mk", "data": null, "address": "/Basic-Types/Byte-Arrays/"}], "Bool.xor": [{"id": "Bool___xor", "data": null, "address": "/Basic-Types/Booleans/"}], "Bool.true": [{"id": "Bool___false", "data": null, "address": "/Basic-Types/Booleans/"}], "Bool.toUSize": [{"id": "Bool___toUSize", "data": null, "address": "/Basic-Types/Booleans/"}], "Bool.toUInt8": [{"id": "Bool___toUInt8", "data": null, "address": "/Basic-Types/Booleans/"}], "Bool.toUInt64": [{"id": "Bool___toUInt64", "data": null, "address": "/Basic-Types/Booleans/"}], "Bool.toUInt32": [{"id": "Bool___toUInt32", "data": null, "address": "/Basic-Types/Booleans/"}], "Bool.toUInt16": [{"id": "Bool___toUInt16", "data": null, "address": "/Basic-Types/Booleans/"}], "Bool.toNat": [{"id": "Bool___toNat", "data": null, "address": "/Basic-Types/Booleans/"}], "Bool.toInt8": [{"id": "Bool___toInt8", "data": null, "address": "/Basic-Types/Booleans/"}], "Bool.toInt64": [{"id": "Bool___toInt64", "data": null, "address": "/Basic-Types/Booleans/"}], "Bool.toInt32": [{"id": "Bool___toInt32", "data": null, "address": "/Basic-Types/Booleans/"}], "Bool.toInt16": [{"id": "Bool___toInt16", "data": null, "address": "/Basic-Types/Booleans/"}], "Bool.toInt": [{"id": "Bool___toInt", "data": null, "address": "/Basic-Types/Booleans/"}], "Bool.toISize": [{"id": "Bool___toISize", "data": null, "address": "/Basic-Types/Booleans/"}], "Bool.or": [{"id": "Bool___or", "data": null, "address": "/Basic-Types/Booleans/"}], "Bool.not": [{"id": "Bool___not", "data": null, "address": "/Basic-Types/Booleans/"}], "Bool.false": [{"id": "Bool___false", "data": null, "address": "/Basic-Types/Booleans/"}], "Bool.decEq": [{"id": "Bool___decEq", "data": null, "address": "/Basic-Types/Booleans/"}], "Bool.dcond": [{"id": "Bool___dcond", "data": null, "address": "/Basic-Types/Booleans/"}], "Bool.and": [{"id": "Bool___and", "data": null, "address": "/Basic-Types/Booleans/"}], "Bool": [{"id": "Bool___false", "data": null, "address": "/Basic-Types/Booleans/"}], "BitVec.zeroExtend": [{"id": "BitVec___zeroExtend", "data": null, "address": "/Basic-Types/Bitvectors/"}], "BitVec.zero": [{"id": "BitVec___zero", "data": null, "address": "/Basic-Types/Bitvectors/"}], "BitVec.xor": [{"id": "BitVec___xor", "data": null, "address": "/Basic-Types/Bitvectors/"}], "BitVec.usubOverflow": [{"id": "BitVec___usubOverflow", "data": null, "address": "/Basic-Types/Bitvectors/"}], "BitVec.ushiftRightRec": [{"id": "BitVec___ushiftRightRec", "data": null, "address": "/Basic-Types/Bitvectors/"}], "BitVec.ushiftRight": [{"id": "BitVec___ushiftRight", "data": null, "address": "/Basic-Types/Bitvectors/"}], "BitVec.umod": [{"id": "BitVec___umod", "data": null, "address": "/Basic-Types/Bitvectors/"}], "BitVec.ult": [{"id": "BitVec___ult", "data": null, "address": "/Basic-Types/Bitvectors/"}], "BitVec.ule": [{"id": "BitVec___ule", "data": null, "address": "/Basic-Types/Bitvectors/"}], "BitVec.udiv": [{"id": "BitVec___udiv", "data": null, "address": "/Basic-Types/Bitvectors/"}], "BitVec.uaddOverflow": [{"id": "BitVec___uaddOverflow", "data": null, "address": "/Basic-Types/Bitvectors/"}], "BitVec.twoPow": [{"id": "BitVec___twoPow", "data": null, "address": "/Basic-Types/Bitvectors/"}], "BitVec.truncate": [{"id": "BitVec___truncate", "data": null, "address": "/Basic-Types/Bitvectors/"}], "BitVec.toNat": [{"id": "BitVec___toNat", "data": null, "address": "/Basic-Types/Bitvectors/"}], "BitVec.toInt": [{"id": "BitVec___toInt", "data": null, "address": "/Basic-Types/Bitvectors/"}], "BitVec.toHex": [{"id": "BitVec___toHex", "data": null, "address": "/Basic-Types/Bitvectors/"}], "BitVec.toFin": [{"id": "BitVec___ofFin", "data": null, "address": "/Basic-Types/Bitvectors/"}], "BitVec.sub": [{"id": "BitVec___sub", "data": null, "address": "/Basic-Types/Bitvectors/"}], "BitVec.ssubOverflow": [{"id": "BitVec___ssubOverflow", "data": null, "address": "/Basic-Types/Bitvectors/"}], "BitVec.sshiftRightRec": [{"id": "BitVec___sshiftRightRec", "data": null, "address": "/Basic-Types/Bitvectors/"}], "BitVec.sshiftRight'": [{"id": "BitVec___sshiftRight___", "data": null, "address": "/Basic-Types/Bitvectors/"}], "BitVec.sshiftRight": [{"id": "BitVec___sshiftRight", "data": null, "address": "/Basic-Types/Bitvectors/"}], "BitVec.srem": [{"id": "BitVec___srem", "data": null, "address": "/Basic-Types/Bitvectors/"}], "BitVec.smtUDiv": [{"id": "BitVec___smtUDiv", "data": null, "address": "/Basic-Types/Bitvectors/"}], "BitVec.smtSDiv": [{"id": "BitVec___smtSDiv", "data": null, "address": "/Basic-Types/Bitvectors/"}], "BitVec.smod": [{"id": "BitVec___smod", "data": null, "address": "/Basic-Types/Bitvectors/"}], "BitVec.slt": [{"id": "BitVec___slt", "data": null, "address": "/Basic-Types/Bitvectors/"}], "BitVec.sle": [{"id": "BitVec___sle", "data": null, "address": "/Basic-Types/Bitvectors/"}], "BitVec.signExtend": [{"id": "BitVec___signExtend", "data": null, "address": "/Basic-Types/Bitvectors/"}], "BitVec.shiftLeftZeroExtend": [{"id": "BitVec___shiftLeftZeroExtend", "data": null, "address": "/Basic-Types/Bitvectors/"}], "BitVec.shiftLeftRec": [{"id": "BitVec___shiftLeftRec", "data": null, "address": "/Basic-Types/Bitvectors/"}], "BitVec.shiftLeft": [{"id": "BitVec___shiftLeft", "data": null, "address": "/Basic-Types/Bitvectors/"}], "BitVec.shiftConcat": [{"id": "BitVec___shiftConcat", "data": null, "address": "/Basic-Types/Bitvectors/"}], "BitVec.setWidth'": [{"id": "BitVec___setWidth___", "data": null, "address": "/Basic-Types/Bitvectors/"}], "BitVec.setWidth": [{"id": "BitVec___setWidth", "data": null, "address": "/Basic-Types/Bitvectors/"}], "BitVec.sdiv": [{"id": "BitVec___sdiv", "data": null, "address": "/Basic-Types/Bitvectors/"}], "BitVec.saddOverflow": [{"id": "BitVec___saddOverflow", "data": null, "address": "/Basic-Types/Bitvectors/"}], "BitVec.rotateRight": [{"id": "BitVec___rotateRight", "data": null, "address": "/Basic-Types/Bitvectors/"}], "BitVec.rotateLeft": [{"id": "BitVec___rotateLeft", "data": null, "address": "/Basic-Types/Bitvectors/"}], "BitVec.reverse": [{"id": "BitVec___reverse", "data": null, "address": "/Basic-Types/Bitvectors/"}], "BitVec.replicate": [{"id": "BitVec___replicate", "data": null, "address": "/Basic-Types/Bitvectors/"}], "BitVec.or": [{"id": "BitVec___or", "data": null, "address": "/Basic-Types/Bitvectors/"}], "BitVec.ofNatLT": [{"id": "BitVec___ofNatLT", "data": null, "address": "/Basic-Types/Bitvectors/"}], "BitVec.ofNat": [{"id": "BitVec___ofNat", "data": null, "address": "/Basic-Types/Bitvectors/"}], "BitVec.ofInt": [{"id": "BitVec___ofInt", "data": null, "address": "/Basic-Types/Bitvectors/"}], "BitVec.ofFin": [{"id": "BitVec___ofFin", "data": null, "address": "/Basic-Types/Bitvectors/"}], "BitVec.ofBoolListLE": [{"id": "BitVec___ofBoolListLE", "data": null, "address": "/Basic-Types/Bitvectors/"}], "BitVec.ofBoolListBE": [{"id": "BitVec___ofBoolListBE", "data": null, "address": "/Basic-Types/Bitvectors/"}], "BitVec.ofBool": [{"id": "BitVec___ofBool", "data": null, "address": "/Basic-Types/Bitvectors/"}], "BitVec.not": [{"id": "BitVec___not", "data": null, "address": "/Basic-Types/Bitvectors/"}], "BitVec.nil": [{"id": "BitVec___nil", "data": null, "address": "/Basic-Types/Bitvectors/"}], "BitVec.neg": [{"id": "BitVec___neg", "data": null, "address": "/Basic-Types/Bitvectors/"}], "BitVec.mulRec": [{"id": "BitVec___mulRec", "data": null, "address": "/Basic-Types/Bitvectors/"}], "BitVec.mul": [{"id": "BitVec___mul", "data": null, "address": "/Basic-Types/Bitvectors/"}], "BitVec.msb": [{"id": "BitVec___msb", "data": null, "address": "/Basic-Types/Bitvectors/"}], "BitVec.iunfoldr_replace": [{"id": "BitVec___iunfoldr_replace", "data": null, "address": "/Basic-Types/Bitvectors/"}], "BitVec.iunfoldr": [{"id": "BitVec___iunfoldr", "data": null, "address": "/Basic-Types/Bitvectors/"}], "BitVec.intMin": [{"id": "BitVec___intMin", "data": null, "address": "/Basic-Types/Bitvectors/"}], "BitVec.intMax": [{"id": "BitVec___intMax", "data": null, "address": "/Basic-Types/Bitvectors/"}], "BitVec.hash": [{"id": "BitVec___hash", "data": null, "address": "/Basic-Types/Bitvectors/"}], "BitVec.getMsbD": [{"id": "BitVec___getMsbD", "data": null, "address": "/Basic-Types/Bitvectors/"}], "BitVec.getMsb?": [{"id": "BitVec___getMsb___", "data": null, "address": "/Basic-Types/Bitvectors/"}], "BitVec.getMsb": [{"id": "BitVec___getMsb", "data": null, "address": "/Basic-Types/Bitvectors/"}], "BitVec.getLsbD": [{"id": "BitVec___getLsbD", "data": null, "address": "/Basic-Types/Bitvectors/"}], "BitVec.getLsb?": [{"id": "BitVec___getLsb___", "data": null, "address": "/Basic-Types/Bitvectors/"}], "BitVec.getLsb": [{"id": "BitVec___getLsb", "data": null, "address": "/Basic-Types/Bitvectors/"}], "BitVec.fill": [{"id": "BitVec___fill", "data": null, "address": "/Basic-Types/Bitvectors/"}], "BitVec.extractLsb'": [{"id": "BitVec___extractLsb___", "data": null, "address": "/Basic-Types/Bitvectors/"}], "BitVec.extractLsb": [{"id": "BitVec___extractLsb", "data": null, "address": "/Basic-Types/Bitvectors/"}], "BitVec.divSubtractShift": [{"id": "BitVec___divSubtractShift", "data": null, "address": "/Basic-Types/Bitvectors/"}], "BitVec.divRec": [{"id": "BitVec___divRec", "data": null, "address": "/Basic-Types/Bitvectors/"}], "BitVec.decEq": [{"id": "BitVec___decEq", "data": null, "address": "/Basic-Types/Bitvectors/"}], "BitVec.cons": [{"id": "BitVec___cons", "data": null, "address": "/Basic-Types/Bitvectors/"}], "BitVec.concat": [{"id": "BitVec___concat", "data": null, "address": "/Basic-Types/Bitvectors/"}], "BitVec.cast": [{"id": "BitVec___cast", "data": null, "address": "/Basic-Types/Bitvectors/"}], "BitVec.carry": [{"id": "BitVec___carry", "data": null, "address": "/Basic-Types/Bitvectors/"}], "BitVec.append": [{"id": "BitVec___append", "data": null, "address": "/Basic-Types/Bitvectors/"}], "BitVec.and": [{"id": "BitVec___and", "data": null, "address": "/Basic-Types/Bitvectors/"}], "BitVec.allOnes": [{"id": "BitVec___allOnes", "data": null, "address": "/Basic-Types/Bitvectors/"}], "BitVec.add": [{"id": "BitVec___add", "data": null, "address": "/Basic-Types/Bitvectors/"}], "BitVec.adcb": [{"id": "BitVec___adcb", "data": null, "address": "/Basic-Types/Bitvectors/"}], "BitVec.adc": [{"id": "BitVec___adc", "data": null, "address": "/Basic-Types/Bitvectors/"}], "BitVec.abs": [{"id": "BitVec___abs", "data": null, "address": "/Basic-Types/Bitvectors/"}], "BitVec": [{"id": "BitVec___ofFin", "data": null, "address": "/Basic-Types/Bitvectors/"}], "Bind.mk": [{"id": "Bind___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/"}], "Bind.kleisliRight": [{"id": "Bind___kleisliRight", "data": null, "address": "/Functors___-Monads-and--do--Notation/API-Reference/"}], "Bind.kleisliLeft": [{"id": "Bind___kleisliLeft", "data": null, "address": "/Functors___-Monads-and--do--Notation/API-Reference/"}], "Bind.bindLeft": [{"id": "Bind___bindLeft", "data": null, "address": "/Functors___-Monads-and--do--Notation/API-Reference/"}], "Bind.bind": [{"id": "Bind___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/"}], "Bind": [{"id": "Bind___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/"}], "BaseIO.toIO": [{"id": "BaseIO___toIO", "data": null, "address": "/IO/Logical-Model/"}], "BaseIO.toEIO": [{"id": "BaseIO___toEIO", "data": null, "address": "/IO/Logical-Model/"}], "BaseIO.mapTasks": [{"id": "BaseIO___mapTasks", "data": null, "address": "/IO/Tasks-and-Threads/"}], "BaseIO.mapTask": [{"id": "BaseIO___mapTask", "data": null, "address": "/IO/Tasks-and-Threads/"}], "BaseIO.chainTask": [{"id": "BaseIO___chainTask", "data": null, "address": "/IO/Tasks-and-Threads/"}], "BaseIO.bindTask": [{"id": "BaseIO___bindTask", "data": null, "address": "/IO/Tasks-and-Threads/"}], "BaseIO.asTask": [{"id": "BaseIO___asTask", "data": null, "address": "/IO/Tasks-and-Threads/"}], "BaseIO": [{"id": "BaseIO", "data": null, "address": "/IO/Logical-Model/"}], "BEq.mk": [{"id": "BEq___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "BEq.beq": [{"id": "BEq___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "BEq": [{"id": "BEq___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "Array.zipWithAll": [{"id": "Array___zipWithAll", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.zipWith": [{"id": "Array___zipWith", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.zipIdx": [{"id": "Array___zipIdx", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.zip": [{"id": "Array___zip", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.usize": [{"id": "Array___usize", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.uset": [{"id": "Array___uset", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.unzip": [{"id": "Array___unzip", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.unattach": [{"id": "Array___unattach", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.uget": [{"id": "Array___uget", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.toVector": [{"id": "Array___toVector", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.toSubarray": [{"id": "Array___toSubarray", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.toListRev": [{"id": "Array___toListRev", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.toListAppend": [{"id": "Array___toListAppend", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.toList": [{"id": "Array___toList", "data": null, "address": "/Basic-Types/Arrays/"}, {"id": "Array___mk", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.takeWhile": [{"id": "Array___takeWhile", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.take": [{"id": "Array___take", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.swapIfInBounds": [{"id": "Array___swapIfInBounds", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.swapAt!": [{"id": "Array___swapAt___", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.swapAt": [{"id": "Array___swapAt", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.swap": [{"id": "Array___swap", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.sum": [{"id": "Array___sum", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.size": [{"id": "Array___size", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.singleton": [{"id": "Array___singleton", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.shrink": [{"id": "Array___shrink", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.setIfInBounds": [{"id": "Array___setIfInBounds", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.set!": [{"id": "Array___set___", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.set": [{"id": "Array___set", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.rightpad": [{"id": "Array___rightpad", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.reverse": [{"id": "Array___reverse", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.replicate": [{"id": "Array___replicate", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.replace": [{"id": "Array___replace", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.range'": [{"id": "Array___range___", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.range": [{"id": "Array___range", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.qsortOrd": [{"id": "Array___qsortOrd", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.qsort": [{"id": "Array___qsort", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.push": [{"id": "Array___push", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.popWhile": [{"id": "Array___popWhile", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.pop": [{"id": "Array___pop", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.pmap": [{"id": "Array___pmap", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.partition": [{"id": "Array___partition", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.ofSubarray": [{"id": "Array___ofSubarray", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.ofFn": [{"id": "Array___ofFn", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.modifyOp": [{"id": "Array___modifyOp", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.modifyM": [{"id": "Array___modifyM", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.modify": [{"id": "Array___modify", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.mk": [{"id": "Array___mk", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.mapMonoM": [{"id": "Array___mapMonoM", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.mapMono": [{"id": "Array___mapMono", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.mapM'": [{"id": "Array___mapM___", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.mapM": [{"id": "Array___mapM", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.mapIdxM": [{"id": "Array___mapIdxM", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.mapIdx": [{"id": "Array___mapIdx", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.mapFinIdxM": [{"id": "Array___mapFinIdxM", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.mapFinIdx": [{"id": "Array___mapFinIdx", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.map": [{"id": "Array___map", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.lex": [{"id": "Array___lex", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.leftpad": [{"id": "Array___leftpad", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.iterM": [{"id": "Array___iterM", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.iterFromIdxM": [{"id": "Array___iterFromIdxM", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.iterFromIdx": [{"id": "Array___iterFromIdx", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.iter": [{"id": "Array___iter", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.isPrefixOf": [{"id": "Array___isPrefixOf", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.isEqv": [{"id": "Array___isEqv", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.isEmpty": [{"id": "Array___isEmpty", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.insertionSort": [{"id": "Array___insertionSort", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.insertIdxIfInBounds": [{"id": "Array___insertIdxIfInBounds", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.insertIdx!": [{"id": "Array___insertIdx___", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.insertIdx": [{"id": "Array___insertIdx", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.idxOf?": [{"id": "Array___idxOf___", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.idxOf": [{"id": "Array___idxOf", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.groupByKey": [{"id": "Array___groupByKey", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.getMax?": [{"id": "Array___getMax___", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.getEvenElems": [{"id": "Array___getEvenElems", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.getD": [{"id": "Array___getD", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.forRevM": [{"id": "Array___forRevM", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.forM": [{"id": "Array___forM", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.foldrM": [{"id": "Array___foldrM", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.foldr": [{"id": "Array___foldr", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.foldlM": [{"id": "Array___foldlM", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.foldl": [{"id": "Array___foldl", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.flatten": [{"id": "Array___flatten", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.flatMapM": [{"id": "Array___flatMapM", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.flatMap": [{"id": "Array___flatMap", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.firstM": [{"id": "Array___firstM", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.findSomeRevM?": [{"id": "Array___findSomeRevM___", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.findSomeRev?": [{"id": "Array___findSomeRev___", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.findSomeM?": [{"id": "Array___findSomeM___", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.findSome?": [{"id": "Array___findSome___", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.findSome!": [{"id": "Array___findSome___-next", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.findRevM?": [{"id": "Array___findRevM___", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.findRev?": [{"id": "Array___findRev___", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.findM?": [{"id": "Array___findM___", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.findIdxM?": [{"id": "Array___findIdxM___", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.findIdx?": [{"id": "Array___findIdx___", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.findIdx": [{"id": "Array___findIdx", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.findFinIdx?": [{"id": "Array___findFinIdx___", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.find?": [{"id": "Array___find___", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.finRange": [{"id": "Array___finRange", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.finIdxOf?": [{"id": "Array___finIdxOf___", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.filterSepElemsM": [{"id": "Array___filterSepElemsM", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.filterSepElems": [{"id": "Array___filterSepElems", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.filterRevM": [{"id": "Array___filterRevM", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.filterMapM": [{"id": "Array___filterMapM", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.filterMap": [{"id": "Array___filterMap", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.filterM": [{"id": "Array___filterM", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.filter": [{"id": "Array___filter", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.extract": [{"id": "Array___extract", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.eraseReps": [{"id": "Array___eraseReps", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.eraseP": [{"id": "Array___eraseP", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.eraseIdxIfInBounds": [{"id": "Array___eraseIdxIfInBounds", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.eraseIdx!": [{"id": "Array___eraseIdx___", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.eraseIdx": [{"id": "Array___eraseIdx", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.erase": [{"id": "Array___erase", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.emptyWithCapacity": [{"id": "Array___emptyWithCapacity", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.empty": [{"id": "Array___empty", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.elem": [{"id": "Array___elem", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.drop": [{"id": "Array___drop", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.countP": [{"id": "Array___countP", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.count": [{"id": "Array___count", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.contains": [{"id": "Array___contains", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.binSearchContains": [{"id": "Array___binSearchContains", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.binSearch": [{"id": "Array___binSearch", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.binInsertM": [{"id": "Array___binInsertM", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.binInsert": [{"id": "Array___binInsert", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.back?": [{"id": "Array___back___", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.back!": [{"id": "Array___back___-next", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.back": [{"id": "Array___back", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.attachWith": [{"id": "Array___attachWith", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.attach": [{"id": "Array___attach", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.appendList": [{"id": "Array___appendList", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.append": [{"id": "Array___append", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.anyM": [{"id": "Array___anyM", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.any": [{"id": "Array___any", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.allM": [{"id": "Array___allM", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.allDiff": [{"id": "Array___allDiff", "data": null, "address": "/Basic-Types/Arrays/"}], "Array.all": [{"id": "Array___all", "data": null, "address": "/Basic-Types/Arrays/"}], "Array": [{"id": "Array___mk", "data": null, "address": "/Basic-Types/Arrays/"}], "Applicative.toPure": [{"id": "Applicative___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/"}], "Applicative.toFunctor": [{"id": "Applicative___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/"}], "Applicative.mk": [{"id": "Applicative___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/"}], "Applicative": [{"id": "Applicative___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/"}], "Append.mk": [{"id": "Append___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "Append.append": [{"id": "Append___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "Append": [{"id": "Append___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "AndOp.mk": [{"id": "AndOp___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "AndOp.and": [{"id": "AndOp___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "AndOp": [{"id": "AndOp___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "And.right": [{"id": "And___intro", "data": null, "address": "/Basic-Propositions/Logical-Connectives/"}], "And.left": [{"id": "And___intro", "data": null, "address": "/Basic-Propositions/Logical-Connectives/"}], "And.intro": [{"id": "And___intro", "data": null, "address": "/Basic-Propositions/Logical-Connectives/"}], "And.elim": [{"id": "And___elim", "data": null, "address": "/Basic-Propositions/Logical-Connectives/"}], "And": [{"id": "And___intro", "data": null, "address": "/Basic-Propositions/Logical-Connectives/"}], "Alternative.toApplicative": [{"id": "Alternative___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/"}], "Alternative.mk": [{"id": "Alternative___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/"}], "Alternative": [{"id": "Alternative___mk", "data": null, "address": "/Functors___-Monads-and--do--Notation/"}], "Add.mk": [{"id": "Add___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "Add.add": [{"id": "Add___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "Add": [{"id": "Add___mk", "data": null, "address": "/Type-Classes/Basic-Classes/"}], "Acc.intro": [{"id": "Acc___intro", "data": null, "address": "/Definitions/Recursive-Definitions/"}], "Acc": [{"id": "Acc___intro", "data": null, "address": "/Definitions/Recursive-Definitions/"}]}}, "Manual.parserAlias": {"title": "Parser Alias Documentation", "description": "Parser Alias Documentation", "contents": {"withoutPosition": [{"id": "withoutPosition", "data": null, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "withPositionAfterLinebreak": [{"id": "withPositionAfterLinebreak", "data": null, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "withPosition": [{"id": "withPosition", "data": null, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "lineEq": [{"id": "lineEq", "data": null, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "colGt": [{"id": "colGt", "data": null, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "colGe": [{"id": "colGe", "data": null, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "colEq": [{"id": "colEq", "data": null, "address": "/Notations-and-Macros/Defining-New-Syntax/"}]}}, "Manual.lakeTomlTable": {"title": "Manual.lakeTomlTable", "description": "Manual.lakeTomlTable", "contents": {"Lake.PackageConfig": [{"id": "Lake___PackageConfig", "data": {"type": "Lake.PackageConfig", "description": "Package Configuration", "arrayKey": null}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.LeanLibConfig": [{"id": "Lake___LeanLibConfig", "data": {"type": "Lake.LeanLibConfig", "description": "Library Targets", "arrayKey": "lean_lib"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.LeanExeConfig": [{"id": "Lake___LeanExeConfig", "data": {"type": "Lake.LeanExeConfig", "description": "Executable Targets", "arrayKey": "lean_exe"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.Dependency": [{"id": "Lake___Dependency", "data": {"type": "Lake.Dependency", "description": "Requiring Packages", "arrayKey": "require"}, "address": "/Build-Tools-and-Distribution/Lake/"}]}}, "Manual.lakeTomlField": {"title": "Manual.lakeTomlField", "description": "Manual.lakeTomlField", "contents": {"Lake.PackageConfig weakLinkArgs": [{"id": "Lake___PackageConfig-weakLinkArgs", "data": {"tableArrayKey": null, "table": "Lake.PackageConfig", "field": "weakLinkArgs"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.PackageConfig weakLeancArgs": [{"id": "Lake___PackageConfig-weakLeancArgs", "data": {"tableArrayKey": null, "table": "Lake.PackageConfig", "field": "weakLeancArgs"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.PackageConfig weakLeanArgs": [{"id": "Lake___PackageConfig-weakLeanArgs", "data": {"tableArrayKey": null, "table": "Lake.PackageConfig", "field": "weakLeanArgs"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.PackageConfig versionTags": [{"id": "Lake___PackageConfig-versionTags", "data": {"tableArrayKey": null, "table": "Lake.PackageConfig", "field": "versionTags"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.PackageConfig version": [{"id": "Lake___PackageConfig-version", "data": {"tableArrayKey": null, "table": "Lake.PackageConfig", "field": "version"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.PackageConfig testDriverArgs": [{"id": "Lake___PackageConfig-testDriverArgs", "data": {"tableArrayKey": null, "table": "Lake.PackageConfig", "field": "testDriverArgs"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.PackageConfig testDriver": [{"id": "Lake___PackageConfig-testDriver", "data": {"tableArrayKey": null, "table": "Lake.PackageConfig", "field": "testDriver"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.PackageConfig srcDir": [{"id": "Lake___PackageConfig-srcDir", "data": {"tableArrayKey": null, "table": "Lake.PackageConfig", "field": "srcDir"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.PackageConfig restoreAllArtifacts": [{"id": "Lake___PackageConfig-restoreAllArtifacts", "data": {"tableArrayKey": null, "table": "Lake.PackageConfig", "field": "restoreAllArtifacts"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.PackageConfig reservoir": [{"id": "Lake___PackageConfig-reservoir", "data": {"tableArrayKey": null, "table": "Lake.PackageConfig", "field": "reservoir"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.PackageConfig releaseRepo": [{"id": "Lake___PackageConfig-releaseRepo", "data": {"tableArrayKey": null, "table": "Lake.PackageConfig", "field": "releaseRepo"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.PackageConfig readmeFile": [{"id": "Lake___PackageConfig-readmeFile", "data": {"tableArrayKey": null, "table": "Lake.PackageConfig", "field": "readmeFile"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.PackageConfig preferReleaseBuild": [{"id": "Lake___PackageConfig-preferReleaseBuild", "data": {"tableArrayKey": null, "table": "Lake.PackageConfig", "field": "preferReleaseBuild"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.PackageConfig precompileModules": [{"id": "Lake___PackageConfig-precompileModules", "data": {"tableArrayKey": null, "table": "Lake.PackageConfig", "field": "precompileModules"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.PackageConfig platformIndependent": [{"id": "Lake___PackageConfig-platformIndependent", "data": {"tableArrayKey": null, "table": "Lake.PackageConfig", "field": "platformIndependent"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.PackageConfig packagesDir": [{"id": "Lake___PackageConfig-packagesDir", "data": {"tableArrayKey": null, "table": "Lake.PackageConfig", "field": "packagesDir"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.PackageConfig nativeLibDir": [{"id": "Lake___PackageConfig-nativeLibDir", "data": {"tableArrayKey": null, "table": "Lake.PackageConfig", "field": "nativeLibDir"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.PackageConfig name": [{"id": "Lake___PackageConfig-name", "data": {"tableArrayKey": null, "table": "Lake.PackageConfig", "field": "name"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.PackageConfig moreServerOptions": [{"id": "Lake___PackageConfig-moreServerOptions", "data": {"tableArrayKey": null, "table": "Lake.PackageConfig", "field": "moreServerOptions"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.PackageConfig moreLinkObjs": [{"id": "Lake___PackageConfig-moreLinkObjs", "data": {"tableArrayKey": null, "table": "Lake.PackageConfig", "field": "moreLinkObjs"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.PackageConfig moreLinkLibs": [{"id": "Lake___PackageConfig-moreLinkLibs", "data": {"tableArrayKey": null, "table": "Lake.PackageConfig", "field": "moreLinkLibs"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.PackageConfig moreLinkArgs": [{"id": "Lake___PackageConfig-moreLinkArgs", "data": {"tableArrayKey": null, "table": "Lake.PackageConfig", "field": "moreLinkArgs"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.PackageConfig moreLeancArgs": [{"id": "Lake___PackageConfig-moreLeancArgs", "data": {"tableArrayKey": null, "table": "Lake.PackageConfig", "field": "moreLeancArgs"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.PackageConfig moreLeanArgs": [{"id": "Lake___PackageConfig-moreLeanArgs", "data": {"tableArrayKey": null, "table": "Lake.PackageConfig", "field": "moreLeanArgs"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.PackageConfig moreGlobalServerArgs": [{"id": "Lake___PackageConfig-moreGlobalServerArgs", "data": {"tableArrayKey": null, "table": "Lake.PackageConfig", "field": "moreGlobalServerArgs"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.PackageConfig lintDriverArgs": [{"id": "Lake___PackageConfig-lintDriverArgs", "data": {"tableArrayKey": null, "table": "Lake.PackageConfig", "field": "lintDriverArgs"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.PackageConfig lintDriver": [{"id": "Lake___PackageConfig-lintDriver", "data": {"tableArrayKey": null, "table": "Lake.PackageConfig", "field": "lintDriver"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.PackageConfig licenseFiles": [{"id": "Lake___PackageConfig-licenseFiles", "data": {"tableArrayKey": null, "table": "Lake.PackageConfig", "field": "licenseFiles"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.PackageConfig license": [{"id": "Lake___PackageConfig-license", "data": {"tableArrayKey": null, "table": "Lake.PackageConfig", "field": "license"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.PackageConfig libPrefixOnWindows": [{"id": "Lake___PackageConfig-libPrefixOnWindows", "data": {"tableArrayKey": null, "table": "Lake.PackageConfig", "field": "libPrefixOnWindows"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.PackageConfig leanOptions": [{"id": "Lake___PackageConfig-leanOptions", "data": {"tableArrayKey": null, "table": "Lake.PackageConfig", "field": "leanOptions"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.PackageConfig leanLibDir": [{"id": "Lake___PackageConfig-leanLibDir", "data": {"tableArrayKey": null, "table": "Lake.PackageConfig", "field": "leanLibDir"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.PackageConfig keywords": [{"id": "Lake___PackageConfig-keywords", "data": {"tableArrayKey": null, "table": "Lake.PackageConfig", "field": "keywords"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.PackageConfig irDir": [{"id": "Lake___PackageConfig-irDir", "data": {"tableArrayKey": null, "table": "Lake.PackageConfig", "field": "irDir"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.PackageConfig homepage": [{"id": "Lake___PackageConfig-homepage", "data": {"tableArrayKey": null, "table": "Lake.PackageConfig", "field": "homepage"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.PackageConfig extraDepTargets": [{"id": "Lake___PackageConfig-extraDepTargets", "data": {"tableArrayKey": null, "table": "Lake.PackageConfig", "field": "extraDepTargets"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.PackageConfig enableArtifactCache?": [{"id": "Lake___PackageConfig-enableArtifactCache___", "data": {"tableArrayKey": null, "table": "Lake.PackageConfig", "field": "enableArtifactCache?"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.PackageConfig description": [{"id": "Lake___PackageConfig-description", "data": {"tableArrayKey": null, "table": "Lake.PackageConfig", "field": "description"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.PackageConfig defaultTargets": [{"id": "Lake___PackageConfig-defaultTargets", "data": {"tableArrayKey": null, "table": "Lake.PackageConfig", "field": "defaultTargets"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.PackageConfig buildType": [{"id": "Lake___PackageConfig-buildType", "data": {"tableArrayKey": null, "table": "Lake.PackageConfig", "field": "buildType"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.PackageConfig buildDir": [{"id": "Lake___PackageConfig-buildDir", "data": {"tableArrayKey": null, "table": "Lake.PackageConfig", "field": "buildDir"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.PackageConfig buildArchive": [{"id": "Lake___PackageConfig-buildArchive", "data": {"tableArrayKey": null, "table": "Lake.PackageConfig", "field": "buildArchive"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.PackageConfig bootstrap": [{"id": "Lake___PackageConfig-bootstrap", "data": {"tableArrayKey": null, "table": "Lake.PackageConfig", "field": "bootstrap"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.PackageConfig binDir": [{"id": "Lake___PackageConfig-binDir", "data": {"tableArrayKey": null, "table": "Lake.PackageConfig", "field": "binDir"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.PackageConfig allowImportAll": [{"id": "Lake___PackageConfig-allowImportAll", "data": {"tableArrayKey": null, "table": "Lake.PackageConfig", "field": "allowImportAll"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.LeanLibConfig weakLinkArgs": [{"id": "Lake___LeanLibConfig-weakLinkArgs", "data": {"tableArrayKey": "lean_lib", "table": "Lake.LeanLibConfig", "field": "weakLinkArgs"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.LeanLibConfig weakLeancArgs": [{"id": "Lake___LeanLibConfig-weakLeancArgs", "data": {"tableArrayKey": "lean_lib", "table": "Lake.LeanLibConfig", "field": "weakLeancArgs"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.LeanLibConfig weakLeanArgs": [{"id": "Lake___LeanLibConfig-weakLeanArgs", "data": {"tableArrayKey": "lean_lib", "table": "Lake.LeanLibConfig", "field": "weakLeanArgs"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.LeanLibConfig srcDir": [{"id": "Lake___LeanLibConfig-srcDir", "data": {"tableArrayKey": "lean_lib", "table": "Lake.LeanLibConfig", "field": "srcDir"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.LeanLibConfig roots": [{"id": "Lake___LeanLibConfig-roots", "data": {"tableArrayKey": "lean_lib", "table": "Lake.LeanLibConfig", "field": "roots"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.LeanLibConfig precompileModules": [{"id": "Lake___LeanLibConfig-precompileModules", "data": {"tableArrayKey": "lean_lib", "table": "Lake.LeanLibConfig", "field": "precompileModules"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.LeanLibConfig plugins": [{"id": "Lake___LeanLibConfig-plugins", "data": {"tableArrayKey": "lean_lib", "table": "Lake.LeanLibConfig", "field": "plugins"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.LeanLibConfig platformIndependent": [{"id": "Lake___LeanLibConfig-platformIndependent", "data": {"tableArrayKey": "lean_lib", "table": "Lake.LeanLibConfig", "field": "platformIndependent"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.LeanLibConfig needs": [{"id": "Lake___LeanLibConfig-needs", "data": {"tableArrayKey": "lean_lib", "table": "Lake.LeanLibConfig", "field": "needs"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.LeanLibConfig name": [{"id": "Lake___LeanLibConfig-name", "data": {"tableArrayKey": "lean_lib", "table": "Lake.LeanLibConfig", "field": "name"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.LeanLibConfig moreServerOptions": [{"id": "Lake___LeanLibConfig-moreServerOptions", "data": {"tableArrayKey": "lean_lib", "table": "Lake.LeanLibConfig", "field": "moreServerOptions"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.LeanLibConfig moreLinkObjs": [{"id": "Lake___LeanLibConfig-moreLinkObjs", "data": {"tableArrayKey": "lean_lib", "table": "Lake.LeanLibConfig", "field": "moreLinkObjs"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.LeanLibConfig moreLinkLibs": [{"id": "Lake___LeanLibConfig-moreLinkLibs", "data": {"tableArrayKey": "lean_lib", "table": "Lake.LeanLibConfig", "field": "moreLinkLibs"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.LeanLibConfig moreLinkArgs": [{"id": "Lake___LeanLibConfig-moreLinkArgs", "data": {"tableArrayKey": "lean_lib", "table": "Lake.LeanLibConfig", "field": "moreLinkArgs"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.LeanLibConfig moreLeancArgs": [{"id": "Lake___LeanLibConfig-moreLeancArgs", "data": {"tableArrayKey": "lean_lib", "table": "Lake.LeanLibConfig", "field": "moreLeancArgs"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.LeanLibConfig moreLeanArgs": [{"id": "Lake___LeanLibConfig-moreLeanArgs", "data": {"tableArrayKey": "lean_lib", "table": "Lake.LeanLibConfig", "field": "moreLeanArgs"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.LeanLibConfig libPrefixOnWindows": [{"id": "Lake___LeanLibConfig-libPrefixOnWindows", "data": {"tableArrayKey": "lean_lib", "table": "Lake.LeanLibConfig", "field": "libPrefixOnWindows"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.LeanLibConfig libName": [{"id": "Lake___LeanLibConfig-libName", "data": {"tableArrayKey": "lean_lib", "table": "Lake.LeanLibConfig", "field": "libName"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.LeanLibConfig leanOptions": [{"id": "Lake___LeanLibConfig-leanOptions", "data": {"tableArrayKey": "lean_lib", "table": "Lake.LeanLibConfig", "field": "leanOptions"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.LeanLibConfig extraDepTargets": [{"id": "Lake___LeanLibConfig-extraDepTargets", "data": {"tableArrayKey": "lean_lib", "table": "Lake.LeanLibConfig", "field": "extraDepTargets"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.LeanLibConfig dynlibs": [{"id": "Lake___LeanLibConfig-dynlibs", "data": {"tableArrayKey": "lean_lib", "table": "Lake.LeanLibConfig", "field": "dynlibs"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.LeanLibConfig defaultFacets": [{"id": "Lake___LeanLibConfig-defaultFacets", "data": {"tableArrayKey": "lean_lib", "table": "Lake.LeanLibConfig", "field": "defaultFacets"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.LeanLibConfig buildType": [{"id": "Lake___LeanLibConfig-buildType", "data": {"tableArrayKey": "lean_lib", "table": "Lake.LeanLibConfig", "field": "buildType"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.LeanLibConfig allowImportAll": [{"id": "Lake___LeanLibConfig-allowImportAll", "data": {"tableArrayKey": "lean_lib", "table": "Lake.LeanLibConfig", "field": "allowImportAll"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.LeanExeConfig weakLinkArgs": [{"id": "Lake___LeanExeConfig-weakLinkArgs", "data": {"tableArrayKey": "lean_exe", "table": "Lake.LeanExeConfig", "field": "weakLinkArgs"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.LeanExeConfig weakLeancArgs": [{"id": "Lake___LeanExeConfig-weakLeancArgs", "data": {"tableArrayKey": "lean_exe", "table": "Lake.LeanExeConfig", "field": "weakLeancArgs"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.LeanExeConfig weakLeanArgs": [{"id": "Lake___LeanExeConfig-weakLeanArgs", "data": {"tableArrayKey": "lean_exe", "table": "Lake.LeanExeConfig", "field": "weakLeanArgs"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.LeanExeConfig supportInterpreter": [{"id": "Lake___LeanExeConfig-supportInterpreter", "data": {"tableArrayKey": "lean_exe", "table": "Lake.LeanExeConfig", "field": "supportInterpreter"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.LeanExeConfig srcDir": [{"id": "Lake___LeanExeConfig-srcDir", "data": {"tableArrayKey": "lean_exe", "table": "Lake.LeanExeConfig", "field": "srcDir"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.LeanExeConfig root": [{"id": "Lake___LeanExeConfig-root", "data": {"tableArrayKey": "lean_exe", "table": "Lake.LeanExeConfig", "field": "root"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.LeanExeConfig plugins": [{"id": "Lake___LeanExeConfig-plugins", "data": {"tableArrayKey": "lean_exe", "table": "Lake.LeanExeConfig", "field": "plugins"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.LeanExeConfig platformIndependent": [{"id": "Lake___LeanExeConfig-platformIndependent", "data": {"tableArrayKey": "lean_exe", "table": "Lake.LeanExeConfig", "field": "platformIndependent"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.LeanExeConfig needs": [{"id": "Lake___LeanExeConfig-needs", "data": {"tableArrayKey": "lean_exe", "table": "Lake.LeanExeConfig", "field": "needs"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.LeanExeConfig name": [{"id": "Lake___LeanExeConfig-name", "data": {"tableArrayKey": "lean_exe", "table": "Lake.LeanExeConfig", "field": "name"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.LeanExeConfig moreServerOptions": [{"id": "Lake___LeanExeConfig-moreServerOptions", "data": {"tableArrayKey": "lean_exe", "table": "Lake.LeanExeConfig", "field": "moreServerOptions"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.LeanExeConfig moreLinkObjs": [{"id": "Lake___LeanExeConfig-moreLinkObjs", "data": {"tableArrayKey": "lean_exe", "table": "Lake.LeanExeConfig", "field": "moreLinkObjs"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.LeanExeConfig moreLinkLibs": [{"id": "Lake___LeanExeConfig-moreLinkLibs", "data": {"tableArrayKey": "lean_exe", "table": "Lake.LeanExeConfig", "field": "moreLinkLibs"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.LeanExeConfig moreLinkArgs": [{"id": "Lake___LeanExeConfig-moreLinkArgs", "data": {"tableArrayKey": "lean_exe", "table": "Lake.LeanExeConfig", "field": "moreLinkArgs"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.LeanExeConfig moreLeancArgs": [{"id": "Lake___LeanExeConfig-moreLeancArgs", "data": {"tableArrayKey": "lean_exe", "table": "Lake.LeanExeConfig", "field": "moreLeancArgs"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.LeanExeConfig moreLeanArgs": [{"id": "Lake___LeanExeConfig-moreLeanArgs", "data": {"tableArrayKey": "lean_exe", "table": "Lake.LeanExeConfig", "field": "moreLeanArgs"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.LeanExeConfig leanOptions": [{"id": "Lake___LeanExeConfig-leanOptions", "data": {"tableArrayKey": "lean_exe", "table": "Lake.LeanExeConfig", "field": "leanOptions"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.LeanExeConfig extraDepTargets": [{"id": "Lake___LeanExeConfig-extraDepTargets", "data": {"tableArrayKey": "lean_exe", "table": "Lake.LeanExeConfig", "field": "extraDepTargets"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.LeanExeConfig exeName": [{"id": "Lake___LeanExeConfig-exeName", "data": {"tableArrayKey": "lean_exe", "table": "Lake.LeanExeConfig", "field": "exeName"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.LeanExeConfig dynlibs": [{"id": "Lake___LeanExeConfig-dynlibs", "data": {"tableArrayKey": "lean_exe", "table": "Lake.LeanExeConfig", "field": "dynlibs"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.LeanExeConfig buildType": [{"id": "Lake___LeanExeConfig-buildType", "data": {"tableArrayKey": "lean_exe", "table": "Lake.LeanExeConfig", "field": "buildType"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.Dependency version": [{"id": "Lake___Dependency-version", "data": {"tableArrayKey": "require", "table": "Lake.Dependency", "field": "version"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.Dependency source": [{"id": "Lake___Dependency-source", "data": {"tableArrayKey": "require", "table": "Lake.Dependency", "field": "source"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.Dependency scope": [{"id": "Lake___Dependency-scope", "data": {"tableArrayKey": "require", "table": "Lake.Dependency", "field": "scope"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.Dependency rev": [{"id": "Lake___Dependency-rev", "data": {"tableArrayKey": "require", "table": "Lake.Dependency", "field": "rev"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.Dependency path": [{"id": "Lake___Dependency-path", "data": {"tableArrayKey": "require", "table": "Lake.Dependency", "field": "path"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.Dependency name": [{"id": "Lake___Dependency-name", "data": {"tableArrayKey": "require", "table": "Lake.Dependency", "field": "name"}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.Dependency git": [{"id": "Lake___Dependency-git", "data": {"tableArrayKey": "require", "table": "Lake.Dependency", "field": "git"}, "address": "/Build-Tools-and-Distribution/Lake/"}]}}, "Manual.lakeOpt": {"title": "Manual.lakeOpt", "description": "Manual.lakeOpt", "contents": {"-v": [{"id": "lake-flag-v", "data": "flag", "address": "/Build-Tools-and-Distribution/Lake/"}], "-q": [{"id": "lake-flag-q", "data": "flag", "address": "/Build-Tools-and-Distribution/Lake/"}], "-o": [{"id": "lake-option-o", "data": "option", "address": "/Build-Tools-and-Distribution/Lake/"}], "-h": [{"id": "lake-flag-h", "data": "flag", "address": "/Build-Tools-and-Distribution/Lake/"}], "-f": [{"id": "lake-option-f", "data": "option", "address": "/Build-Tools-and-Distribution/Lake/"}], "-d": [{"id": "lake-option-d", "data": "option", "address": "/Build-Tools-and-Distribution/Lake/"}], "-R": [{"id": "lake-flag-R", "data": "flag", "address": "/Build-Tools-and-Distribution/Lake/"}], "-H": [{"id": "lake-flag-H", "data": "flag", "address": "/Build-Tools-and-Distribution/Lake/"}], "--wfail": [{"id": "lake-flag--wfail", "data": "flag", "address": "/Build-Tools-and-Distribution/Lake/"}], "--version": [{"id": "lake-flag--version", "data": "flag", "address": "/Build-Tools-and-Distribution/Lake/"}], "--verbose": [{"id": "lake-flag--verbose", "data": "flag", "address": "/Build-Tools-and-Distribution/Lake/"}], "--update": [{"id": "lake-flag--update", "data": "flag", "address": "/Build-Tools-and-Distribution/Lake/"}], "--try-cache": [{"id": "lake-flag--try-cache", "data": "flag", "address": "/Build-Tools-and-Distribution/Lake/"}], "--toolchain": [{"id": "lake-option--toolchain", "data": "option", "address": "/Build-Tools-and-Distribution/Lake/"}], "--scope": [{"id": "lake-option--scope", "data": "option", "address": "/Build-Tools-and-Distribution/Lake/"}], "--repo": [{"id": "lake-option--repo", "data": "option", "address": "/Build-Tools-and-Distribution/Lake/"}], "--rehash": [{"id": "lake-flag--rehash", "data": "flag", "address": "/Build-Tools-and-Distribution/Lake/"}], "--reconfigure": [{"id": "lake-flag--reconfigure", "data": "flag", "address": "/Build-Tools-and-Distribution/Lake/"}], "--quiet": [{"id": "lake-flag--quiet", "data": "flag", "address": "/Build-Tools-and-Distribution/Lake/"}], "--platform": [{"id": "lake-option--platform", "data": "option", "address": "/Build-Tools-and-Distribution/Lake/"}], "--packages": [{"id": "lake-option--packages", "data": "option", "address": "/Build-Tools-and-Distribution/Lake/"}], "--old": [{"id": "lake-flag--old", "data": "flag", "address": "/Build-Tools-and-Distribution/Lake/"}], "--no-cache": [{"id": "lake-flag--no-cache", "data": "flag", "address": "/Build-Tools-and-Distribution/Lake/"}], "--no-build": [{"id": "lake-flag--no-build", "data": "flag", "address": "/Build-Tools-and-Distribution/Lake/"}], "--no-ansi": [{"id": "lake-flag--no-ansi", "data": "flag", "address": "/Build-Tools-and-Distribution/Lake/"}], "--max-revs": [{"id": "lake-option--max-revs", "data": "option", "address": "/Build-Tools-and-Distribution/Lake/"}], "--log-level": [{"id": "lake-option--log-level", "data": "option", "address": "/Build-Tools-and-Distribution/Lake/"}], "--keep-toolchain": [{"id": "lake-flag--keep-toolchain", "data": "flag", "address": "/Build-Tools-and-Distribution/Lake/"}], "--iofail": [{"id": "lake-flag--iofail", "data": "flag", "address": "/Build-Tools-and-Distribution/Lake/"}], "--help": [{"id": "lake-flag--help", "data": "flag", "address": "/Build-Tools-and-Distribution/Lake/"}], "--file": [{"id": "lake-option--file", "data": "option", "address": "/Build-Tools-and-Distribution/Lake/"}], "--fail-level": [{"id": "lake-option--fail-level", "data": "option", "address": "/Build-Tools-and-Distribution/Lake/"}], "--dir": [{"id": "lake-option--dir", "data": "option", "address": "/Build-Tools-and-Distribution/Lake/"}], "--ansi": [{"id": "lake-flag--ansi", "data": "flag", "address": "/Build-Tools-and-Distribution/Lake/"}]}}, "Manual.lakeCommand": {"title": "Lake commands", "description": "Lake commands", "contents": {"upload": [{"id": "upload", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "update": [{"id": "update", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "unpack": [{"id": "unpack", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "translate-config": [{"id": "translate-config", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "test": [{"id": "test", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "serve": [{"id": "serve", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "scripts": [{"id": "script-list", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "script run": [{"id": "script-run", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "script list": [{"id": "script-list", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "script doc": [{"id": "script-doc", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "run": [{"id": "script-run", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "query": [{"id": "query", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "pack": [{"id": "pack", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "new": [{"id": "new", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "lint": [{"id": "lint", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "lean": [{"id": "lean", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "init": [{"id": "init", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "exec": [{"id": "exe", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "exe": [{"id": "exe", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "env": [{"id": "env", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "clean": [{"id": "clean", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "check-test": [{"id": "check-test", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "check-lint": [{"id": "check-lint", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "check-build": [{"id": "check-build", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "cache put": [{"id": "cache-put", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "cache get": [{"id": "cache-get", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "build": [{"id": "build", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}]}}, "Manual.examples": {"title": "Manual.examples", "description": "Manual.examples", "contents": {"where for structures": [], "Zero-Overhead Subtypes": [], "Widths and Newlines": [], "Vector length index as a parameter": [], "Variations in Instance Definitions": [], "Variable not in scope": [], "Using Any Local Variable": [], "Using simp?": [], "Using in for Local Scopes": [], "Using Ord Instances for LT and LE Instances": [], "Using NoNatZeroDivisors": [], "Using #print axioms with #guard_msgs": [], "Updating arrays": [], "Unresolvable name inferred by dotted-identifier notation": [], "Unnecessary fallback clause": [], "Universes, constructors, and parameters": [], "Universe-polymorphic identity function": [], "Universe-polymorphic map": [], "Universe polymorphism and definitional equality": [], "Universe monomorphism in auto-bound implicit parameters": [], "Universe mismatch": [], "Universe levels of function types": [], "Universe level expressions": [], "Universe Level Metavariables": [], "Unit in the ABI": [], "Uninferred binder type due to resulting type annotation": [], "Unexpansion and Arguments": [], "Typo in resulting type": [], "Types are irrelevant": [], "Type Refinement": [], "Type Metavariables": [], "Turning Off Field Notation": [], "Truth-Functional Implication": [], "True is a subsingleton": [], "Translating Nested Inductive Types": [], "Tracing Instance Search": [], "Too Many Instances": [], "Throwing and Catching Errors": [], "The recursor for List": [], "The recursor for Bool": [], "The Macro Attribute": [], "The Integers as a Quotient Type": [], "The Identity Monad Transformer ": [], "The universe command when autoImplicit is false": [], "The @[grind ←=] Attribute": [], "The @[grind ext] Attribute": [], "Testing Return Values": [], "Termination failure": [], "Termination Proof Tactics During Inference": [], "Termination Proof Obligations": [], "Terminating Loops in the Option Monad": [], "Term vs Command Quotation Syntax": [], "Target and Facet Specifications": [], "Taking Advantage of Run-Time Representations": [], "Tail Recursion with Branching": [], "Tactic hygiene: inaccessible assumptions": [], "Tactic hygiene: accessible assumptions": [], "Synthesizing a Type Class Instance": [], "Syntax as Strings": [], "Suffixed Splices": [], "Subtype Coercions": [], "Subgoal Sequencing": [], "Sub-Array Syntax": [], "Structure type inheritance with overlapping fields": [], "Structural Recursion vs Subtraction": [], "Structural Recursion and Definitional Equality": [], "Structural Recursion Under Pairs": [], "Stateful Proofs": [], "Stateful Predicates": [], "State Types": [], "Standard Library Types": [], "Spuriously mutual types": [], "Splitting Predicates": [], "Splitting Pattern Matching": [], "Splitting Conditional Expressions": [], "Specifying Decreasing Parameters": [], "Sources as Tables": [], "Sort Coercions as Ordinary Coercions": [], "Sort Coercions": [], "Slicing Lists": [], "Simultaneous Matching vs Matching Pairs for Structural Recursion": [], "Signed Integers": [], "Semi-Output Parameters with Pre-Existing Values": [], "Selecting Patterns": [], "Section Variables": [], "Scoped Macros": [], "Scope Information": [], "Schematic Variables": [], "Schematic Postconditions": [], "Running a Program on a File": [], "Running a Program": [], "Ring Characteristics": [], "Right pipeline notation": [], "Rewriting Under Binders with conv": [], "Rewriting Propositions": [], "Requiring Reservoir Packages from a Git tag": [], "Requiring Packages from a Git tag": [], "Requiring Packages from Reservoir": [], "Requiring Packages from Paths": [], "Requiring Packages from Git": [], "Representing Syntax as Constructors": [], "Relaxed vs Non-Relaxed Automatic Implicit Parameters": [], "Refined Parameters": [], "Reference Counts in IR": [], "Reference Cells as Locks": [], "Reducing Functions": [], "Reducibility and Tactics": [], "Reducibility and Instance Synthesis": [], "Reducibility and Generalized Field Notation": [], "Redirecting Standard I/O to Strings": [], "Recursor with parameters and indices": [], "Recursive tactic macro": [], "Recursive Equational Lemmas": [], "Recursion vs Recursors": [], "Reasoning via Lists": [], "Reasoning by cases with match": [], "Reasoning by cases with if": [], "Reading from Standard Input": [], "Rational Solutions": [], "Ranges of Natural Numbers": [], "Querying the Environment": [], "Quasiquotation": [], "Proving Existential Statements": [], "Provided Operator Names": [], "Protected constant name without namespace prefix": [], "Propagating Equalities": [], "Proofs in Public": [], "Proofs by Induction": [], "Proofs are irrelevant": [], "Proofs are Private": [], "Proofs About Quotients": [], "Private and Public Definitions": [], "Private Methods": [], "Private Field Values": [], "Printing Equations": [], "Printing Axioms of Simple Definitions": [], "Printing Axioms": [], "Printing": [], "Pretty-Printed Syntax": [], "Preprocessing for a custom data type": [], "Predicativity of Type": [], "Precedence for Prefix and Infix Operators": [], "Postfix Ascription vs show": [], "Popcount": [], "Pipeline Fields": [], "Patterns from Conclusion and Hypotheses": [], "Patterns for Constructors": [], "Patterns and default values": [], "Pattern-Matching Functions": [], "Pattern treated as variable, not constructor": [], "Pattern Matching and Lists": [], "Pattern Equality Proofs": [], "Partial Functions in Proofs": [], "Partial Correctness Theorem": [], "Parsing Matched Parentheses and Brackets": [], "Parsing Comma-Separated Repetitions": [], "Parameters before and after the colon": [], "Parameter Scope": [], "Panic": [], "Overly-universe-polymorphic Bool": [], "Overflowing Fixed-Width Literals": [], "Output Parameters with Pre-Existing Values": [], "Output Parameters and Stuck Search": [], "Ordinary vs Strict Implicit Parameters": [], "Or is not a subsingleton": [], "Options as Safe Nullability": [], "Options as Nullability": [], "Optional Splices": [], "Opening Scoped Declarations": [], "Opening Nested Namespaces": [], "One vs. Two Sets of Macro Rules": [], "One File, Multiple Handles": [], "Omitting parameter in argument to higher-order predicate": [], "Observing Uniqueness": [], "Numeric Literals for Bitvectors": [], "Numeric Literals for Fin": [], "Nonlinear Terms": [], "Noncomputable instance in namespace": [], "Noncomputable dependency can be made computable": [], "Non-strictly-positive inductive types": [], "Non-default constructor name": [], "Non-Dependent Functions Don't Bind Variables": [], "Non-Comma Separators": [], "No structure subtyping": [], "No cumulativity": [], "No Kernel Reasoning About Floating-Point Numbers": [], "No Instances of Non-Classes": [], "No Backtracking of Lexicographic Order": [], "No Automatic Implicit Parameters": [], "Newline Characters in Strings": [], "Nesting Namespaces and Sections": [], "Nested positions": [], "Nested Patterns and Sub-Terms": [], "Nested Inductive Types with Std.HashMap": [], "Nested Inductive Types and Quotients": [], "Nested Inductive Types": [], "Nested Dependent Pair Types": [], "Nested do and Branches": [], "Necessarily noncomputable function not appropriately marked": [], "Navigation and Rewriting with conv": [], "Natural Numbers as Linear Integer Arithmetic": [], "Named goals": [], "Named Section": [], "Named Arguments": [], "Mutually Defined Inductive Types": [], "Mutual strict positivity": [], "Mutual recursion without parameter decrease": [], "Mutual inductive type constructors may not mention each other": [], "Mutual Structural Recursion Over Non-Mutual Types": [], "Mutual Structural Recursion Over Mutual Types": [], "Mutual Block Scope and Automatic Implicit Parameters": [], "Mutual Block Scope": [], "Multiple Parameters, Same Type": [], "Multi-Patterns": [], "More Commutative Ring Proofs": [], "Monadic functions": [], "Monadic Collection Operations": [], "Monad Lifts in Function Signatures": [], "Modifying Values in Maps": [], "Modifiers on structure constructor": [], "Mixing Collections": [], "Missing resulting type after constructor parameter": [], "Missing namespace": [], "Missing import": [], "Missing WPMonad Instance": [], "Minimal TOML Package Configuration": [], "Minimal Library Target": [], "Minimal Executable Target": [], "Metavariables in Proofs": [], "Meta Definitions": [], "Memory Re-Use in IR": [], "Maximal Parentheses": [], "Matching, With and Without Generalization": [], "Matching with an Explicit Motive": [], "Matching on Complex Expressions Can Prevent Elaboration": [], "Match Patterns Follow Reduction": [], "Manually Quotiented Integers": [], "Macro Error Reporting": [], "Loops are Tail Recursive Functions": [], "Longer Prefixes of Current Namespace Take Precedence": [], "Longer Identifier Prefixes Take Precedence": [], "Long List Literals": [], "Location specifiers for simp": [], "Local Names Take Precedence": [], "Local Instances Have Priority": [], "Local Instances": [], "Local Effects with the Identity Monad": [], "Lists with Lengths as Applicative Functors": [], "Linear Integer Arithmetic with Case Analysis": [], "Linear Division and Modulo": [], "Limiting ring Steps": [], "Lifting Transformed Monads": [], "Lifting IO Monads": [], "Library TOML Package Configuration": [], "Left-to-Right Generation": [], "Left pipeline notation": [], "Leading . and Unfolding Definitions": [], "Leading .": [], "Lazy Lists": [], "Iterators and Effects": [], "Iterator State Types": [], "Iteration over Array Indices with for": [], "Iteration Over Multiple Collections": [], "Iterating Over Triples": [], "Iterating Over Nat": [], "Iterated Automatic Implicit Parameters": [], "Invalid Nested Inductive Types": [], "Integer Negation and Addition": [], "Insufficient type information": [], "Instances for nested types": [], "Instances are not recursive": [], "Instances are Not Unique": [], "Instance Name Generation": [], "Inspecting Patterns": [], "Injectivity Patterns": [], "Inheriting Documentation": [], "Inhabited Sum Types": [], "Infix Syntax": [], "Infix Functor and Applicative Operators": [], "Inferred Termination Annotations": [], "Inferred Characteristic": [], "Inference too powerful": [], "Ineligible decreasing parameters": [], "Inductive Types with Constructors": [], "Increasing E-matching Limits": [], "Incorrect ordering of pattern matches": [], "Inconsistent Indices": [], "Inconsistencies From Axioms": [], "Included and Omitted Section Variables": [], "Inaccessible Patterns": [], "Inaccessible Assumption Names": [], "Impredicativity": [], "Impossible Functions": [], "Impossible Code Paths": [], "Importing Private Information": [], "Implicit argument cannot be inferred": [], "Implicit and Explicit Parameters to Instances": [], "Implicit Parameters from Types": [], "Implementing Ranges": [], "Implementing Coercions": [], "Ignored Terms in Notation Expansion": [], "Idiom Brackets": [], "Identifying Missing Facts": [], "Hierarchical Goal Names": [], "Hiding Proof Terms": [], "Heterogeneous Equality": [], "Grouping and Filling": [], "Goals Decided by linarith": [], "Generalized Field Notation": [], "From Characters to Strings": [], "Forward Pattern Generation": [], "Floating-Point Literals": [], "Floating-Point Equality Is Not a Congruence": [], "Floating-Point Equality Is Not Reflexive": [], "Fixed-Width Literals": [], "Fixed-Width Bitvector Literals": [], "Finitely Many Skips": [], "Finite-Field Reasoning": [], "Finite and Infinite Ranges": [], "Filling Holes with Unification": [], "Fields and grind": [], "Field Indices and Structure Inheritance": [], "False is a subsingleton": [], "Failing Backward Pattern Generation": [], "Extracting the witness from an existential proof": [], "Extensional Equality of Subtypes": [], "Extending trivial": [], "Exposed and Unexposed Definitions": [], "Exporting Private Definitions": [], "Exported Names": [], "Explicitly-Created Metavariables": [], "Explicit Root Namespace": [], "Expansion Backtracking": [], "Expanding Quasiquotation": [], "Excluded Middle and Decidable": [], "Exceptions and Lifting": [], "Examples of Linear Integer Arithmetic": [], "Even and odd": [], "Even Numbers": [], "Equational Lemmas": [], "Eq is a subsingleton": [], "Enriched Proof Obligation Contexts": [], "Elaboration Walkthrough": [], "Effect Ordering": [], "E-matching and Pattern Matching": [], "E-matching Patterns": [], "Duplicated Terms in Notation Expansion": [], "Duplicate Evaluation in Coercions": [], "Dotted identifier where type universe expected": [], "Division by Iterated Subtraction: Termination Proof": [], "Division by Iterated Subtraction": [], "Division by 0": [], "Displaying Output": [], "Displaying Differences": [], "Discriminant Refinement": [], "Disambiguation via Typing": [], "Differing parameter types": [], "Differing numbers of parameters": [], "Deriving Multiple Classes": [], "Deriving Handlers": [], "Dependent projection types": [], "Dependent Pairs with Data": [], "Dependent Pairs as Sums": [], "Dependent Function Types": [], "Dependent Coercion to Functions": [], "Dependent Coercion": [], "Definitional Equality of Unit-Like Types": [], "Definitional Equality of Subtypes": [], "Definitional Equality of Implicit and Explicit Function Types": [], "Definitional Equality of Dependent and Non-Dependent Functions": [], "Definitional Equality of Unit": [], "Definition type uninferrable due to unknown parameter type": [], "Definition by Partial Fixpoint": [], "Defining an intermediate data value within a proof": [], "Defining Dependent Coercions": [], "Defining Coercions: Decimal Numbers": [], "Defining Coercions": [], "Default values": [], "Default Size Instance": [], "Default Instances": [], "Dead Code and Subsingleton Elimination": [], "Data races with get and set": [], "Custom Unit Type": [], "Custom Slices": [], "Custom Operators in Lean's Output": [], "Custom Natural Number Literals": [], "Current Namespace Contents Take Precedence Over Opened Namespaces": [], "Current Namespace": [], "Cross-Phase Code Re-Use": [], "Creating and Tracking Proofs That Trust the Compiler": [], "Course-of-Values Tables": [], "Converting Iterators to Lists": [], "Converting Infinite Iterators to Lists": [], "Controlling Evaluation with Coercions": [], "Controlling Coercion Insertion": [], "Consuming Iterators in Loops": [], "Consuming Iterators Directly": [], "Constructing Lists": [], "Congruence Closure": [], "Configured Library Target": [], "Configured Executable Target": [], "Computing types": [], "Commutative Rings": [], "Commutative Ring Goals Decided by linarith": [], "Commutative (Semi)ring Normalization": [], "Coercions and Generalized Field Notation": [], "Coercions and Option": [], "Coercions and OfNat": [], "Coercions": [], "Coercing to Function Types": [], "Coercing from Fin to Nat": [], "Coercing Decorated Functions to Function Types": [], "CoeOut vs Coe instances": [], "Closing a Subprocess's Standard Input": [], "Class vs Structure Constructors": [], "Class Abbreviations": [], "Choosing Eliminators": [], "Checking for Type Errors": [], "Checking Exit Codes": [], "Checking Equality with Pointers": [], "Checking Array Bounds": [], "Characteristic Zero": [], "Built-In Integers as Quotients": [], "Bounded Bitvector Literals": [], "Binder type requires new type variable": [], "Bidirectional Equality Pattern Generation": [], "Backward Pattern Generation": [], "Axioms and Stuck Reduction": [], "Axioms and Compilation": [], "Avoiding data races with modify": [], "Avoiding a Type": [], "Avoiding Intermediate Structures": [], "Automatic universe parameters and the universe command": [], "Automatic Implicit Parameters and Universe Polymorphism": [], "Automatic Implicit Parameters": [], "Auto-implicit parameters in structure fields": [], "Attempting to use index projection on existential proof": [], "Attempting to name an example declaration": [], "Attempting to define multiple structure fields on the same line": [], "Attempting to define multiple opaque constants at once": [], "Atomic Types and Repr": [], "Asynchronous Subprocesses": [], "Assumptions by Type, Outside Proofs": [], "Assumptions by Type": [], "Assumption Names and Conclusion": [], "Assigned Operator Names": [], "Ascribing Types to do Blocks": [], "Ascribing Statements to Proofs": [], "Array Literals": [], "Array Indexing": [], "Antiquotation Annotations": [], "Anonymous constructors": [], "Anonymous Goals": [], "And is a subsingleton": [], "An instance for a sum class": [], "Ambiguous Operators and Priorities": [], "Ambiguous Identifiers": [], "Aligned Columns": [], "Algebraic Reasoning": [], "Accessible Assumption Names": [], "A unit type": [], "A type with parameter and index": [], "A true proposition": [], "A recursive instance for a sum class": [], "A constructorless type": [], "A constructorless proposition": [], "A Logging Monad": [], "#print and Structure Types": [], "#check and Underdetermined Types": []}}, "Manual.errorExplanation": {"title": "Error Explanations", "description": "Error Explanations", "contents": {"lean.unknownIdentifier": [{"id": "lean___unknownIdentifier", "data": {"summary": "Failed to resolve identifier to variable or constant."}, "address": "/Error-Explanations/lean___unknownIdentifier/"}], "lean.redundantMatchAlt": [{"id": "lean___redundantMatchAlt", "data": {"summary": "Match alternative will never be reached."}, "address": "/Error-Explanations/lean___redundantMatchAlt/"}], "lean.propRecLargeElim": [{"id": "lean___propRecLargeElim", "data": {"summary": "Attempted to eliminate a proof into a higher type universe."}, "address": "/Error-Explanations/lean___propRecLargeElim/"}], "lean.projNonPropFromProp": [{"id": "lean___projNonPropFromProp", "data": {"summary": "Tried to project data from a proof."}, "address": "/Error-Explanations/lean___projNonPropFromProp/"}], "lean.invalidDottedIdent": [{"id": "lean___invalidDottedIdent", "data": {"summary": "Dotted identifier notation used with invalid or uninferrable expected type."}, "address": "/Error-Explanations/lean___invalidDottedIdent/"}], "lean.inferDefTypeFailed": [{"id": "lean___inferDefTypeFailed", "data": {"summary": "The type of a definition could not be inferred."}, "address": "/Error-Explanations/lean___inferDefTypeFailed/"}], "lean.inferBinderTypeFailed": [{"id": "lean___inferBinderTypeFailed", "data": {"summary": "The type of a binder could not be inferred."}, "address": "/Error-Explanations/lean___inferBinderTypeFailed/"}], "lean.inductiveParamMissing": [{"id": "lean___inductiveParamMissing", "data": {"summary": "Parameter not present in an occurrence of an inductive type in one of its constructors."}, "address": "/Error-Explanations/lean___inductiveParamMissing/"}], "lean.inductiveParamMismatch": [{"id": "lean___inductiveParamMismatch", "data": {"summary": "Invalid parameter in an occurrence of an inductive type in one of its constructors."}, "address": "/Error-Explanations/lean___inductiveParamMismatch/"}], "lean.dependsOnNoncomputable": [{"id": "lean___dependsOnNoncomputable", "data": {"summary": "Declaration depends on noncomputable definitions but is not marked as noncomputable"}, "address": "/Error-Explanations/lean___dependsOnNoncomputable/"}], "lean.ctorResultingTypeMismatch": [{"id": "lean___ctorResultingTypeMismatch", "data": {"summary": "Resulting type of constructor was not the inductive type being declared."}, "address": "/Error-Explanations/lean___ctorResultingTypeMismatch/"}]}}, "Manual.envVar": {"title": "Environment Variables", "description": "Environment Variables", "contents": {"LEAN_SYSROOT": [{"id": "LEAN_SYSROOT", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "LEAN_NUM_THREADS": [{"id": "LEAN_NUM_THREADS", "data": null, "address": "/IO/Tasks-and-Threads/"}], "LEAN_CC": [{"id": "LEAN_CC", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "LEAN_AR": [{"id": "LEAN_AR", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "LEAN": [{"id": "LEAN", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "LAKE_OVERRIDE_LEAN": [{"id": "LAKE_OVERRIDE_LEAN", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "LAKE_NO_CACHE": [{"id": "LAKE_NO_CACHE", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "LAKE_HOME": [{"id": "LAKE_HOME", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "LAKE_CACHE_REVISION_ENDPOINT": [{"id": "LAKE_CACHE_REVISION_ENDPOINT", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "LAKE_CACHE_KEY": [{"id": "LAKE_CACHE_KEY", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "LAKE_CACHE_ARTIFACT_ENDPOINT": [{"id": "LAKE_CACHE_ARTIFACT_ENDPOINT", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "LAKE_ARTIFACT_CACHE": [{"id": "LAKE_ARTIFACT_CACHE", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "LAKE": [{"id": "LAKE", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "ELAN_HOME": [{"id": "ELAN_HOME", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}, {"id": "ELAN_HOME-next", "data": null, "address": "/Build-Tools-and-Distribution/Managing-Toolchains-with-Elan/"}], "ELAN": [{"id": "ELAN", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "CC": [{"id": "CC", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}], "AR": [{"id": "AR", "data": null, "address": "/Build-Tools-and-Distribution/Lake/"}]}}, "Manual.elanOpt": {"title": "Manual.elanOpt", "description": "Manual.elanOpt", "contents": {"-v": [{"id": "elan-flag-v", "data": "flag", "address": "/Build-Tools-and-Distribution/Managing-Toolchains-with-Elan/"}], "-h": [{"id": "elan-flag-h", "data": "flag", "address": "/Build-Tools-and-Distribution/Managing-Toolchains-with-Elan/"}], "-V": [{"id": "elan-flag-V", "data": "flag", "address": "/Build-Tools-and-Distribution/Managing-Toolchains-with-Elan/"}], "--version": [{"id": "elan-flag--version", "data": "flag", "address": "/Build-Tools-and-Distribution/Managing-Toolchains-with-Elan/"}], "--verbose": [{"id": "elan-flag--verbose", "data": "flag", "address": "/Build-Tools-and-Distribution/Managing-Toolchains-with-Elan/"}], "--path": [{"id": "elan-option--path", "data": "option", "address": "/Build-Tools-and-Distribution/Managing-Toolchains-with-Elan/"}], "--nonexistent": [{"id": "elan-flag--nonexistent", "data": "flag", "address": "/Build-Tools-and-Distribution/Managing-Toolchains-with-Elan/"}], "--json": [{"id": "elan-flag--json", "data": "flag", "address": "/Build-Tools-and-Distribution/Managing-Toolchains-with-Elan/"}], "--install": [{"id": "elan-flag--install", "data": "flag", "address": "/Build-Tools-and-Distribution/Managing-Toolchains-with-Elan/"}], "--help": [{"id": "elan-flag--help", "data": "flag", "address": "/Build-Tools-and-Distribution/Managing-Toolchains-with-Elan/"}], "--delete": [{"id": "elan-flag--delete", "data": "flag", "address": "/Build-Tools-and-Distribution/Managing-Toolchains-with-Elan/"}]}}, "Manual.elanCommand": {"title": "Elan commands", "description": "Elan commands", "contents": {"which": [{"id": "which", "data": null, "address": "/Build-Tools-and-Distribution/Managing-Toolchains-with-Elan/"}], "toolchain uninstall": [{"id": "toolchain-uninstall", "data": null, "address": "/Build-Tools-and-Distribution/Managing-Toolchains-with-Elan/"}], "toolchain list": [{"id": "toolchain-list", "data": null, "address": "/Build-Tools-and-Distribution/Managing-Toolchains-with-Elan/"}], "toolchain link": [{"id": "toolchain-link", "data": null, "address": "/Build-Tools-and-Distribution/Managing-Toolchains-with-Elan/"}], "toolchain install": [{"id": "toolchain-install", "data": null, "address": "/Build-Tools-and-Distribution/Managing-Toolchains-with-Elan/"}], "toolchain gc": [{"id": "toolchain-gc", "data": null, "address": "/Build-Tools-and-Distribution/Managing-Toolchains-with-Elan/"}], "show": [{"id": "show-next", "data": null, "address": "/Build-Tools-and-Distribution/Managing-Toolchains-with-Elan/"}], "self update": [{"id": "self-update", "data": null, "address": "/Build-Tools-and-Distribution/Managing-Toolchains-with-Elan/"}], "self uninstall": [{"id": "self-uninstall", "data": null, "address": "/Build-Tools-and-Distribution/Managing-Toolchains-with-Elan/"}], "run": [{"id": "run", "data": null, "address": "/Build-Tools-and-Distribution/Managing-Toolchains-with-Elan/"}], "override unset": [{"id": "override-unset", "data": null, "address": "/Build-Tools-and-Distribution/Managing-Toolchains-with-Elan/"}], "override set": [{"id": "override-set", "data": null, "address": "/Build-Tools-and-Distribution/Managing-Toolchains-with-Elan/"}], "override list": [{"id": "override-list", "data": null, "address": "/Build-Tools-and-Distribution/Managing-Toolchains-with-Elan/"}], "default": [{"id": "default", "data": null, "address": "/Build-Tools-and-Distribution/Managing-Toolchains-with-Elan/"}], "completions": [{"id": "completions", "data": null, "address": "/Build-Tools-and-Distribution/Managing-Toolchains-with-Elan/"}]}}, "Manual.Syntax.production": {"title": "Manual.Syntax.production", "description": "Manual.Syntax.production", "contents": {"«term∃_,_» [{\"string\": \"∃\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \",\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "_FLQQ_term_________FLQQ_-next", "data": {"kind": "«term∃_,_»", "forms": [{"string": "∃", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": ",", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Basic-Propositions/Quantifiers/"}], "«term∃_,_» [{\"string\": \"∃\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \":\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")?\", \"kind\": \"meta\"},\n {\"string\": \",\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "_FLQQ_term_________FLQQ_", "data": {"kind": "«term∃_,_»", "forms": [{"string": "∃", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "meta"}, {"string": ":", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")?", "kind": "meta"}, {"string": ",", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Basic-Propositions/Quantifiers/"}], "«term‹_›» [{\"string\": \"‹\", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \"›\", \"kind\": \"keyword\"}]": [{"id": "_FLQQ_term_FLQ___FRQ__FLQQ_", "data": {"kind": "«term‹_›»", "forms": [{"string": "‹", "kind": "keyword"}, {"string": "…", "kind": "meta"}, {"string": "›", "kind": "keyword"}], "category": null}, "address": "/Tactic-Proofs/Reading-Proof-States/"}], "«termΣ_,_» [{\"string\": \"Σ\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \":\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")?\", \"kind\": \"meta\"},\n {\"string\": \",\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "_FLQQ_term_________FLQQ_-next-next-next-next-next", "data": {"kind": "«termΣ_,_»", "forms": [{"string": "Σ", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "meta"}, {"string": ":", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")?", "kind": "meta"}, {"string": ",", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Basic-Types/Tuples/"}], "«termΣ_,_» [{\"string\": \"Σ\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")\", \"kind\": \"keyword\"},\n {\"string\": \",\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "_FLQQ_term_________FLQQ_-next-next-next-next-next-next", "data": {"kind": "«termΣ_,_»", "forms": [{"string": "Σ", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "keyword"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": ":", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")", "kind": "keyword"}, {"string": ",", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Basic-Types/Tuples/"}], "«termΣ'_,_» [{\"string\": \"Σ'\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \":\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")?\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \",\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "_FLQQ_term____________FLQQ_", "data": {"kind": "«termΣ'_,_»", "forms": [{"string": "Σ'", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "meta"}, {"string": ":", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")?", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": ",", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Basic-Types/Tuples/"}], "«termΣ'_,_» [{\"string\": \"Σ'\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")\", \"kind\": \"keyword\"},\n {\"string\": \",\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "_FLQQ_term____________FLQQ_-next", "data": {"kind": "«termΣ'_,_»", "forms": [{"string": "Σ'", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "keyword"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": ":", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")", "kind": "keyword"}, {"string": ",", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Basic-Types/Tuples/"}], "«term¬_» [{\"string\": \"¬\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "_FLQQ_term_____FLQQ_", "data": {"kind": "«term¬_»", "forms": [{"string": "¬", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Basic-Propositions/Logical-Connectives/"}], "«term{_:_//_}» [{\"string\": \"{\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"//\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"}\", \"kind\": \"keyword\"}]": [{"id": "_FLQQ_term___________________FLQQ_", "data": {"kind": "«term{_:_//_}»", "forms": [{"string": "{", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": ":", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "//", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "}", "kind": "keyword"}], "category": null}, "address": "/Basic-Types/Subtypes/"}], "«term{_:_//_}» [{\"string\": \"{\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"//\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"}\", \"kind\": \"keyword\"}]": [{"id": "_FLQQ_term___________________FLQQ_-next", "data": {"kind": "«term{_:_//_}»", "forms": [{"string": "{", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "//", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "}", "kind": "keyword"}], "category": null}, "address": "/Basic-Types/Subtypes/"}], "«term_⊕_» [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"⊕\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "_FLQQ_term______FLQQ_-next-next-next-next-next-next-next-next-next", "data": {"kind": "«term_⊕_»", "forms": [{"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "⊕", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Basic-Types/Sum-Types/"}], "«term_⊕'_» [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"⊕'\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "_FLQQ_term_________FLQQ_-next-next-next-next-next-next-next", "data": {"kind": "«term_⊕'_»", "forms": [{"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "⊕'", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Basic-Types/Sum-Types/"}], "«term_≥_» [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"≥\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "_FLQQ_term______FLQQ_-next-next", "data": {"kind": "«term_≥_»", "forms": [{"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "≥", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Type-Classes/Basic-Classes/"}], "«term_≤_» [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"≤\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "_FLQQ_term______FLQQ_-next", "data": {"kind": "«term_≤_»", "forms": [{"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "≤", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Type-Classes/Basic-Classes/"}], "«term_≍_» [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"≍\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "_FLQQ_term______FLQQ_-next-next-next-next-next-next-next", "data": {"kind": "«term_≍_»", "forms": [{"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "≍", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Basic-Propositions/Propositional-Equality/"}], "«term_≈_» [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"≈\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "_FLQQ_term______FLQQ_", "data": {"kind": "«term_≈_»", "forms": [{"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "≈", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/The-Type-System/Quotients/"}], "«term_∨_» [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"∨\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "_FLQQ_term______FLQQ_-next-next-next-next", "data": {"kind": "«term_∨_»", "forms": [{"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "∨", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Basic-Propositions/Logical-Connectives/"}], "«term_∧_» [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"∧\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "_FLQQ_term______FLQQ_-next-next-next", "data": {"kind": "«term_∧_»", "forms": [{"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "∧", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Basic-Propositions/Logical-Connectives/"}], "«term_↔_» [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"↔\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "_FLQQ_term______FLQQ_-next-next-next-next-next", "data": {"kind": "«term_↔_»", "forms": [{"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "↔", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Basic-Propositions/Logical-Connectives/"}], "«term_×_» [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"×\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "_FLQQ_term______FLQQ_-next-next-next-next-next-next-next-next", "data": {"kind": "«term_×_»", "forms": [{"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "×", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Basic-Types/Tuples/"}], "«term_×__1» [{\"string\": \"(\", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"×\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "_FLQQ_term______1_FLQQ_", "data": {"kind": "«term_×__1»", "forms": [{"string": "(", "kind": "keyword"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": ":", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "×", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Basic-Types/Tuples/"}], "«term_×'_» [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"×'\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "_FLQQ_term_________FLQQ_-next-next-next-next", "data": {"kind": "«term_×'_»", "forms": [{"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "×'", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Basic-Types/Tuples/"}], "«term_||_» [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"||\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "_FLQQ_term_________FLQQ_-next-next-next", "data": {"kind": "«term_||_»", "forms": [{"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "||", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Basic-Types/Booleans/"}], "«term_|>_» [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"|>\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "_FLQQ_term_____GT___FLQQ_", "data": {"kind": "«term_|>_»", "forms": [{"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "|>", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Terms/Function-Application/"}], "«term_>_» [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \">\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "_FLQQ_term__GT___FLQQ_", "data": {"kind": "«term_>_»", "forms": [{"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": ">", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Type-Classes/Basic-Classes/"}], "«term_>>=_» [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \">>=\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "_FLQQ_term__GT__GT______FLQQ_", "data": {"kind": "«term_>>=_»", "forms": [{"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": ">>=", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}], "«term_>=>_» [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \">=>\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "_FLQQ_term__GT_____GT___FLQQ_", "data": {"kind": "«term_>=>_»", "forms": [{"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": ">=>", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}], "«term_=_» [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"=\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "_FLQQ_term______FLQQ_-next-next-next-next-next-next", "data": {"kind": "«term_=_»", "forms": [{"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "=", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Basic-Propositions/Propositional-Equality/"}], "«term_=<<_» [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"=<<\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "_FLQQ_term_____LT__LT___FLQQ_", "data": {"kind": "«term_=<<_»", "forms": [{"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "=<<", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}], "«term_<|_» [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"<|\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "_FLQQ_term__LT______FLQQ_", "data": {"kind": "«term_<|_»", "forms": [{"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "<|", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Terms/Function-Application/"}], "«term_<|>_» [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"<|>\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "_FLQQ_term__LT_____GT___FLQQ_-next-next-next", "data": {"kind": "«term_<|>_»", "forms": [{"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "<|>", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}], "«term_<_» [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"<\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "_FLQQ_term__LT___FLQQ_", "data": {"kind": "«term_<_»", "forms": [{"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "<", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Type-Classes/Basic-Classes/"}], "«term_<=<_» [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"<=<\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "_FLQQ_term__LT_____LT___FLQQ_", "data": {"kind": "«term_<=<_»", "forms": [{"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "<=<", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}], "«term_<*_» [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"<*\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "_FLQQ_term__LT______FLQQ_-next", "data": {"kind": "«term_<*_»", "forms": [{"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "<*", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}], "«term_<*>_» [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"<*>\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "_FLQQ_term__LT_____GT___FLQQ_-next-next", "data": {"kind": "«term_<*>_»", "forms": [{"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "<*>", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}], "«term_<&>_» [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"<&>\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "_FLQQ_term__LT_____GT___FLQQ_-next", "data": {"kind": "«term_<&>_»", "forms": [{"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "<&>", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}], "«term_<$>_» [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"<$>\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "_FLQQ_term__LT_____GT___FLQQ_", "data": {"kind": "«term_<$>_»", "forms": [{"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "<$>", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}], "«term_::_» [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"::\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "_FLQQ_term_________FLQQ_-next-next-next-next-next-next-next-next", "data": {"kind": "«term_::_»", "forms": [{"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "::", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Basic-Types/Linked-Lists/"}], "«term_*>_» [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"*>\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "_FLQQ_term_____GT___FLQQ_-next", "data": {"kind": "«term_*>_»", "forms": [{"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "*>", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}], "«term_&&_» [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"&&\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "_FLQQ_term_________FLQQ_-next-next", "data": {"kind": "«term_&&_»", "forms": [{"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "&&", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Basic-Types/Booleans/"}], "«term[_]» [{\"string\": \"[\", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \"]\", \"kind\": \"keyword\"}]": [{"id": "_FLQQ_term_LSQ___RSQ__FLQQ_-next", "data": {"kind": "«term[_]»", "forms": [{"string": "[", "kind": "keyword"}, {"string": "…", "kind": "meta"}, {"string": "]", "kind": "keyword"}], "category": null}, "address": "/Basic-Types/Linked-Lists/"}, {"id": "_FLQQ_term_LSQ___RSQ__FLQQ_", "data": {"kind": "«term[_]»", "forms": [{"string": "[", "kind": "keyword"}, {"string": "…", "kind": "meta"}, {"string": "]", "kind": "keyword"}], "category": null}, "address": "/Terms/Numeric-Literals/"}], "«termExists_,_» [{\"string\": \"exists\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \",\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "_FLQQ_termExists______FLQQ_-next", "data": {"kind": "«termExists_,_»", "forms": [{"string": "exists", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": ",", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Basic-Propositions/Quantifiers/"}], "«termExists_,_» [{\"string\": \"exists\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \":\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")?\", \"kind\": \"meta\"},\n {\"string\": \",\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "_FLQQ_termExists______FLQQ_", "data": {"kind": "«termExists_,_»", "forms": [{"string": "exists", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "meta"}, {"string": ":", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")?", "kind": "meta"}, {"string": ",", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Basic-Propositions/Quantifiers/"}], "«term#[_,]» [{\"string\": \"#[\", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \"]\", \"kind\": \"keyword\"}]": [{"id": "_FLQQ_term____LSQ______RSQ__FLQQ_-next", "data": {"kind": "«term#[_,]»", "forms": [{"string": "#[", "kind": "keyword"}, {"string": "…", "kind": "meta"}, {"string": "]", "kind": "keyword"}], "category": null}, "address": "/Basic-Types/Arrays/"}, {"id": "_FLQQ_term____LSQ______RSQ__FLQQ_", "data": {"kind": "«term#[_,]»", "forms": [{"string": "#[", "kind": "keyword"}, {"string": "…", "kind": "meta"}, {"string": "]", "kind": "keyword"}], "category": null}, "address": "/Terms/Numeric-Literals/"}], "«stx_<|>_» [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"<|>\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "_FLQQ_stx__LT_____GT___FLQQ_", "data": {"kind": "«stx_<|>_»", "forms": [{"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "<|>", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "«stx_,+» [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \",+\", \"kind\": \"keyword\"}]": [{"id": "_FLQQ_stx________FLQQ_-next", "data": {"kind": "«stx_,+»", "forms": [{"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": ",+", "kind": "keyword"}], "category": null}, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "«stx_,+,?» [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \",+,?\", \"kind\": \"keyword\"}]": [{"id": "_FLQQ_stx______________FLQQ_-next", "data": {"kind": "«stx_,+,?»", "forms": [{"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": ",+,?", "kind": "keyword"}], "category": null}, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "«stx_,*» [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \",*\", \"kind\": \"keyword\"}]": [{"id": "_FLQQ_stx________FLQQ_", "data": {"kind": "«stx_,*»", "forms": [{"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": ",*", "kind": "keyword"}], "category": null}, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "«stx_,*,?» [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \",*,?\", \"kind\": \"keyword\"}]": [{"id": "_FLQQ_stx______________FLQQ_", "data": {"kind": "«stx_,*,?»", "forms": [{"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": ",*,?", "kind": "keyword"}], "category": null}, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "«stx_+» [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"+\", \"kind\": \"keyword\"}]": [{"id": "_FLQQ_stx_____FLQQ_-next", "data": {"kind": "«stx_+»", "forms": [{"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "+", "kind": "keyword"}], "category": null}, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "«stx_*» [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"*\", \"kind\": \"keyword\"}]": [{"id": "_FLQQ_stx_____FLQQ_", "data": {"kind": "«stx_*»", "forms": [{"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "*", "kind": "keyword"}], "category": null}, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "«prio(_)» [{\"string\": \"(\", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")\", \"kind\": \"keyword\"}]": [{"id": "_FLQQ_prio_LPAR___RPAR__FLQQ_", "data": {"kind": "«prio(_)»", "forms": [{"string": "(", "kind": "keyword"}, {"string": "…", "kind": "meta"}, {"string": ")", "kind": "keyword"}], "category": null}, "address": "/Type-Classes/Instance-Declarations/"}], "«prec(_)» [{\"string\": \"(\", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")\", \"kind\": \"keyword\"}]": [{"id": "_FLQQ_prec_LPAR___RPAR__FLQQ_", "data": {"kind": "«prec(_)»", "forms": [{"string": "(", "kind": "keyword"}, {"string": "…", "kind": "meta"}, {"string": ")", "kind": "keyword"}], "category": null}, "address": "/Notations-and-Macros/Precedence/"}], "termIfThenElse [{\"string\": \"if\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"then\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"else\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "termIfThenElse", "data": {"kind": "termIfThenElse", "forms": [{"string": "if", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "then", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "else", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Terms/Conditionals/"}], "termIfLet [{\"string\": \"if\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"let\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":=\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"then\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"else\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "termIfLet", "data": {"kind": "termIfLet", "forms": [{"string": "if", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "let", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": ":=", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "then", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "else", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Terms/Conditionals/"}], "termDepIfThenElse [{\"string\": \"if\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"then\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"else\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "termDepIfThenElse", "data": {"kind": "termDepIfThenElse", "forms": [{"string": "if", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": ":", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "then", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "else", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Terms/Conditionals/"}], "term!_ [{\"string\": \"!\", \"kind\": \"keyword\"}, {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "term____", "data": {"kind": "term!_", "forms": [{"string": "!", "kind": "keyword"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Basic-Types/Booleans/"}], "stx_? [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"?\", \"kind\": \"keyword\"}]": [{"id": "stx____", "data": {"kind": "stx_?", "forms": [{"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "?", "kind": "keyword"}], "category": null}, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "stx!_ [{\"string\": \"!\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "stx____-next", "data": {"kind": "stx!_", "forms": [{"string": "!", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "str.antiquot [{\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "str___antiquot", "data": {"kind": "str.antiquot", "forms": [{"string": "…", "kind": "meta"}], "category": null}, "address": "/Notations-and-Macros/Notations/"}], "prioMid [{\"string\": \"mid\", \"kind\": \"keyword\"}]": [{"id": "prioMid", "data": {"kind": "prioMid", "forms": [{"string": "mid", "kind": "keyword"}], "category": null}, "address": "/Type-Classes/Instance-Declarations/"}], "prioLow [{\"string\": \"low\", \"kind\": \"keyword\"}]": [{"id": "prioLow", "data": {"kind": "prioLow", "forms": [{"string": "low", "kind": "keyword"}], "category": null}, "address": "/Type-Classes/Instance-Declarations/"}], "prioHigh [{\"string\": \"high\", \"kind\": \"keyword\"}]": [{"id": "prioHigh", "data": {"kind": "prioHigh", "forms": [{"string": "high", "kind": "keyword"}], "category": null}, "address": "/Type-Classes/Instance-Declarations/"}], "prioDefault [{\"string\": \"default\", \"kind\": \"keyword\"}]": [{"id": "prioDefault", "data": {"kind": "prioDefault", "forms": [{"string": "default", "kind": "keyword"}], "category": null}, "address": "/Type-Classes/Instance-Declarations/"}], "precMin [{\"string\": \"min\", \"kind\": \"keyword\"}]": [{"id": "precMin", "data": {"kind": "precMin", "forms": [{"string": "min", "kind": "keyword"}], "category": null}, "address": "/Notations-and-Macros/Precedence/"}], "precMax [{\"string\": \"max\", \"kind\": \"keyword\"}]": [{"id": "precMax", "data": {"kind": "precMax", "forms": [{"string": "max", "kind": "keyword"}], "category": null}, "address": "/Notations-and-Macros/Precedence/"}], "precLead [{\"string\": \"lead\", \"kind\": \"keyword\"}]": [{"id": "precLead", "data": {"kind": "precLead", "forms": [{"string": "lead", "kind": "keyword"}], "category": null}, "address": "/Notations-and-Macros/Precedence/"}], "precArg [{\"string\": \"arg\", \"kind\": \"keyword\"}]": [{"id": "precArg", "data": {"kind": "precArg", "forms": [{"string": "arg", "kind": "keyword"}], "category": null}, "address": "/Notations-and-Macros/Precedence/"}], "num.antiquot [{\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "num___antiquot-next", "data": {"kind": "num.antiquot", "forms": [{"string": "…", "kind": "meta"}], "category": null}, "address": "/Notations-and-Macros/Precedence/"}, {"id": "num___antiquot", "data": {"kind": "num.antiquot", "forms": [{"string": "…", "kind": "meta"}], "category": null}, "address": "/Type-Classes/Instance-Declarations/"}], "ident.antiquot [{\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "ident___antiquot", "data": {"kind": "ident.antiquot", "forms": [{"string": "…", "kind": "meta"}], "category": null}, "address": "/Terms/Functions/"}], "coeSortNotation [{\"string\": \"↥\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "coeSortNotation", "data": {"kind": "coeSortNotation", "forms": [{"string": "↥", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Coercions/Coercing-to-Sorts/"}], "coeNotation [{\"string\": \"↑\", \"kind\": \"keyword\"}, {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "coeNotation", "data": {"kind": "coeNotation", "forms": [{"string": "↑", "kind": "keyword"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Coercions/Coercing-Between-Types/"}], "coeFunNotation [{\"string\": \"⇑\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "coeFunNotation", "data": {"kind": "coeFunNotation", "forms": [{"string": "⇑", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Coercions/Coercing-to-Function-Types/"}], "boolIfThenElse [{\"string\": \"bif\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"then\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"else\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "boolIfThenElse", "data": {"kind": "boolIfThenElse", "forms": [{"string": "bif", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "then", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "else", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Terms/Conditionals/"}], "Std.«term_<..._» [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \"<...\", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Std____FLQQ_term__LT____________FLQQ_", "data": {"kind": "Std.«term_<..._»", "forms": [{"string": "…", "kind": "meta"}, {"string": "<...", "kind": "keyword"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Basic-Types/Ranges/"}], "Std.«term_<...=_» [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \"<...=\", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Std____FLQQ_term__LT_______________FLQQ_", "data": {"kind": "Std.«term_<...=_»", "forms": [{"string": "…", "kind": "meta"}, {"string": "<...=", "kind": "keyword"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Basic-Types/Ranges/"}], "Std.«term_<...<_» [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \"<...<\", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Std____FLQQ_term__LT___________LT___FLQQ_", "data": {"kind": "Std.«term_<...<_»", "forms": [{"string": "…", "kind": "meta"}, {"string": "<...<", "kind": "keyword"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Basic-Types/Ranges/"}], "Std.«term_<...*» [{\"string\": \"…\", \"kind\": \"meta\"}, {\"string\": \"<...*\", \"kind\": \"keyword\"}]": [{"id": "Std____FLQQ_term__LT______________FLQQ_", "data": {"kind": "Std.«term_<...*»", "forms": [{"string": "…", "kind": "meta"}, {"string": "<...*", "kind": "keyword"}], "category": null}, "address": "/Basic-Types/Ranges/"}], "Std.«term_..._» [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \"...\", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Std____FLQQ_term____________FLQQ_", "data": {"kind": "Std.«term_..._»", "forms": [{"string": "…", "kind": "meta"}, {"string": "...", "kind": "keyword"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Basic-Types/Ranges/"}], "Std.«term_...=_» [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \"...=\", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Std____FLQQ_term_______________FLQQ_", "data": {"kind": "Std.«term_...=_»", "forms": [{"string": "…", "kind": "meta"}, {"string": "...=", "kind": "keyword"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Basic-Types/Ranges/"}], "Std.«term_...<_» [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \"...<\", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Std____FLQQ_term___________LT___FLQQ_", "data": {"kind": "Std.«term_...<_»", "forms": [{"string": "…", "kind": "meta"}, {"string": "...<", "kind": "keyword"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Basic-Types/Ranges/"}], "Std.«term_...*» [{\"string\": \"…\", \"kind\": \"meta\"}, {\"string\": \"...*\", \"kind\": \"keyword\"}]": [{"id": "Std____FLQQ_term______________FLQQ_", "data": {"kind": "Std.«term_...*»", "forms": [{"string": "…", "kind": "meta"}, {"string": "...*", "kind": "keyword"}], "category": null}, "address": "/Basic-Types/Ranges/"}], "Std.«term*..._» [{\"string\": \"*...\", \"kind\": \"keyword\"}, {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Std____FLQQ_term______________FLQQ_-next", "data": {"kind": "Std.«term*..._»", "forms": [{"string": "*...", "kind": "keyword"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Basic-Types/Ranges/"}], "Std.«term*...=_» [{\"string\": \"*...=\", \"kind\": \"keyword\"}, {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Std____FLQQ_term_________________FLQQ_", "data": {"kind": "Std.«term*...=_»", "forms": [{"string": "*...=", "kind": "keyword"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Basic-Types/Ranges/"}], "Std.«term*...<_» [{\"string\": \"*...<\", \"kind\": \"keyword\"}, {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Std____FLQQ_term_____________LT___FLQQ_", "data": {"kind": "Std.«term*...<_»", "forms": [{"string": "*...<", "kind": "keyword"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Basic-Types/Ranges/"}], "Std.«term*...*» [{\"string\": \"*...*\", \"kind\": \"keyword\"}]": [{"id": "Std____FLQQ_term________________FLQQ_", "data": {"kind": "Std.«term*...*»", "forms": [{"string": "*...*", "kind": "keyword"}], "category": null}, "address": "/Basic-Types/Ranges/"}], "Std.Tactic.Do.mgoalStx [{\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")*\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"⊢ₛ\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Std___Tactic___Do___mgoalStx-next", "data": {"kind": "Std.Tactic.Do.mgoalStx", "forms": [{"string": "(", "kind": "meta"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": ":", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")*", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "⊢ₛ", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/The--mvcgen--tactic/Proof-Mode/"}], "Std.HashMap.«term_~m_» [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"~m\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Std___HashMap____FLQQ_term____m__FLQQ_", "data": {"kind": "Std.HashMap.«term_~m_»", "forms": [{"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "~m", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Basic-Types/Maps-and-Sets/"}, {"id": "Std___HashMap____FLQQ_term____m__FLQQ_-next", "data": {"kind": "Std.HashMap.«term_~m_»", "forms": [{"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "~m", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Basic-Types/Maps-and-Sets/"}], "Std.Do.«term⌜_⌝» [{\"string\": \"⌜\", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \"⌝\", \"kind\": \"keyword\"}]": [{"id": "Std___Do____FLQQ_term________FLQQ_", "data": {"kind": "Std.Do.«term⌜_⌝»", "forms": [{"string": "⌜", "kind": "keyword"}, {"string": "…", "kind": "meta"}, {"string": "⌝", "kind": "keyword"}], "category": null}, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.«term⊢ₛ_» [{\"string\": \"⊢ₛ\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Std___Do____FLQQ_term_VDASH______FLQQ_", "data": {"kind": "Std.Do.«term⊢ₛ_»", "forms": [{"string": "⊢ₛ", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.«term_⊣⊢ₛ_» [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"⊣⊢ₛ\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Std___Do____FLQQ_term_____VDASH______FLQQ_", "data": {"kind": "Std.Do.«term_⊣⊢ₛ_»", "forms": [{"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "⊣⊢ₛ", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.«term_⊢ₛ_» [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"⊢ₛ\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Std___Do____FLQQ_term__VDASH______FLQQ_", "data": {"kind": "Std.Do.«term_⊢ₛ_»", "forms": [{"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "⊢ₛ", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.«term_⊢ₚ_» [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"⊢ₚ\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Std___Do____FLQQ_term__VDASH______FLQQ_-next", "data": {"kind": "Std.Do.«term_⊢ₚ_»", "forms": [{"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "⊢ₚ", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.«term_∧ₚ_» [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"∧ₚ\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Std___Do____FLQQ_term_________FLQQ_", "data": {"kind": "Std.Do.«term_∧ₚ_»", "forms": [{"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "∧ₚ", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.«term_⇓_=>_» [{\"string\": \"⇓\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"=>\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Std___Do____FLQQ_term_________GT___FLQQ_", "data": {"kind": "Std.Do.«term_⇓_=>_»", "forms": [{"string": "⇓", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "=>", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}, {"id": "Std___Do____FLQQ_term_________GT___FLQQ_-next", "data": {"kind": "Std.Do.«term_⇓_=>_»", "forms": [{"string": "⇓", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "=>", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.«term_⇓?_=>_» [{\"string\": \"⇓?\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"=>\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Std___Do____FLQQ_term____________GT___FLQQ_", "data": {"kind": "Std.Do.«term_⇓?_=>_»", "forms": [{"string": "⇓?", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "=>", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.«term_→ₚ_» [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"→ₚ\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Std___Do____FLQQ_term__ARR______FLQQ_", "data": {"kind": "Std.Do.«term_→ₚ_»", "forms": [{"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "→ₚ", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.«termWp⟦_:_⟧» [{\"string\": \"wp⟦\", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \":\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")?\", \"kind\": \"meta\"},\n {\"string\": \"⟧\", \"kind\": \"keyword\"}]": [{"id": "Std___Do____FLQQ_termWp____________FLQQ_", "data": {"kind": "Std.Do.«termWp⟦_:_⟧»", "forms": [{"string": "wp⟦", "kind": "keyword"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "meta"}, {"string": ":", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")?", "kind": "meta"}, {"string": "⟧", "kind": "keyword"}], "category": null}, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.«termTerm(_)» [{\"string\": \"term(\", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")\", \"kind\": \"keyword\"}]": [{"id": "Std___Do____FLQQ_termTerm_LPAR___RPAR__FLQQ_", "data": {"kind": "Std.Do.«termTerm(_)»", "forms": [{"string": "term(", "kind": "keyword"}, {"string": "…", "kind": "meta"}, {"string": ")", "kind": "keyword"}], "category": null}, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.«termSpred(_)» [{\"string\": \"spred(\", \"kind\": \"keyword\"},\n {\"string\": \"∃\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \",\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")\", \"kind\": \"keyword\"}]": [{"id": "Std___Do____FLQQ_termSpred_LPAR___RPAR__FLQQ_-next-next-next-next-next-next-next-next-next-next-next-next", "data": {"kind": "Std.Do.«termSpred(_)»", "forms": [{"string": "spred(", "kind": "keyword"}, {"string": "∃", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ",", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")", "kind": "keyword"}], "category": null}, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.«termSpred(_)» [{\"string\": \"spred(\", \"kind\": \"keyword\"},\n {\"string\": \"∃\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \",\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")\", \"kind\": \"keyword\"}]": [{"id": "Std___Do____FLQQ_termSpred_LPAR___RPAR__FLQQ_-next-next-next-next-next-next-next-next-next-next-next-next-next", "data": {"kind": "Std.Do.«termSpred(_)»", "forms": [{"string": "spred(", "kind": "keyword"}, {"string": "∃", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": ":", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ",", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")", "kind": "keyword"}], "category": null}, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.«termSpred(_)» [{\"string\": \"spred(\", \"kind\": \"keyword\"},\n {\"string\": \"∃\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"_\", \"kind\": \"keyword\"},\n {\"string\": \",\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")\", \"kind\": \"keyword\"}]": [{"id": "Std___Do____FLQQ_termSpred_LPAR___RPAR__FLQQ_-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next", "data": {"kind": "Std.Do.«termSpred(_)»", "forms": [{"string": "spred(", "kind": "keyword"}, {"string": "∃", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "_", "kind": "keyword"}, {"string": ",", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")", "kind": "keyword"}], "category": null}, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.«termSpred(_)» [{\"string\": \"spred(\", \"kind\": \"keyword\"},\n {\"string\": \"∃\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"_\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \",\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")\", \"kind\": \"keyword\"}]": [{"id": "Std___Do____FLQQ_termSpred_LPAR___RPAR__FLQQ_-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next", "data": {"kind": "Std.Do.«termSpred(_)»", "forms": [{"string": "spred(", "kind": "keyword"}, {"string": "∃", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "_", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": ":", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ",", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")", "kind": "keyword"}], "category": null}, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.«termSpred(_)» [{\"string\": \"spred(\", \"kind\": \"keyword\"},\n {\"string\": \"∃\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")\", \"kind\": \"keyword\"},\n {\"string\": \",\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")\", \"kind\": \"keyword\"}]": [{"id": "Std___Do____FLQQ_termSpred_LPAR___RPAR__FLQQ_-next-next-next-next-next-next-next-next-next-next-next-next-next-next", "data": {"kind": "Std.Do.«termSpred(_)»", "forms": [{"string": "spred(", "kind": "keyword"}, {"string": "∃", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "keyword"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": ":", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")", "kind": "keyword"}, {"string": ",", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")", "kind": "keyword"}], "category": null}, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.«termSpred(_)» [{\"string\": \"spred(\", \"kind\": \"keyword\"},\n {\"string\": \"∃\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"keyword\"},\n {\"string\": \"_\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")\", \"kind\": \"keyword\"},\n {\"string\": \",\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")\", \"kind\": \"keyword\"}]": [{"id": "Std___Do____FLQQ_termSpred_LPAR___RPAR__FLQQ_-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next", "data": {"kind": "Std.Do.«termSpred(_)»", "forms": [{"string": "spred(", "kind": "keyword"}, {"string": "∃", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "keyword"}, {"string": "_", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": ":", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")", "kind": "keyword"}, {"string": ",", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")", "kind": "keyword"}], "category": null}, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.«termSpred(_)» [{\"string\": \"spred(\", \"kind\": \"keyword\"},\n {\"string\": \"∀\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \",\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")\", \"kind\": \"keyword\"}]": [{"id": "Std___Do____FLQQ_termSpred_LPAR___RPAR__FLQQ_-next-next-next-next-next-next", "data": {"kind": "Std.Do.«termSpred(_)»", "forms": [{"string": "spred(", "kind": "keyword"}, {"string": "∀", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ",", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")", "kind": "keyword"}], "category": null}, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.«termSpred(_)» [{\"string\": \"spred(\", \"kind\": \"keyword\"},\n {\"string\": \"∀\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \",\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")\", \"kind\": \"keyword\"}]": [{"id": "Std___Do____FLQQ_termSpred_LPAR___RPAR__FLQQ_-next-next-next-next-next-next-next", "data": {"kind": "Std.Do.«termSpred(_)»", "forms": [{"string": "spred(", "kind": "keyword"}, {"string": "∀", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": ":", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ",", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")", "kind": "keyword"}], "category": null}, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.«termSpred(_)» [{\"string\": \"spred(\", \"kind\": \"keyword\"},\n {\"string\": \"∀\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"_\", \"kind\": \"keyword\"},\n {\"string\": \",\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")\", \"kind\": \"keyword\"}]": [{"id": "Std___Do____FLQQ_termSpred_LPAR___RPAR__FLQQ_-next-next-next-next-next-next-next-next-next", "data": {"kind": "Std.Do.«termSpred(_)»", "forms": [{"string": "spred(", "kind": "keyword"}, {"string": "∀", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "_", "kind": "keyword"}, {"string": ",", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")", "kind": "keyword"}], "category": null}, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.«termSpred(_)» [{\"string\": \"spred(\", \"kind\": \"keyword\"},\n {\"string\": \"∀\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"_\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \",\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")\", \"kind\": \"keyword\"}]": [{"id": "Std___Do____FLQQ_termSpred_LPAR___RPAR__FLQQ_-next-next-next-next-next-next-next-next-next-next", "data": {"kind": "Std.Do.«termSpred(_)»", "forms": [{"string": "spred(", "kind": "keyword"}, {"string": "∀", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "_", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": ":", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ",", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")", "kind": "keyword"}], "category": null}, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.«termSpred(_)» [{\"string\": \"spred(\", \"kind\": \"keyword\"},\n {\"string\": \"∀\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")\", \"kind\": \"keyword\"},\n {\"string\": \",\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")\", \"kind\": \"keyword\"}]": [{"id": "Std___Do____FLQQ_termSpred_LPAR___RPAR__FLQQ_-next-next-next-next-next-next-next-next", "data": {"kind": "Std.Do.«termSpred(_)»", "forms": [{"string": "spred(", "kind": "keyword"}, {"string": "∀", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "keyword"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": ":", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")", "kind": "keyword"}, {"string": ",", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")", "kind": "keyword"}], "category": null}, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.«termSpred(_)» [{\"string\": \"spred(\", \"kind\": \"keyword\"},\n {\"string\": \"∀\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"keyword\"},\n {\"string\": \"_\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")\", \"kind\": \"keyword\"},\n {\"string\": \",\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")\", \"kind\": \"keyword\"}]": [{"id": "Std___Do____FLQQ_termSpred_LPAR___RPAR__FLQQ_-next-next-next-next-next-next-next-next-next-next-next", "data": {"kind": "Std.Do.«termSpred(_)»", "forms": [{"string": "spred(", "kind": "keyword"}, {"string": "∀", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "keyword"}, {"string": "_", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": ":", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")", "kind": "keyword"}, {"string": ",", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")", "kind": "keyword"}], "category": null}, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.«termSpred(_)» [{\"string\": \"spred(\", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")\", \"kind\": \"keyword\"}]": [{"id": "Std___Do____FLQQ_termSpred_LPAR___RPAR__FLQQ_", "data": {"kind": "Std.Do.«termSpred(_)»", "forms": [{"string": "spred(", "kind": "keyword"}, {"string": "…", "kind": "meta"}, {"string": ")", "kind": "keyword"}], "category": null}, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.«termSpred(_)» [{\"string\": \"spred(\", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"∨\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")\", \"kind\": \"keyword\"}]": [{"id": "Std___Do____FLQQ_termSpred_LPAR___RPAR__FLQQ_-next-next", "data": {"kind": "Std.Do.«termSpred(_)»", "forms": [{"string": "spred(", "kind": "keyword"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "∨", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")", "kind": "keyword"}], "category": null}, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.«termSpred(_)» [{\"string\": \"spred(\", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"∧\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")\", \"kind\": \"keyword\"}]": [{"id": "Std___Do____FLQQ_termSpred_LPAR___RPAR__FLQQ_-next", "data": {"kind": "Std.Do.«termSpred(_)»", "forms": [{"string": "spred(", "kind": "keyword"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "∧", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")", "kind": "keyword"}], "category": null}, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.«termSpred(_)» [{\"string\": \"spred(\", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"↔\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")\", \"kind\": \"keyword\"}]": [{"id": "Std___Do____FLQQ_termSpred_LPAR___RPAR__FLQQ_-next-next-next-next-next", "data": {"kind": "Std.Do.«termSpred(_)»", "forms": [{"string": "spred(", "kind": "keyword"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "↔", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")", "kind": "keyword"}], "category": null}, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.«termSpred(_)» [{\"string\": \"spred(\", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"→\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")\", \"kind\": \"keyword\"}]": [{"id": "Std___Do____FLQQ_termSpred_LPAR___RPAR__FLQQ_-next-next-next-next", "data": {"kind": "Std.Do.«termSpred(_)»", "forms": [{"string": "spred(", "kind": "keyword"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "→", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")", "kind": "keyword"}], "category": null}, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.«termSpred(_)» [{\"string\": \"spred(\", \"kind\": \"keyword\"},\n {\"string\": \"¬\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")\", \"kind\": \"keyword\"}]": [{"id": "Std___Do____FLQQ_termSpred_LPAR___RPAR__FLQQ_-next-next-next", "data": {"kind": "Std.Do.«termSpred(_)»", "forms": [{"string": "spred(", "kind": "keyword"}, {"string": "¬", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")", "kind": "keyword"}], "category": null}, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.Do.triple [{\"string\": \"⦃\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"⦄\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"⦃\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"⦄\", \"kind\": \"keyword\"}]": [{"id": "Std___Do___triple", "data": {"kind": "Std.Do.triple", "forms": [{"string": "⦃", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "⦄", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "⦃", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "⦄", "kind": "keyword"}], "category": null}, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Std.DHashMap.«term_~m_» [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"~m\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Std___DHashMap____FLQQ_term____m__FLQQ_", "data": {"kind": "Std.DHashMap.«term_~m_»", "forms": [{"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "~m", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Basic-Types/Maps-and-Sets/"}], "Manual.FreeSyntax.more []": [{"id": "Manual___FreeSyntax___more-next-next-next", "data": {"kind": "Manual.FreeSyntax.more", "forms": [], "category": null}, "address": "/Notations-and-Macros/Macros/"}, {"id": "Manual___FreeSyntax___more-next-next", "data": {"kind": "Manual.FreeSyntax.more", "forms": [], "category": null}, "address": "/Notations-and-Macros/Macros/"}, {"id": "Manual___FreeSyntax___more", "data": {"kind": "Manual.FreeSyntax.more", "forms": [], "category": null}, "address": "/Terms/Function-Application/"}, {"id": "Manual___FreeSyntax___more-next", "data": {"kind": "Manual.FreeSyntax.more", "forms": [], "category": null}, "address": "/Terms/Function-Application/"}], "Manual.FreeSyntax.embed [{\"string\": \"fun \", \"kind\": \"keyword\"},\n {\"string\": \"(\", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \": \", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")\", \"kind\": \"keyword\"},\n {\"string\": \" =>\", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Manual___FreeSyntax___embed", "data": {"kind": "Manual.FreeSyntax.embed", "forms": [{"string": "fun ", "kind": "keyword"}, {"string": "(", "kind": "keyword"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": ": ", "kind": "keyword"}, {"string": "…", "kind": "meta"}, {"string": ")", "kind": "keyword"}, {"string": " =>", "kind": "keyword"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Terms/Functions/"}], "Manual.FreeSyntax.done []": [{"id": "Manual___FreeSyntax___done-next-next", "data": {"kind": "Manual.FreeSyntax.done", "forms": [], "category": null}, "address": "/Build-Tools-and-Distribution/Lake/"}, {"id": "Manual___FreeSyntax___done-next", "data": {"kind": "Manual.FreeSyntax.done", "forms": [], "category": null}, "address": "/Build-Tools-and-Distribution/Lake/"}, {"id": "Manual___FreeSyntax___done", "data": {"kind": "Manual.FreeSyntax.done", "forms": [], "category": null}, "address": "/Notations-and-Macros/Macros/"}], "List.«term_~_» [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"~\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "List____FLQQ_term______FLQQ_", "data": {"kind": "List.«term_~_»", "forms": [{"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "~", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Basic-Types/Linked-Lists/"}], "List.«term_<:+_» [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"<:+\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "List____FLQQ_term__LT_________FLQQ_-next", "data": {"kind": "List.«term_<:+_»", "forms": [{"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "<:+", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Basic-Types/Linked-Lists/"}], "List.«term_<:+:_» [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"<:+:\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "List____FLQQ_term__LT____________FLQQ_", "data": {"kind": "List.«term_<:+:_»", "forms": [{"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "<:+:", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Basic-Types/Linked-Lists/"}], "List.«term_<+_» [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"<+\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "List____FLQQ_term__LT______FLQQ_", "data": {"kind": "List.«term_<+_»", "forms": [{"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "<+", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Basic-Types/Linked-Lists/"}], "List.«term_<+:_» [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"<+:\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "List____FLQQ_term__LT_________FLQQ_", "data": {"kind": "List.«term_<+:_»", "forms": [{"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "<+:", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Basic-Types/Linked-Lists/"}], "Lean.«term_Matches_|» [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"matches\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean____FLQQ_term_Matches_____FLQQ_", "data": {"kind": "Lean.«term_Matches_|»", "forms": [{"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "matches", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Terms/Pattern-Matching/"}], "Lean.reduceCmd [{\"string\": \"#reduce\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"(\", \"kind\": \"keyword\"},\n {\"string\": \"proofs\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":=\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"true\", \"kind\": \"keyword\"},\n {\"string\": \")\", \"kind\": \"keyword\"},\n {\"string\": \")?\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"(\", \"kind\": \"keyword\"},\n {\"string\": \"types\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":=\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"true\", \"kind\": \"keyword\"},\n {\"string\": \")\", \"kind\": \"keyword\"},\n {\"string\": \")?\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___reduceCmd", "data": {"kind": "Lean.reduceCmd", "forms": [{"string": "#reduce", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "meta"}, {"string": "(", "kind": "keyword"}, {"string": "proofs", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": ":=", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "true", "kind": "keyword"}, {"string": ")", "kind": "keyword"}, {"string": ")?", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "meta"}, {"string": "(", "kind": "keyword"}, {"string": "types", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": ":=", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "true", "kind": "keyword"}, {"string": ")", "kind": "keyword"}, {"string": ")?", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Interacting-with-Lean/"}], "Lean.guardMsgsWhitespaceArg [{\"string\": \"normalized\", \"kind\": \"keyword\"}]": [{"id": "Lean___guardMsgsWhitespaceArg-next-next-next", "data": {"kind": "Lean.guardMsgsWhitespaceArg", "forms": [{"string": "normalized", "kind": "keyword"}], "category": null}, "address": "/Interacting-with-Lean/"}], "Lean.guardMsgsWhitespaceArg [{\"string\": \"lax\", \"kind\": \"keyword\"}]": [{"id": "Lean___guardMsgsWhitespaceArg-next-next", "data": {"kind": "Lean.guardMsgsWhitespaceArg", "forms": [{"string": "lax", "kind": "keyword"}], "category": null}, "address": "/Interacting-with-Lean/"}], "Lean.guardMsgsWhitespaceArg [{\"string\": \"exact\", \"kind\": \"keyword\"}]": [{"id": "Lean___guardMsgsWhitespaceArg-next", "data": {"kind": "Lean.guardMsgsWhitespaceArg", "forms": [{"string": "exact", "kind": "keyword"}], "category": null}, "address": "/Interacting-with-Lean/"}], "Lean.guardMsgsSpecElt [{\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___guardMsgsSpecElt-next", "data": {"kind": "Lean.guardMsgsSpecElt", "forms": [{"string": "…", "kind": "meta"}], "category": null}, "address": "/Interacting-with-Lean/"}], "Lean.guardMsgsSpecElt [{\"string\": \"whitespace\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":=\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___guardMsgsSpecElt-next-next", "data": {"kind": "Lean.guardMsgsSpecElt", "forms": [{"string": "whitespace", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": ":=", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Interacting-with-Lean/"}], "Lean.guardMsgsSpecElt [{\"string\": \"ordering\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":=\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___guardMsgsSpecElt-next-next-next", "data": {"kind": "Lean.guardMsgsSpecElt", "forms": [{"string": "ordering", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": ":=", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Interacting-with-Lean/"}], "Lean.guardMsgsFilter [{\"string\": \"drop\", \"kind\": \"keyword\"},\n {\"string\": \"?\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"warning\", \"kind\": \"keyword\"}]": [{"id": "Lean___guardMsgsFilter-next-next-next", "data": {"kind": "Lean.guardMsgsFilter", "forms": [{"string": "drop", "kind": "keyword"}, {"string": "?", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "warning", "kind": "keyword"}], "category": null}, "address": "/Interacting-with-Lean/"}], "Lean.guardMsgsFilter [{\"string\": \"drop\", \"kind\": \"keyword\"},\n {\"string\": \"?\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"info\", \"kind\": \"keyword\"}]": [{"id": "Lean___guardMsgsFilter-next-next", "data": {"kind": "Lean.guardMsgsFilter", "forms": [{"string": "drop", "kind": "keyword"}, {"string": "?", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "info", "kind": "keyword"}], "category": null}, "address": "/Interacting-with-Lean/"}], "Lean.guardMsgsFilter [{\"string\": \"drop\", \"kind\": \"keyword\"},\n {\"string\": \"?\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"error\", \"kind\": \"keyword\"}]": [{"id": "Lean___guardMsgsFilter-next-next-next-next", "data": {"kind": "Lean.guardMsgsFilter", "forms": [{"string": "drop", "kind": "keyword"}, {"string": "?", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "error", "kind": "keyword"}], "category": null}, "address": "/Interacting-with-Lean/"}], "Lean.guardMsgsFilter [{\"string\": \"drop\", \"kind\": \"keyword\"},\n {\"string\": \"?\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"all\", \"kind\": \"keyword\"}]": [{"id": "Lean___guardMsgsFilter-next", "data": {"kind": "Lean.guardMsgsFilter", "forms": [{"string": "drop", "kind": "keyword"}, {"string": "?", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "all", "kind": "keyword"}], "category": null}, "address": "/Interacting-with-Lean/"}], "Lean.guardMsgsCmd [{\"string\": \"#guard_msgs\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"(\", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")\", \"kind\": \"keyword\"},\n {\"string\": \")?\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"in\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___guardMsgsCmd", "data": {"kind": "Lean.guardMsgsCmd", "forms": [{"string": "#guard_msgs", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "meta"}, {"string": "(", "kind": "keyword"}, {"string": "…", "kind": "meta"}, {"string": ")", "kind": "keyword"}, {"string": ")?", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "in", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Interacting-with-Lean/"}], "Lean.PrettyPrinter.Delaborator.attrApp_delab_ [{\"string\": \"app_delab\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___PrettyPrinter___Delaborator___attrApp_delab_", "data": {"kind": "Lean.PrettyPrinter.Delaborator.attrApp_delab_", "forms": [{"string": "app_delab", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Notations-and-Macros/Extending-Lean___s-Output/"}], "Lean.Parser.commandUnseal__ [{\"string\": \"unseal\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___commandUnseal__", "data": {"kind": "Lean.Parser.commandUnseal__", "forms": [{"string": "unseal", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Definitions/Recursive-Definitions/"}], "Lean.Parser.commandSeal__ [{\"string\": \"seal\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___commandSeal__", "data": {"kind": "Lean.Parser.commandSeal__", "forms": [{"string": "seal", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Definitions/Recursive-Definitions/"}], "Lean.Parser.Termination.terminationBy [{\"string\": \"termination_by\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"structural\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"=>\", \"kind\": \"keyword\"},\n {\"string\": \")?\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Termination___terminationBy-next", "data": {"kind": "Lean.Parser.Termination.terminationBy", "forms": [{"string": "termination_by", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "structural", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "meta"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "=>", "kind": "keyword"}, {"string": ")?", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Definitions/Recursive-Definitions/"}], "Lean.Parser.Termination.terminationBy [{\"string\": \"termination_by\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"=>\", \"kind\": \"keyword\"},\n {\"string\": \")?\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Termination___terminationBy-next-next-next", "data": {"kind": "Lean.Parser.Termination.terminationBy", "forms": [{"string": "termination_by", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "meta"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "=>", "kind": "keyword"}, {"string": ")?", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Definitions/Recursive-Definitions/"}], "Lean.Parser.Term.typeAscription [{\"string\": \"(\", \"kind\": \"keyword\"},\n {\"string\": \"[anonymous]\", \"kind\": \"literalIdent\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")\", \"kind\": \"keyword\"}]": [{"id": "Lean___Parser___Term___typeAscription-next", "data": {"kind": "Lean.Parser.Term.typeAscription", "forms": [{"string": "(", "kind": "keyword"}, {"string": "[anonymous]", "kind": "literalIdent"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": ":", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")", "kind": "keyword"}], "category": null}, "address": "/Terms/Type-Ascription/"}, {"id": "Lean___Parser___Term___typeAscription", "data": {"kind": "Lean.Parser.Term.typeAscription", "forms": [{"string": "(", "kind": "keyword"}, {"string": "[anonymous]", "kind": "literalIdent"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": ":", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")", "kind": "keyword"}], "category": null}, "address": "/Terms/Functions/"}], "Lean.Parser.Term.tuple [{\"string\": \"(\", \"kind\": \"keyword\"},\n {\"string\": \"[anonymous]\", \"kind\": \"literalIdent\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \",\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")\", \"kind\": \"keyword\"}]": [{"id": "Lean___Parser___Term___tuple", "data": {"kind": "Lean.Parser.Term.tuple", "forms": [{"string": "(", "kind": "keyword"}, {"string": "[anonymous]", "kind": "literalIdent"}, {"string": "…", "kind": "meta"}, {"string": ",", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")", "kind": "keyword"}], "category": null}, "address": "/Basic-Types/Tuples/"}], "Lean.Parser.Term.syntheticHole [{\"string\": \"?\", \"kind\": \"keyword\"}, {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Term___syntheticHole", "data": {"kind": "Lean.Parser.Term.syntheticHole", "forms": [{"string": "?", "kind": "keyword"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Terms/Holes/"}], "Lean.Parser.Term.syntheticHole [{\"string\": \"?\", \"kind\": \"keyword\"}, {\"string\": \"_\", \"kind\": \"keyword\"}]": [{"id": "Lean___Parser___Term___syntheticHole-next", "data": {"kind": "Lean.Parser.Term.syntheticHole", "forms": [{"string": "?", "kind": "keyword"}, {"string": "_", "kind": "keyword"}], "category": null}, "address": "/Terms/Holes/"}], "Lean.Parser.Term.subst [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"▸\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Term___subst", "data": {"kind": "Lean.Parser.Term.subst", "forms": [{"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "▸", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Basic-Propositions/Propositional-Equality/"}], "Lean.Parser.Term.structInstField [{\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Term___structInstField-next", "data": {"kind": "Lean.Parser.Term.structInstField", "forms": [{"string": "…", "kind": "meta"}], "category": null}, "address": "/The-Type-System/Inductive-Types/"}], "Lean.Parser.Term.structInstField [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":=\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"private\", \"kind\": \"keyword\"},\n {\"string\": \"?\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Term___structInstField", "data": {"kind": "Lean.Parser.Term.structInstField", "forms": [{"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": ":=", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "private", "kind": "keyword"}, {"string": "?", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/The-Type-System/Inductive-Types/"}], "Lean.Parser.Term.structInst [{\"string\": \"{\", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"with\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \":\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")?\", \"kind\": \"meta\"},\n {\"string\": \"}\", \"kind\": \"keyword\"}]": [{"id": "Lean___Parser___Term___structInst-next", "data": {"kind": "Lean.Parser.Term.structInst", "forms": [{"string": "{", "kind": "keyword"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "with", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "meta"}, {"string": ":", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")?", "kind": "meta"}, {"string": "}", "kind": "keyword"}], "category": null}, "address": "/The-Type-System/Inductive-Types/"}], "Lean.Parser.Term.structInst [{\"string\": \"{\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \":\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")?\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"}\", \"kind\": \"keyword\"}]": [{"id": "Lean___Parser___Term___structInst", "data": {"kind": "Lean.Parser.Term.structInst", "forms": [{"string": "{", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "meta"}, {"string": ":", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")?", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "}", "kind": "keyword"}], "category": null}, "address": "/The-Type-System/Inductive-Types/"}], "Lean.Parser.Term.strictImplicitBinder [{\"string\": \"⦃\", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"⦄\", \"kind\": \"keyword\"}]": [{"id": "Lean___Parser___Term___strictImplicitBinder-next-next", "data": {"kind": "Lean.Parser.Term.strictImplicitBinder", "forms": [{"string": "⦃", "kind": "keyword"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "⦄", "kind": "keyword"}], "category": null}, "address": "/Terms/Functions/"}], "Lean.Parser.Term.strictImplicitBinder [{\"string\": \"⦃\", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \"⦄\", \"kind\": \"keyword\"}]": [{"id": "Lean___Parser___Term___strictImplicitBinder", "data": {"kind": "Lean.Parser.Term.strictImplicitBinder", "forms": [{"string": "⦃", "kind": "keyword"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": ":", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": "⦄", "kind": "keyword"}], "category": null}, "address": "/Definitions/Headers-and-Signatures/"}], "Lean.Parser.Term.strictImplicitBinder [{\"string\": \"⦃\", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \"⦄\", \"kind\": \"keyword\"}]": [{"id": "Lean___Parser___Term___strictImplicitBinder-next-next-next", "data": {"kind": "Lean.Parser.Term.strictImplicitBinder", "forms": [{"string": "⦃", "kind": "keyword"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": ":", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": "⦄", "kind": "keyword"}], "category": null}, "address": "/Terms/Functions/"}], "Lean.Parser.Term.strictImplicitBinder [{\"string\": \"{\", \"kind\": \"keyword\"},\n {\"string\": \"{\", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \"}\", \"kind\": \"keyword\"},\n {\"string\": \"}\", \"kind\": \"keyword\"}]": [{"id": "Lean___Parser___Term___strictImplicitBinder-next", "data": {"kind": "Lean.Parser.Term.strictImplicitBinder", "forms": [{"string": "{", "kind": "keyword"}, {"string": "{", "kind": "keyword"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": ":", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": "}", "kind": "keyword"}, {"string": "}", "kind": "keyword"}], "category": null}, "address": "/Definitions/Headers-and-Signatures/"}], "Lean.Parser.Term.stateRefT [{\"string\": \"StateRefT\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Term___stateRefT", "data": {"kind": "Lean.Parser.Term.stateRefT", "forms": [{"string": "StateRefT", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Functors___-Monads-and--do--Notation/Varieties-of-Monads/"}], "Lean.Parser.Term.show [{\"string\": \"show\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"from\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Term___show", "data": {"kind": "Lean.Parser.Term.show", "forms": [{"string": "show", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "from", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Terms/Type-Ascription/"}], "Lean.Parser.Term.show [{\"string\": \"show\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"by\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Term___show-next", "data": {"kind": "Lean.Parser.Term.show", "forms": [{"string": "show", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "by", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Terms/Type-Ascription/"}], "Lean.Parser.Term.proj [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \".\", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Term___proj", "data": {"kind": "Lean.Parser.Term.proj", "forms": [{"string": "…", "kind": "meta"}, {"string": ".", "kind": "keyword"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Terms/Function-Application/"}], "Lean.Parser.Term.pipeProj [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"|>.\", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Term___pipeProj-next", "data": {"kind": "Lean.Parser.Term.pipeProj", "forms": [{"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "|>.", "kind": "keyword"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Terms/Function-Application/"}, {"id": "Lean___Parser___Term___pipeProj", "data": {"kind": "Lean.Parser.Term.pipeProj", "forms": [{"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "|>.", "kind": "keyword"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Terms/Function-Application/"}], "Lean.Parser.Term.paren [{\"string\": \"(\", \"kind\": \"keyword\"},\n {\"string\": \"[anonymous]\", \"kind\": \"literalIdent\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \")\", \"kind\": \"keyword\"}]": [{"id": "Lean___Parser___Term___paren", "data": {"kind": "Lean.Parser.Term.paren", "forms": [{"string": "(", "kind": "keyword"}, {"string": "[anonymous]", "kind": "literalIdent"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": ")", "kind": "keyword"}], "category": null}, "address": "/Terms/Functions/"}], "Lean.Parser.Term.nomatch [{\"string\": \"nomatch\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Term___nomatch", "data": {"kind": "Lean.Parser.Term.nomatch", "forms": [{"string": "nomatch", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Terms/Pattern-Matching/"}], "Lean.Parser.Term.nofun [{\"string\": \"nofun\", \"kind\": \"keyword\"}]": [{"id": "Lean___Parser___Term___nofun", "data": {"kind": "Lean.Parser.Term.nofun", "forms": [{"string": "nofun", "kind": "keyword"}], "category": null}, "address": "/Terms/Pattern-Matching/"}], "Lean.Parser.Term.namedPattern [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \"@\", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Term___namedPattern", "data": {"kind": "Lean.Parser.Term.namedPattern", "forms": [{"string": "…", "kind": "meta"}, {"string": "@", "kind": "keyword"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Terms/Pattern-Matching/"}], "Lean.Parser.Term.namedPattern [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \"@\", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \":\", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Term___namedPattern-next", "data": {"kind": "Lean.Parser.Term.namedPattern", "forms": [{"string": "…", "kind": "meta"}, {"string": "@", "kind": "keyword"}, {"string": "…", "kind": "meta"}, {"string": ":", "kind": "keyword"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Terms/Pattern-Matching/"}], "Lean.Parser.Term.matchDiscr [{\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Term___matchDiscr", "data": {"kind": "Lean.Parser.Term.matchDiscr", "forms": [{"string": "…", "kind": "meta"}], "category": null}, "address": "/Terms/Pattern-Matching/"}], "Lean.Parser.Term.matchDiscr [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Term___matchDiscr-next", "data": {"kind": "Lean.Parser.Term.matchDiscr", "forms": [{"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": ":", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Terms/Pattern-Matching/"}], "Lean.Parser.Term.match [{\"string\": \"match\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"(\", \"kind\": \"keyword\"},\n {\"string\": \"generalizing\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":=\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")\", \"kind\": \"keyword\"},\n {\"string\": \")?\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"(\", \"kind\": \"keyword\"},\n {\"string\": \"motive\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":=\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")\", \"kind\": \"keyword\"},\n {\"string\": \")?\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"with\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"|\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")|*\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"=>\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")*\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Term___match", "data": {"kind": "Lean.Parser.Term.match", "forms": [{"string": "match", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "meta"}, {"string": "(", "kind": "keyword"}, {"string": "generalizing", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": ":=", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")", "kind": "keyword"}, {"string": ")?", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "meta"}, {"string": "(", "kind": "keyword"}, {"string": "motive", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": ":=", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")", "kind": "keyword"}, {"string": ")?", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "with", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "meta"}, {"string": "|", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "meta"}, {"string": "…", "kind": "meta"}, {"string": ")|*", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "=>", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")*", "kind": "meta"}], "category": null}, "address": "/Terms/Pattern-Matching/"}], "Lean.Parser.Term.instBinder [{\"string\": \"[\", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \"]\", \"kind\": \"keyword\"}]": [{"id": "Lean___Parser___Term___instBinder-next", "data": {"kind": "Lean.Parser.Term.instBinder", "forms": [{"string": "[", "kind": "keyword"}, {"string": "…", "kind": "meta"}, {"string": "]", "kind": "keyword"}], "category": null}, "address": "/Terms/Functions/"}], "Lean.Parser.Term.instBinder [{\"string\": \"[\", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \"]\", \"kind\": \"keyword\"}]": [{"id": "Lean___Parser___Term___instBinder-next-next", "data": {"kind": "Lean.Parser.Term.instBinder", "forms": [{"string": "[", "kind": "keyword"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": ":", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": "]", "kind": "keyword"}], "category": null}, "address": "/Terms/Functions/"}], "Lean.Parser.Term.instBinder [{\"string\": \"[\", \"kind\": \"keyword\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":\", \"kind\": \"keyword\"},\n {\"string\": \")?\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \"]\", \"kind\": \"keyword\"}]": [{"id": "Lean___Parser___Term___instBinder", "data": {"kind": "Lean.Parser.Term.instBinder", "forms": [{"string": "[", "kind": "keyword"}, {"string": "(", "kind": "meta"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": ":", "kind": "keyword"}, {"string": ")?", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": "]", "kind": "keyword"}], "category": null}, "address": "/Definitions/Headers-and-Signatures/"}], "Lean.Parser.Term.inaccessible [{\"string\": \".(\", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")\", \"kind\": \"keyword\"}]": [{"id": "Lean___Parser___Term___inaccessible", "data": {"kind": "Lean.Parser.Term.inaccessible", "forms": [{"string": ".(", "kind": "keyword"}, {"string": "…", "kind": "meta"}, {"string": ")", "kind": "keyword"}], "category": null}, "address": "/Terms/Pattern-Matching/"}], "Lean.Parser.Term.implicitBinder [{\"string\": \"{\", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \"}\", \"kind\": \"keyword\"}]": [{"id": "Lean___Parser___Term___implicitBinder", "data": {"kind": "Lean.Parser.Term.implicitBinder", "forms": [{"string": "{", "kind": "keyword"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": ":", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": "}", "kind": "keyword"}], "category": null}, "address": "/Definitions/Headers-and-Signatures/"}], "Lean.Parser.Term.implicitBinder [{\"string\": \"{\", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"}\", \"kind\": \"keyword\"}]": [{"id": "Lean___Parser___Term___implicitBinder-next", "data": {"kind": "Lean.Parser.Term.implicitBinder", "forms": [{"string": "{", "kind": "keyword"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "}", "kind": "keyword"}], "category": null}, "address": "/Terms/Functions/"}], "Lean.Parser.Term.implicitBinder [{\"string\": \"{\", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \"}\", \"kind\": \"keyword\"}]": [{"id": "Lean___Parser___Term___implicitBinder-next-next", "data": {"kind": "Lean.Parser.Term.implicitBinder", "forms": [{"string": "{", "kind": "keyword"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": ":", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": "}", "kind": "keyword"}], "category": null}, "address": "/Terms/Functions/"}], "Lean.Parser.Term.hole [{\"string\": \"_\", \"kind\": \"keyword\"}]": [{"id": "Lean___Parser___Term___hole", "data": {"kind": "Lean.Parser.Term.hole", "forms": [{"string": "_", "kind": "keyword"}], "category": null}, "address": "/Terms/Holes/"}], "Lean.Parser.Term.fun [{\"string\": \"fun\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"=>\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Term___fun", "data": {"kind": "Lean.Parser.Term.fun", "forms": [{"string": "fun", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "=>", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Terms/Functions/"}, {"id": "Lean___Parser___Term___fun-next-next", "data": {"kind": "Lean.Parser.Term.fun", "forms": [{"string": "fun", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "=>", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Terms/Functions/"}, {"id": "Lean___Parser___Term___fun-next-next-next-next", "data": {"kind": "Lean.Parser.Term.fun", "forms": [{"string": "fun", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "=>", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Terms/Functions/"}], "Lean.Parser.Term.fun [{\"string\": \"fun\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"=>\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Term___fun-next-next-next", "data": {"kind": "Lean.Parser.Term.fun", "forms": [{"string": "fun", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": ":", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "=>", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Terms/Functions/"}, {"id": "Lean___Parser___Term___fun-next", "data": {"kind": "Lean.Parser.Term.fun", "forms": [{"string": "fun", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": ":", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "=>", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Terms/Functions/"}], "Lean.Parser.Term.fun [{\"string\": \"fun\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"|\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"=>\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")*\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Term___fun-next-next-next-next-next", "data": {"kind": "Lean.Parser.Term.fun", "forms": [{"string": "fun", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "meta"}, {"string": "|", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "=>", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")*", "kind": "meta"}], "category": null}, "address": "/Terms/Pattern-Matching/"}], "Lean.Parser.Term.forall [{\"string\": \"∀\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \",\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Term___forall-next-next", "data": {"kind": "Lean.Parser.Term.forall", "forms": [{"string": "∀", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ",", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Basic-Propositions/Quantifiers/"}], "Lean.Parser.Term.forall [{\"string\": \"∀\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \":\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")?\", \"kind\": \"meta\"},\n {\"string\": \",\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Term___forall", "data": {"kind": "Lean.Parser.Term.forall", "forms": [{"string": "∀", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "meta"}, {"string": ":", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")?", "kind": "meta"}, {"string": ",", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Basic-Propositions/Quantifiers/"}], "Lean.Parser.Term.forall [{\"string\": \"forall\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \",\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Term___forall-next-next-next", "data": {"kind": "Lean.Parser.Term.forall", "forms": [{"string": "forall", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ",", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Basic-Propositions/Quantifiers/"}], "Lean.Parser.Term.forall [{\"string\": \"forall\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \":\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")?\", \"kind\": \"meta\"},\n {\"string\": \",\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Term___forall-next", "data": {"kind": "Lean.Parser.Term.forall", "forms": [{"string": "forall", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "meta"}, {"string": ":", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")?", "kind": "meta"}, {"string": ",", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Basic-Propositions/Quantifiers/"}], "Lean.Parser.Term.explicitBinder [{\"string\": \"(\", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")\", \"kind\": \"keyword\"}]": [{"id": "Lean___Parser___Term___explicitBinder", "data": {"kind": "Lean.Parser.Term.explicitBinder", "forms": [{"string": "(", "kind": "keyword"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": ":", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")", "kind": "keyword"}], "category": null}, "address": "/Definitions/Headers-and-Signatures/"}], "Lean.Parser.Term.explicitBinder [{\"string\": \"(\", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":=\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")\", \"kind\": \"keyword\"}]": [{"id": "Lean___Parser___Term___explicitBinder-next", "data": {"kind": "Lean.Parser.Term.explicitBinder", "forms": [{"string": "(", "kind": "keyword"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": ":", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": ":=", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")", "kind": "keyword"}], "category": null}, "address": "/Definitions/Headers-and-Signatures/"}], "Lean.Parser.Term.doSeqItem [{\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Term___doSeqItem-next", "data": {"kind": "Lean.Parser.Term.doSeqItem", "forms": [{"string": "…", "kind": "meta"}], "category": null}, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}], "Lean.Parser.Term.doSeqItem [{\"string\": \"while\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"do\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Term___doSeqItem-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next", "data": {"kind": "Lean.Parser.Term.doSeqItem", "forms": [{"string": "while", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "do", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}], "Lean.Parser.Term.doSeqItem [{\"string\": \"while\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"do\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Term___doSeqItem-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next", "data": {"kind": "Lean.Parser.Term.doSeqItem", "forms": [{"string": "while", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": ":", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "do", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}], "Lean.Parser.Term.doSeqItem [{\"string\": \"unless\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"do\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Term___doSeqItem-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next", "data": {"kind": "Lean.Parser.Term.doSeqItem", "forms": [{"string": "unless", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "do", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}], "Lean.Parser.Term.doSeqItem [{\"string\": \"return\", \"kind\": \"keyword\"}]": [{"id": "Lean___Parser___Term___doSeqItem-next-next-next-next-next-next-next-next-next", "data": {"kind": "Lean.Parser.Term.doSeqItem", "forms": [{"string": "return", "kind": "keyword"}], "category": null}, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}], "Lean.Parser.Term.doSeqItem [{\"string\": \"return\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Term___doSeqItem-next-next-next-next-next-next-next-next", "data": {"kind": "Lean.Parser.Term.doSeqItem", "forms": [{"string": "return", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}], "Lean.Parser.Term.doSeqItem [{\"string\": \"repeat\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Term___doSeqItem-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next", "data": {"kind": "Lean.Parser.Term.doSeqItem", "forms": [{"string": "repeat", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}], "Lean.Parser.Term.doSeqItem [{\"string\": \"repeat\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"until\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Term___doSeqItem-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next", "data": {"kind": "Lean.Parser.Term.doSeqItem", "forms": [{"string": "repeat", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "until", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}], "Lean.Parser.Term.doSeqItem [{\"string\": \"match\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":\", \"kind\": \"keyword\"},\n {\"string\": \")?\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \"),*\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"with\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"|\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"=>\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")*\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Term___doSeqItem-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next", "data": {"kind": "Lean.Parser.Term.doSeqItem", "forms": [{"string": "match", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "meta"}, {"string": "(", "kind": "meta"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": ":", "kind": "keyword"}, {"string": ")?", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": "),*", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "with", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "meta"}, {"string": "|", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "=>", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")*", "kind": "meta"}], "category": null}, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}], "Lean.Parser.Term.doSeqItem [{\"string\": \"let\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \":\", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")?\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"←\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Term___doSeqItem-next-next-next", "data": {"kind": "Lean.Parser.Term.doSeqItem", "forms": [{"string": "let", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": "(", "kind": "meta"}, {"string": ":", "kind": "keyword"}, {"string": "…", "kind": "meta"}, {"string": ")?", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "←", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}], "Lean.Parser.Term.doSeqItem [{\"string\": \"let\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"←\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"|\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")?\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Term___doSeqItem-next-next-next-next", "data": {"kind": "Lean.Parser.Term.doSeqItem", "forms": [{"string": "let", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "←", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "meta"}, {"string": "|", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")?", "kind": "meta"}], "category": null}, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}], "Lean.Parser.Term.doSeqItem [{\"string\": \"let\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":=\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Term___doSeqItem-next-next-next-next-next-next", "data": {"kind": "Lean.Parser.Term.doSeqItem", "forms": [{"string": "let", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": ":=", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}], "Lean.Parser.Term.doSeqItem [{\"string\": \"let\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"mut\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"←\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Term___doSeqItem-next-next-next-next-next-next-next-next-next-next-next-next", "data": {"kind": "Lean.Parser.Term.doSeqItem", "forms": [{"string": "let", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "mut", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "←", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}], "Lean.Parser.Term.doSeqItem [{\"string\": \"let\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"mut\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":=\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Term___doSeqItem-next-next-next-next-next-next-next-next-next-next-next", "data": {"kind": "Lean.Parser.Term.doSeqItem", "forms": [{"string": "let", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "mut", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": ":=", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}], "Lean.Parser.Term.doSeqItem [{\"string\": \"if\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":\", \"kind\": \"keyword\"},\n {\"string\": \")?\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"then\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"else\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")?\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Term___doSeqItem-next-next-next-next-next-next-next-next-next-next-next-next-next-next", "data": {"kind": "Lean.Parser.Term.doSeqItem", "forms": [{"string": "if", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "meta"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": ":", "kind": "keyword"}, {"string": ")?", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "then", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "meta"}, {"string": "else", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")?", "kind": "meta"}], "category": null}, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}], "Lean.Parser.Term.doSeqItem [{\"string\": \"for\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":\", \"kind\": \"keyword\"},\n {\"string\": \")?\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"in\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \"),*\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"do\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Term___doSeqItem-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next", "data": {"kind": "Lean.Parser.Term.doSeqItem", "forms": [{"string": "for", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "meta"}, {"string": "(", "kind": "meta"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": ":", "kind": "keyword"}, {"string": ")?", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "in", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": "),*", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "do", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}], "Lean.Parser.Term.doSeqItem [{\"string\": \"continue\", \"kind\": \"keyword\"}]": [{"id": "Lean___Parser___Term___doSeqItem-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next", "data": {"kind": "Lean.Parser.Term.doSeqItem", "forms": [{"string": "continue", "kind": "keyword"}], "category": null}, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}], "Lean.Parser.Term.doSeqItem [{\"string\": \"break\", \"kind\": \"keyword\"}]": [{"id": "Lean___Parser___Term___doSeqItem-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next", "data": {"kind": "Lean.Parser.Term.doSeqItem", "forms": [{"string": "break", "kind": "keyword"}], "category": null}, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}], "Lean.Parser.Term.doReassignArrow [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \":\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")?\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"←\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Term___doReassignArrow", "data": {"kind": "Lean.Parser.Term.doReassignArrow", "forms": [{"string": "…", "kind": "meta"}, {"string": "(", "kind": "meta"}, {"string": ":", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")?", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "←", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}], "Lean.Parser.Term.doReassignArrow [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"←\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"|\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")?\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Term___doReassignArrow-next", "data": {"kind": "Lean.Parser.Term.doReassignArrow", "forms": [{"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "←", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "meta"}, {"string": "|", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")?", "kind": "meta"}], "category": null}, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}], "Lean.Parser.Term.doReassign [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \":\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")?\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":=\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Term___doReassign-next", "data": {"kind": "Lean.Parser.Term.doReassign", "forms": [{"string": "…", "kind": "meta"}, {"string": "(", "kind": "meta"}, {"string": ":", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")?", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": ":=", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}, {"id": "Lean___Parser___Term___doReassign", "data": {"kind": "Lean.Parser.Term.doReassign", "forms": [{"string": "…", "kind": "meta"}, {"string": "(", "kind": "meta"}, {"string": ":", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")?", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": ":=", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}], "Lean.Parser.Term.do [{\"string\": \"do\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Term___do", "data": {"kind": "Lean.Parser.Term.do", "forms": [{"string": "do", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Functors___-Monads-and--do--Notation/Syntax/"}], "Lean.Parser.Term.depArrow [{\"string\": \"⦃\", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \"⦄\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"→\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Term___depArrow-next-next-next-next-next-next-next", "data": {"kind": "Lean.Parser.Term.depArrow", "forms": [{"string": "⦃", "kind": "keyword"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": ":", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": "⦄", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "→", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Terms/Function-Types/"}], "Lean.Parser.Term.depArrow [{\"string\": \"{\", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \"}\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"→\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Term___depArrow-next-next-next-next", "data": {"kind": "Lean.Parser.Term.depArrow", "forms": [{"string": "{", "kind": "keyword"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": ":", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": "}", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "→", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Terms/Function-Types/"}], "Lean.Parser.Term.depArrow [{\"string\": \"[\", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \"]\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"→\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Term___depArrow-next-next-next-next-next", "data": {"kind": "Lean.Parser.Term.depArrow", "forms": [{"string": "[", "kind": "keyword"}, {"string": "…", "kind": "meta"}, {"string": "]", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "→", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Terms/Function-Types/"}], "Lean.Parser.Term.depArrow [{\"string\": \"[\", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \"]\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"→\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Term___depArrow-next-next-next-next-next-next", "data": {"kind": "Lean.Parser.Term.depArrow", "forms": [{"string": "[", "kind": "keyword"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": ":", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": "]", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "→", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Terms/Function-Types/"}], "Lean.Parser.Term.depArrow [{\"string\": \"(\", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"→\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Term___depArrow-next", "data": {"kind": "Lean.Parser.Term.depArrow", "forms": [{"string": "(", "kind": "keyword"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": ":", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "→", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Terms/Function-Types/"}, {"id": "Lean___Parser___Term___depArrow", "data": {"kind": "Lean.Parser.Term.depArrow", "forms": [{"string": "(", "kind": "keyword"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": ":", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "→", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Terms/Function-Types/"}], "Lean.Parser.Term.depArrow [{\"string\": \"(\", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":=\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"→\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Term___depArrow-next-next", "data": {"kind": "Lean.Parser.Term.depArrow", "forms": [{"string": "(", "kind": "keyword"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": ":", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": ":=", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "→", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Terms/Function-Types/"}], "Lean.Parser.Term.depArrow [{\"string\": \"(\", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":=\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"by\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"→\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Term___depArrow-next-next-next", "data": {"kind": "Lean.Parser.Term.depArrow", "forms": [{"string": "(", "kind": "keyword"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": ":", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": ":=", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "by", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "→", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Terms/Function-Types/"}], "Lean.Parser.Term.byTactic [{\"string\": \"by\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Term___byTactic-next", "data": {"kind": "Lean.Parser.Term.byTactic", "forms": [{"string": "by", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Tactic-Proofs/Running-Tactics/"}], "Lean.Parser.Term.byTactic [{\"string\": \"by\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"{\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"}\", \"kind\": \"keyword\"}]": [{"id": "Lean___Parser___Term___byTactic-next-next", "data": {"kind": "Lean.Parser.Term.byTactic", "forms": [{"string": "by", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "{", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "}", "kind": "keyword"}], "category": null}, "address": "/Tactic-Proofs/Running-Tactics/"}], "Lean.Parser.Term.borrowed [{\"string\": \"@&\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Term___borrowed", "data": {"kind": "Lean.Parser.Term.borrowed", "forms": [{"string": "@&", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Run-Time-Code/Foreign-Function-Interface/"}], "Lean.Parser.Term.attributes [{\"string\": \"@[\", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \"]\", \"kind\": \"keyword\"}]": [{"id": "Lean___Parser___Term___attributes-next", "data": {"kind": "Lean.Parser.Term.attributes", "forms": [{"string": "@[", "kind": "keyword"}, {"string": "…", "kind": "meta"}, {"string": "]", "kind": "keyword"}], "category": null}, "address": "/Attributes/"}], "Lean.Parser.Term.attrKind [{\"string\": \"scoped\", \"kind\": \"keyword\"}]": [{"id": "Lean___Parser___Term___attrKind-next-next", "data": {"kind": "Lean.Parser.Term.attrKind", "forms": [{"string": "scoped", "kind": "keyword"}], "category": null}, "address": "/Attributes/"}], "Lean.Parser.Term.attrKind [{\"string\": \"local\", \"kind\": \"keyword\"}]": [{"id": "Lean___Parser___Term___attrKind-next", "data": {"kind": "Lean.Parser.Term.attrKind", "forms": [{"string": "local", "kind": "keyword"}], "category": null}, "address": "/Attributes/"}], "Lean.Parser.Term.attrKind []": [{"id": "Lean___Parser___Term___attrKind", "data": {"kind": "Lean.Parser.Term.attrKind", "forms": [], "category": null}, "address": "/Attributes/"}], "Lean.Parser.Term.attrInstance [{\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Term___attrInstance-next", "data": {"kind": "Lean.Parser.Term.attrInstance", "forms": [{"string": "…", "kind": "meta"}], "category": null}, "address": "/Attributes/"}], "Lean.Parser.Term.arrow [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"→\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Term___arrow", "data": {"kind": "Lean.Parser.Term.arrow", "forms": [{"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "→", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Terms/Function-Types/"}], "Lean.Parser.Term.anonymousCtor [{\"string\": \"⟨\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"⟩\", \"kind\": \"keyword\"}]": [{"id": "Lean___Parser___Term___anonymousCtor", "data": {"kind": "Lean.Parser.Term.anonymousCtor", "forms": [{"string": "⟨", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "⟩", "kind": "keyword"}], "category": null}, "address": "/The-Type-System/Inductive-Types/"}], "Lean.Parser.Tactic.simp [{\"string\": \"simp\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"only\", \"kind\": \"keyword\"},\n {\"string\": \"?\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"[\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"]\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \")?\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"at\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")?\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Tactic___simp", "data": {"kind": "Lean.Parser.Tactic.simp", "forms": [{"string": "simp", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "only", "kind": "keyword"}, {"string": "?", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "meta"}, {"string": "[", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "]", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": ")?", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "meta"}, {"string": "at", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")?", "kind": "meta"}], "category": null}, "address": "/The-Simplifier/Invoking-the-Simplifier/"}], "Lean.Parser.Tactic.optConfig [{\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Tactic___optConfig-next", "data": {"kind": "Lean.Parser.Tactic.optConfig", "forms": [{"string": "…", "kind": "meta"}], "category": null}, "address": "/Tactic-Proofs/The-Tactic-Language/"}], "Lean.Parser.Tactic.configItem [{\"string\": \"-\", \"kind\": \"keyword\"}, {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Tactic___configItem-next-next", "data": {"kind": "Lean.Parser.Tactic.configItem", "forms": [{"string": "-", "kind": "keyword"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Tactic-Proofs/The-Tactic-Language/"}], "Lean.Parser.Tactic.configItem [{\"string\": \"+\", \"kind\": \"keyword\"}, {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Tactic___configItem-next", "data": {"kind": "Lean.Parser.Tactic.configItem", "forms": [{"string": "+", "kind": "keyword"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Tactic-Proofs/The-Tactic-Language/"}], "Lean.Parser.Tactic.configItem [{\"string\": \"(\", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":=\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")\", \"kind\": \"keyword\"}]": [{"id": "Lean___Parser___Tactic___configItem-next-next-next", "data": {"kind": "Lean.Parser.Tactic.configItem", "forms": [{"string": "(", "kind": "keyword"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": ":=", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")", "kind": "keyword"}], "category": null}, "address": "/Tactic-Proofs/The-Tactic-Language/"}], "Lean.Parser.Tactic.configItem [{\"string\": \"(\", \"kind\": \"keyword\"},\n {\"string\": \"config\", \"kind\": \"literalIdent\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":=\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")\", \"kind\": \"keyword\"}]": [{"id": "Lean___Parser___Tactic___configItem-next-next-next-next", "data": {"kind": "Lean.Parser.Tactic.configItem", "forms": [{"string": "(", "kind": "keyword"}, {"string": "config", "kind": "literalIdent"}, {"string": " ", "kind": "ws"}, {"string": ":=", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")", "kind": "keyword"}], "category": null}, "address": "/Tactic-Proofs/The-Tactic-Language/"}], "Lean.Parser.Tactic.Conv.enterArg [{\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Tactic___Conv___enterArg-next-next-next", "data": {"kind": "Lean.Parser.Tactic.Conv.enterArg", "forms": [{"string": "…", "kind": "meta"}], "category": null}, "address": "/Tactic-Proofs/Targeted-Rewriting-with--conv/"}, {"id": "Lean___Parser___Tactic___Conv___enterArg-next", "data": {"kind": "Lean.Parser.Tactic.Conv.enterArg", "forms": [{"string": "…", "kind": "meta"}], "category": null}, "address": "/Tactic-Proofs/Targeted-Rewriting-with--conv/"}], "Lean.Parser.Tactic.Conv.enterArg [{\"string\": \"@\", \"kind\": \"keyword\"}, {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Tactic___Conv___enterArg-next-next", "data": {"kind": "Lean.Parser.Tactic.Conv.enterArg", "forms": [{"string": "@", "kind": "keyword"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Tactic-Proofs/Targeted-Rewriting-with--conv/"}], "Lean.Parser.Syntax.unary [{\"string\": \"optional\", \"kind\": \"literalIdent\"},\n {\"string\": \"(\", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")\", \"kind\": \"keyword\"}]": [{"id": "Lean___Parser___Syntax___unary", "data": {"kind": "Lean.Parser.Syntax.unary", "forms": [{"string": "optional", "kind": "literalIdent"}, {"string": "(", "kind": "keyword"}, {"string": "…", "kind": "meta"}, {"string": ")", "kind": "keyword"}], "category": null}, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "Lean.Parser.Syntax.unary [{\"string\": \"many1\", \"kind\": \"literalIdent\"},\n {\"string\": \"(\", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")\", \"kind\": \"keyword\"}]": [{"id": "Lean___Parser___Syntax___unary-next-next", "data": {"kind": "Lean.Parser.Syntax.unary", "forms": [{"string": "many1", "kind": "literalIdent"}, {"string": "(", "kind": "keyword"}, {"string": "…", "kind": "meta"}, {"string": ")", "kind": "keyword"}], "category": null}, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "Lean.Parser.Syntax.unary [{\"string\": \"many\", \"kind\": \"literalIdent\"},\n {\"string\": \"(\", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")\", \"kind\": \"keyword\"}]": [{"id": "Lean___Parser___Syntax___unary-next", "data": {"kind": "Lean.Parser.Syntax.unary", "forms": [{"string": "many", "kind": "literalIdent"}, {"string": "(", "kind": "keyword"}, {"string": "…", "kind": "meta"}, {"string": ")", "kind": "keyword"}], "category": null}, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "Lean.Parser.Syntax.subPrio [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"-\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Syntax___subPrio", "data": {"kind": "Lean.Parser.Syntax.subPrio", "forms": [{"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "-", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Type-Classes/Instance-Declarations/"}], "Lean.Parser.Syntax.subPrec [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"-\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Syntax___subPrec", "data": {"kind": "Lean.Parser.Syntax.subPrec", "forms": [{"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "-", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Notations-and-Macros/Precedence/"}], "Lean.Parser.Syntax.sepBy1 [{\"string\": \"sepBy1(\", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \",\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \",\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \",\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"allowTrailingSep\", \"kind\": \"keyword\"},\n {\"string\": \")\", \"kind\": \"keyword\"}]": [{"id": "Lean___Parser___Syntax___sepBy1-next-next", "data": {"kind": "Lean.Parser.Syntax.sepBy1", "forms": [{"string": "sepBy1(", "kind": "keyword"}, {"string": "…", "kind": "meta"}, {"string": ",", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ",", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ",", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "allowTrailingSep", "kind": "keyword"}, {"string": ")", "kind": "keyword"}], "category": null}, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "Lean.Parser.Syntax.sepBy1 [{\"string\": \"sepBy1(\", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \",\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \",\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")\", \"kind\": \"keyword\"}]": [{"id": "Lean___Parser___Syntax___sepBy1-next", "data": {"kind": "Lean.Parser.Syntax.sepBy1", "forms": [{"string": "sepBy1(", "kind": "keyword"}, {"string": "…", "kind": "meta"}, {"string": ",", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ",", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")", "kind": "keyword"}], "category": null}, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "Lean.Parser.Syntax.sepBy1 [{\"string\": \"sepBy1(\", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \",\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")\", \"kind\": \"keyword\"}]": [{"id": "Lean___Parser___Syntax___sepBy1", "data": {"kind": "Lean.Parser.Syntax.sepBy1", "forms": [{"string": "sepBy1(", "kind": "keyword"}, {"string": "…", "kind": "meta"}, {"string": ",", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")", "kind": "keyword"}], "category": null}, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "Lean.Parser.Syntax.sepBy [{\"string\": \"sepBy(\", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \",\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \",\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \",\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"allowTrailingSep\", \"kind\": \"keyword\"},\n {\"string\": \")\", \"kind\": \"keyword\"}]": [{"id": "Lean___Parser___Syntax___sepBy-next-next", "data": {"kind": "Lean.Parser.Syntax.sepBy", "forms": [{"string": "sepBy(", "kind": "keyword"}, {"string": "…", "kind": "meta"}, {"string": ",", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ",", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ",", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "allowTrailingSep", "kind": "keyword"}, {"string": ")", "kind": "keyword"}], "category": null}, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "Lean.Parser.Syntax.sepBy [{\"string\": \"sepBy(\", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \",\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \",\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")\", \"kind\": \"keyword\"}]": [{"id": "Lean___Parser___Syntax___sepBy-next", "data": {"kind": "Lean.Parser.Syntax.sepBy", "forms": [{"string": "sepBy(", "kind": "keyword"}, {"string": "…", "kind": "meta"}, {"string": ",", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ",", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")", "kind": "keyword"}], "category": null}, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "Lean.Parser.Syntax.sepBy [{\"string\": \"sepBy(\", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \",\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")\", \"kind\": \"keyword\"}]": [{"id": "Lean___Parser___Syntax___sepBy", "data": {"kind": "Lean.Parser.Syntax.sepBy", "forms": [{"string": "sepBy(", "kind": "keyword"}, {"string": "…", "kind": "meta"}, {"string": ",", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")", "kind": "keyword"}], "category": null}, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "Lean.Parser.Syntax.paren [{\"string\": \"(\", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")\", \"kind\": \"keyword\"}]": [{"id": "Lean___Parser___Syntax___paren", "data": {"kind": "Lean.Parser.Syntax.paren", "forms": [{"string": "(", "kind": "keyword"}, {"string": "…", "kind": "meta"}, {"string": ")", "kind": "keyword"}], "category": null}, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "Lean.Parser.Syntax.nonReserved [{\"string\": \"&\", \"kind\": \"keyword\"}, {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Syntax___nonReserved", "data": {"kind": "Lean.Parser.Syntax.nonReserved", "forms": [{"string": "&", "kind": "keyword"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "Lean.Parser.Syntax.cat [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \":\", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")?\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Syntax___cat", "data": {"kind": "Lean.Parser.Syntax.cat", "forms": [{"string": "…", "kind": "meta"}, {"string": "(", "kind": "meta"}, {"string": ":", "kind": "keyword"}, {"string": "…", "kind": "meta"}, {"string": ")?", "kind": "meta"}], "category": null}, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "Lean.Parser.Syntax.binary [{\"string\": \"orelse\", \"kind\": \"literalIdent\"},\n {\"string\": \"(\", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \",\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")\", \"kind\": \"keyword\"}]": [{"id": "Lean___Parser___Syntax___binary", "data": {"kind": "Lean.Parser.Syntax.binary", "forms": [{"string": "orelse", "kind": "literalIdent"}, {"string": "(", "kind": "keyword"}, {"string": "…", "kind": "meta"}, {"string": ",", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")", "kind": "keyword"}], "category": null}, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "Lean.Parser.Syntax.atom [{\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Syntax___atom", "data": {"kind": "Lean.Parser.Syntax.atom", "forms": [{"string": "…", "kind": "meta"}], "category": null}, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "Lean.Parser.Syntax.addPrio [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"+\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Syntax___addPrio", "data": {"kind": "Lean.Parser.Syntax.addPrio", "forms": [{"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "+", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Type-Classes/Instance-Declarations/"}], "Lean.Parser.Syntax.addPrec [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"+\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Syntax___addPrec", "data": {"kind": "Lean.Parser.Syntax.addPrec", "forms": [{"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "+", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Notations-and-Macros/Precedence/"}], "Lean.Parser.Module.prelude [{\"string\": \"prelude\", \"kind\": \"keyword\"}]": [{"id": "Lean___Parser___Module___prelude-next", "data": {"kind": "Lean.Parser.Module.prelude", "forms": [{"string": "prelude", "kind": "keyword"}], "category": null}, "address": "/Source-Files-and-Modules/"}], "Lean.Parser.Module.module [{\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Module___module-next", "data": {"kind": "Lean.Parser.Module.module", "forms": [{"string": "…", "kind": "meta"}], "category": null}, "address": "/Source-Files-and-Modules/"}], "Lean.Parser.Module.import [{\"string\": \"public\", \"kind\": \"keyword\"},\n {\"string\": \"?\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"meta\", \"kind\": \"keyword\"},\n {\"string\": \"?\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"import\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"all\", \"kind\": \"keyword\"},\n {\"string\": \"?\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Module___import-next-next", "data": {"kind": "Lean.Parser.Module.import", "forms": [{"string": "public", "kind": "keyword"}, {"string": "?", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "meta", "kind": "keyword"}, {"string": "?", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "import", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "all", "kind": "keyword"}, {"string": "?", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Source-Files-and-Modules/"}], "Lean.Parser.Module.import [{\"string\": \"import\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Module___import-next", "data": {"kind": "Lean.Parser.Module.import", "forms": [{"string": "import", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Source-Files-and-Modules/"}], "Lean.Parser.Module.header [{\"string\": \"module\", \"kind\": \"keyword\"},\n {\"string\": \"?\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Module___header-next", "data": {"kind": "Lean.Parser.Module.header", "forms": [{"string": "module", "kind": "keyword"}, {"string": "?", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Source-Files-and-Modules/"}], "Lean.Parser.Module.header [{\"string\": \"module\", \"kind\": \"keyword\"},\n {\"string\": \"?\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"prelude\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Module___header-next-next", "data": {"kind": "Lean.Parser.Module.header", "forms": [{"string": "module", "kind": "keyword"}, {"string": "?", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "prelude", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Source-Files-and-Modules/"}], "Lean.Parser.Command.where [{\"string\": \"#where\", \"kind\": \"keyword\"}]": [{"id": "Lean___Parser___Command___where", "data": {"kind": "Lean.Parser.Command.where", "forms": [{"string": "#where", "kind": "keyword"}], "category": null}, "address": "/Interacting-with-Lean/"}], "Lean.Parser.Command.version [{\"string\": \"#version\", \"kind\": \"keyword\"}]": [{"id": "Lean___Parser___Command___version", "data": {"kind": "Lean.Parser.Command.version", "forms": [{"string": "#version", "kind": "keyword"}], "category": null}, "address": "/Interacting-with-Lean/"}], "Lean.Parser.Command.variable [{\"string\": \"variable\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Command___variable", "data": {"kind": "Lean.Parser.Command.variable", "forms": [{"string": "variable", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Namespaces-and-Sections/"}], "Lean.Parser.Command.universe [{\"string\": \"universe\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Command___universe-next", "data": {"kind": "Lean.Parser.Command.universe", "forms": [{"string": "universe", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/The-Type-System/Universes/"}], "Lean.Parser.Command.synth [{\"string\": \"#synth\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Command___synth", "data": {"kind": "Lean.Parser.Command.synth", "forms": [{"string": "#synth", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Interacting-with-Lean/"}], "Lean.Parser.Command.syntaxCat [{\"string\": \"declare_syntax_cat\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"(\", \"kind\": \"keyword\"},\n {\"string\": \"behavior\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":=\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")\", \"kind\": \"keyword\"},\n {\"string\": \")?\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Command___syntaxCat", "data": {"kind": "Lean.Parser.Command.syntaxCat", "forms": [{"string": "declare_syntax_cat", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "meta"}, {"string": "(", "kind": "keyword"}, {"string": "behavior", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": ":=", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")", "kind": "keyword"}, {"string": ")?", "kind": "meta"}], "category": null}, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "Lean.Parser.Command.syntax [{\"string\": \"syntax\", \"kind\": \"keyword\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \":\", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")?\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"(\", \"kind\": \"keyword\"},\n {\"string\": \"name\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":=\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")\", \"kind\": \"keyword\"},\n {\"string\": \")?\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"(\", \"kind\": \"keyword\"},\n {\"string\": \"priority\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":=\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")\", \"kind\": \"keyword\"},\n {\"string\": \")?\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \"*\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Command___syntax", "data": {"kind": "Lean.Parser.Command.syntax", "forms": [{"string": "syntax", "kind": "keyword"}, {"string": "(", "kind": "meta"}, {"string": ":", "kind": "keyword"}, {"string": "…", "kind": "meta"}, {"string": ")?", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "meta"}, {"string": "(", "kind": "keyword"}, {"string": "name", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": ":=", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")", "kind": "keyword"}, {"string": ")?", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "meta"}, {"string": "(", "kind": "keyword"}, {"string": "priority", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": ":=", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")", "kind": "keyword"}, {"string": ")?", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": "*", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": ":", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Notations-and-Macros/Defining-New-Syntax/"}], "Lean.Parser.Command.sectionHeader [{\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"@[\", \"kind\": \"keyword\"},\n {\"string\": \"expose\", \"kind\": \"keyword\"},\n {\"string\": \"]\", \"kind\": \"keyword\"},\n {\"string\": \")?\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"public\", \"kind\": \"keyword\"},\n {\"string\": \"?\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"noncomputable\", \"kind\": \"keyword\"},\n {\"string\": \"?\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"meta\", \"kind\": \"keyword\"},\n {\"string\": \"?\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Command___sectionHeader-next", "data": {"kind": "Lean.Parser.Command.sectionHeader", "forms": [{"string": "(", "kind": "meta"}, {"string": "@[", "kind": "keyword"}, {"string": "expose", "kind": "keyword"}, {"string": "]", "kind": "keyword"}, {"string": ")?", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "public", "kind": "keyword"}, {"string": "?", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "noncomputable", "kind": "keyword"}, {"string": "?", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "meta", "kind": "keyword"}, {"string": "?", "kind": "meta"}], "category": null}, "address": "/Namespaces-and-Sections/"}], "Lean.Parser.Command.section [{\"string\": \"section\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Command___section", "data": {"kind": "Lean.Parser.Command.section", "forms": [{"string": "section", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Namespaces-and-Sections/"}], "Lean.Parser.Command.printEqns [{\"string\": \"#print\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"equations\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Command___printEqns", "data": {"kind": "Lean.Parser.Command.printEqns", "forms": [{"string": "#print", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "equations", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Interacting-with-Lean/"}], "Lean.Parser.Command.printEqns [{\"string\": \"#print\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"eqns\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Command___printEqns-next", "data": {"kind": "Lean.Parser.Command.printEqns", "forms": [{"string": "#print", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "eqns", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Interacting-with-Lean/"}], "Lean.Parser.Command.printAxioms [{\"string\": \"#print\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"axioms\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Command___printAxioms", "data": {"kind": "Lean.Parser.Command.printAxioms", "forms": [{"string": "#print", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "axioms", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Interacting-with-Lean/"}], "Lean.Parser.Command.print [{\"string\": \"#print\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Command___print-next", "data": {"kind": "Lean.Parser.Command.print", "forms": [{"string": "#print", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Interacting-with-Lean/"}, {"id": "Lean___Parser___Command___print", "data": {"kind": "Lean.Parser.Command.print", "forms": [{"string": "#print", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Interacting-with-Lean/"}], "Lean.Parser.Command.optDeriving [{\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"deriving\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")?\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Command___optDeriving-next", "data": {"kind": "Lean.Parser.Command.optDeriving", "forms": [{"string": "(", "kind": "meta"}, {"string": "deriving", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")?", "kind": "meta"}], "category": null}, "address": "/Type-Classes/Deriving-Instances/"}], "Lean.Parser.Command.optDeclSig [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \":\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")?\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Command___optDeclSig", "data": {"kind": "Lean.Parser.Command.optDeclSig", "forms": [{"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "meta"}, {"string": ":", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")?", "kind": "meta"}], "category": null}, "address": "/Definitions/Headers-and-Signatures/"}], "Lean.Parser.Command.openSimple [{\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Command___openSimple", "data": {"kind": "Lean.Parser.Command.openSimple", "forms": [{"string": "…", "kind": "meta"}], "category": null}, "address": "/Namespaces-and-Sections/"}], "Lean.Parser.Command.openScoped [{\"string\": \"scoped\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Command___openScoped", "data": {"kind": "Lean.Parser.Command.openScoped", "forms": [{"string": "scoped", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Namespaces-and-Sections/"}], "Lean.Parser.Command.openRenaming [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"renaming\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"→\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \"),*\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Command___openRenaming", "data": {"kind": "Lean.Parser.Command.openRenaming", "forms": [{"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "renaming", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "meta"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "→", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": "),*", "kind": "meta"}], "category": null}, "address": "/Namespaces-and-Sections/"}], "Lean.Parser.Command.openOnly [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \")\", \"kind\": \"keyword\"}]": [{"id": "Lean___Parser___Command___openOnly", "data": {"kind": "Lean.Parser.Command.openOnly", "forms": [{"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "keyword"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": ")", "kind": "keyword"}], "category": null}, "address": "/Namespaces-and-Sections/"}], "Lean.Parser.Command.openHiding [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"hiding\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Command___openHiding", "data": {"kind": "Lean.Parser.Command.openHiding", "forms": [{"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "hiding", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Namespaces-and-Sections/"}], "Lean.Parser.Command.open [{\"string\": \"open\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Command___open", "data": {"kind": "Lean.Parser.Command.open", "forms": [{"string": "open", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Namespaces-and-Sections/"}], "Lean.Parser.Command.notation [{\"string\": \"notation\", \"kind\": \"keyword\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \":\", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")?\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"(\", \"kind\": \"keyword\"},\n {\"string\": \"name\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":=\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")\", \"kind\": \"keyword\"},\n {\"string\": \")?\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"(\", \"kind\": \"keyword\"},\n {\"string\": \"priority\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":=\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")\", \"kind\": \"keyword\"},\n {\"string\": \")?\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"=>\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Command___notation", "data": {"kind": "Lean.Parser.Command.notation", "forms": [{"string": "notation", "kind": "keyword"}, {"string": "(", "kind": "meta"}, {"string": ":", "kind": "keyword"}, {"string": "…", "kind": "meta"}, {"string": ")?", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "meta"}, {"string": "(", "kind": "keyword"}, {"string": "name", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": ":=", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")", "kind": "keyword"}, {"string": ")?", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "meta"}, {"string": "(", "kind": "keyword"}, {"string": "priority", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": ":=", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")", "kind": "keyword"}, {"string": ")?", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "=>", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Notations-and-Macros/Notations/"}], "Lean.Parser.Command.namespace [{\"string\": \"namespace\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Command___namespace", "data": {"kind": "Lean.Parser.Command.namespace", "forms": [{"string": "namespace", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Namespaces-and-Sections/"}], "Lean.Parser.Command.mutual [{\"string\": \"mutual\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"end\", \"kind\": \"keyword\"}]": [{"id": "Lean___Parser___Command___mutual", "data": {"kind": "Lean.Parser.Command.mutual", "forms": [{"string": "mutual", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "end", "kind": "keyword"}], "category": null}, "address": "/Definitions/Recursive-Definitions/"}], "Lean.Parser.Command.mixfix [{\"string\": \"prefix\", \"kind\": \"keyword\"},\n {\"string\": \":\", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"(\", \"kind\": \"keyword\"},\n {\"string\": \"name\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":=\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")\", \"kind\": \"keyword\"},\n {\"string\": \")?\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"(\", \"kind\": \"keyword\"},\n {\"string\": \"priority\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":=\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")\", \"kind\": \"keyword\"},\n {\"string\": \")?\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"=>\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Command___mixfix-next-next-next", "data": {"kind": "Lean.Parser.Command.mixfix", "forms": [{"string": "prefix", "kind": "keyword"}, {"string": ":", "kind": "keyword"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "meta"}, {"string": "(", "kind": "keyword"}, {"string": "name", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": ":=", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")", "kind": "keyword"}, {"string": ")?", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "meta"}, {"string": "(", "kind": "keyword"}, {"string": "priority", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": ":=", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")", "kind": "keyword"}, {"string": ")?", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "=>", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Notations-and-Macros/Custom-Operators/"}], "Lean.Parser.Command.mixfix [{\"string\": \"postfix\", \"kind\": \"keyword\"},\n {\"string\": \":\", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"(\", \"kind\": \"keyword\"},\n {\"string\": \"name\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":=\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")\", \"kind\": \"keyword\"},\n {\"string\": \")?\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"(\", \"kind\": \"keyword\"},\n {\"string\": \"priority\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":=\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")\", \"kind\": \"keyword\"},\n {\"string\": \")?\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"=>\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Command___mixfix-next-next-next-next", "data": {"kind": "Lean.Parser.Command.mixfix", "forms": [{"string": "postfix", "kind": "keyword"}, {"string": ":", "kind": "keyword"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "meta"}, {"string": "(", "kind": "keyword"}, {"string": "name", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": ":=", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")", "kind": "keyword"}, {"string": ")?", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "meta"}, {"string": "(", "kind": "keyword"}, {"string": "priority", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": ":=", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")", "kind": "keyword"}, {"string": ")?", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "=>", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Notations-and-Macros/Custom-Operators/"}], "Lean.Parser.Command.mixfix [{\"string\": \"infixr\", \"kind\": \"keyword\"},\n {\"string\": \":\", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"(\", \"kind\": \"keyword\"},\n {\"string\": \"name\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":=\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")\", \"kind\": \"keyword\"},\n {\"string\": \")?\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"(\", \"kind\": \"keyword\"},\n {\"string\": \"priority\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":=\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")\", \"kind\": \"keyword\"},\n {\"string\": \")?\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"=>\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Command___mixfix-next-next", "data": {"kind": "Lean.Parser.Command.mixfix", "forms": [{"string": "infixr", "kind": "keyword"}, {"string": ":", "kind": "keyword"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "meta"}, {"string": "(", "kind": "keyword"}, {"string": "name", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": ":=", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")", "kind": "keyword"}, {"string": ")?", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "meta"}, {"string": "(", "kind": "keyword"}, {"string": "priority", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": ":=", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")", "kind": "keyword"}, {"string": ")?", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "=>", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Notations-and-Macros/Custom-Operators/"}], "Lean.Parser.Command.mixfix [{\"string\": \"infixl\", \"kind\": \"keyword\"},\n {\"string\": \":\", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"(\", \"kind\": \"keyword\"},\n {\"string\": \"name\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":=\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")\", \"kind\": \"keyword\"},\n {\"string\": \")?\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"(\", \"kind\": \"keyword\"},\n {\"string\": \"priority\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":=\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")\", \"kind\": \"keyword\"},\n {\"string\": \")?\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"=>\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Command___mixfix-next", "data": {"kind": "Lean.Parser.Command.mixfix", "forms": [{"string": "infixl", "kind": "keyword"}, {"string": ":", "kind": "keyword"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "meta"}, {"string": "(", "kind": "keyword"}, {"string": "name", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": ":=", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")", "kind": "keyword"}, {"string": ")?", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "meta"}, {"string": "(", "kind": "keyword"}, {"string": "priority", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": ":=", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")", "kind": "keyword"}, {"string": ")?", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "=>", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Notations-and-Macros/Custom-Operators/"}], "Lean.Parser.Command.mixfix [{\"string\": \"infix\", \"kind\": \"keyword\"},\n {\"string\": \":\", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"(\", \"kind\": \"keyword\"},\n {\"string\": \"name\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":=\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")\", \"kind\": \"keyword\"},\n {\"string\": \")?\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"(\", \"kind\": \"keyword\"},\n {\"string\": \"priority\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":=\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")\", \"kind\": \"keyword\"},\n {\"string\": \")?\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"=>\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Command___mixfix", "data": {"kind": "Lean.Parser.Command.mixfix", "forms": [{"string": "infix", "kind": "keyword"}, {"string": ":", "kind": "keyword"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "meta"}, {"string": "(", "kind": "keyword"}, {"string": "name", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": ":=", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")", "kind": "keyword"}, {"string": ")?", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "meta"}, {"string": "(", "kind": "keyword"}, {"string": "priority", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": ":=", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")", "kind": "keyword"}, {"string": ")?", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "=>", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Notations-and-Macros/Custom-Operators/"}], "Lean.Parser.Command.macro_rules [{\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"@[\", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \"]\", \"kind\": \"keyword\"},\n {\"string\": \")?\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"macro_rules\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"(\", \"kind\": \"keyword\"},\n {\"string\": \"kind\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":=\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")\", \"kind\": \"keyword\"},\n {\"string\": \")?\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"|\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"`(\", \"kind\": \"keyword\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \":\", \"kind\": \"meta\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \"|\", \"kind\": \"keyword\"},\n {\"string\": \")?\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \")\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"=>\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")*\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Command___macro_rules", "data": {"kind": "Lean.Parser.Command.macro_rules", "forms": [{"string": "(", "kind": "meta"}, {"string": "@[", "kind": "keyword"}, {"string": "…", "kind": "meta"}, {"string": "]", "kind": "keyword"}, {"string": ")?", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "macro_rules", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "meta"}, {"string": "(", "kind": "keyword"}, {"string": "kind", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": ":=", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")", "kind": "keyword"}, {"string": ")?", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "meta"}, {"string": "|", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "`(", "kind": "keyword"}, {"string": "(", "kind": "meta"}, {"string": ":", "kind": "meta"}, {"string": "…", "kind": "meta"}, {"string": "|", "kind": "keyword"}, {"string": ")?", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": ")", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "=>", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")*", "kind": "meta"}], "category": null}, "address": "/Notations-and-Macros/Macros/"}], "Lean.Parser.Command.macroArg [{\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Command___macroArg-next", "data": {"kind": "Lean.Parser.Command.macroArg", "forms": [{"string": "…", "kind": "meta"}], "category": null}, "address": "/Notations-and-Macros/Macros/"}], "Lean.Parser.Command.macroArg [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \":\", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Command___macroArg-next-next", "data": {"kind": "Lean.Parser.Command.macroArg", "forms": [{"string": "…", "kind": "meta"}, {"string": ":", "kind": "keyword"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Notations-and-Macros/Macros/"}], "Lean.Parser.Command.macro [{\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"@[\", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \"]\", \"kind\": \"keyword\"},\n {\"string\": \")?\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"macro\", \"kind\": \"keyword\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \":\", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")?\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"(\", \"kind\": \"keyword\"},\n {\"string\": \"name\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":=\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")\", \"kind\": \"keyword\"},\n {\"string\": \")?\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"(\", \"kind\": \"keyword\"},\n {\"string\": \"priority\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":=\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")\", \"kind\": \"keyword\"},\n {\"string\": \")?\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"=>\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Command___macro", "data": {"kind": "Lean.Parser.Command.macro", "forms": [{"string": "(", "kind": "meta"}, {"string": "@[", "kind": "keyword"}, {"string": "…", "kind": "meta"}, {"string": "]", "kind": "keyword"}, {"string": ")?", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "macro", "kind": "keyword"}, {"string": "(", "kind": "meta"}, {"string": ":", "kind": "keyword"}, {"string": "…", "kind": "meta"}, {"string": ")?", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "meta"}, {"string": "(", "kind": "keyword"}, {"string": "name", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": ":=", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")", "kind": "keyword"}, {"string": ")?", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "meta"}, {"string": "(", "kind": "keyword"}, {"string": "priority", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": ":=", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")", "kind": "keyword"}, {"string": ")?", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": ":", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "=>", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Notations-and-Macros/Macros/"}], "Lean.Parser.Command.instance [{\"string\": \"instance\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"(\", \"kind\": \"keyword\"},\n {\"string\": \"priority\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":=\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")\", \"kind\": \"keyword\"},\n {\"string\": \")?\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"where\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Command___instance-next", "data": {"kind": "Lean.Parser.Command.instance", "forms": [{"string": "instance", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "meta"}, {"string": "(", "kind": "keyword"}, {"string": "priority", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": ":=", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")", "kind": "keyword"}, {"string": ")?", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "where", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Type-Classes/Instance-Declarations/"}], "Lean.Parser.Command.instance [{\"string\": \"instance\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"(\", \"kind\": \"keyword\"},\n {\"string\": \"priority\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":=\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")\", \"kind\": \"keyword\"},\n {\"string\": \")?\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":=\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Command___instance-next-next", "data": {"kind": "Lean.Parser.Command.instance", "forms": [{"string": "instance", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "meta"}, {"string": "(", "kind": "keyword"}, {"string": "priority", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": ":=", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")", "kind": "keyword"}, {"string": ")?", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": ":=", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Type-Classes/Instance-Declarations/"}], "Lean.Parser.Command.instance [{\"string\": \"instance\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"(\", \"kind\": \"keyword\"},\n {\"string\": \"priority\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":=\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")\", \"kind\": \"keyword\"},\n {\"string\": \")?\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"|\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"=>\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")*\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Command___instance-next-next-next", "data": {"kind": "Lean.Parser.Command.instance", "forms": [{"string": "instance", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "meta"}, {"string": "(", "kind": "keyword"}, {"string": "priority", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": ":=", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")", "kind": "keyword"}, {"string": ")?", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "meta"}, {"string": "|", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "=>", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")*", "kind": "meta"}], "category": null}, "address": "/Type-Classes/Instance-Declarations/"}], "Lean.Parser.Command.initialize [{\"string\": \"initialize\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Command___initialize", "data": {"kind": "Lean.Parser.Command.initialize", "forms": [{"string": "initialize", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Elaboration-and-Compilation/"}], "Lean.Parser.Command.initialize [{\"string\": \"initialize\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"←\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Command___initialize-next", "data": {"kind": "Lean.Parser.Command.initialize", "forms": [{"string": "initialize", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": ":", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "←", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Elaboration-and-Compilation/"}], "Lean.Parser.Command.initialize [{\"string\": \"builtin_initialize\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Command___initialize-next-next", "data": {"kind": "Lean.Parser.Command.initialize", "forms": [{"string": "builtin_initialize", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Elaboration-and-Compilation/"}], "Lean.Parser.Command.initialize [{\"string\": \"builtin_initialize\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"←\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Command___initialize-next-next-next", "data": {"kind": "Lean.Parser.Command.initialize", "forms": [{"string": "builtin_initialize", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": ":", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "←", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Elaboration-and-Compilation/"}], "Lean.Parser.Command.in [{\"string\": \"in\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Command___in", "data": {"kind": "Lean.Parser.Command.in", "forms": [{"string": "in", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Namespaces-and-Sections/"}], "Lean.Parser.Command.identPrec [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \":\", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")?\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Command___identPrec", "data": {"kind": "Lean.Parser.Command.identPrec", "forms": [{"string": "…", "kind": "meta"}, {"string": "(", "kind": "meta"}, {"string": ":", "kind": "keyword"}, {"string": "…", "kind": "meta"}, {"string": ")?", "kind": "meta"}], "category": null}, "address": "/Notations-and-Macros/Notations/"}], "Lean.Parser.Command.grindPattern [{\"string\": \"grind_pattern\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"=>\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Command___grindPattern", "data": {"kind": "Lean.Parser.Command.grindPattern", "forms": [{"string": "grind_pattern", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "=>", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/The--grind--tactic/E___matching/"}], "Lean.Parser.Command.export [{\"string\": \"export\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")\", \"kind\": \"keyword\"}]": [{"id": "Lean___Parser___Command___export", "data": {"kind": "Lean.Parser.Command.export", "forms": [{"string": "export", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "keyword"}, {"string": "…", "kind": "meta"}, {"string": ")", "kind": "keyword"}], "category": null}, "address": "/Namespaces-and-Sections/"}], "Lean.Parser.Command.evalBang [{\"string\": \"#eval!\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Command___evalBang", "data": {"kind": "Lean.Parser.Command.evalBang", "forms": [{"string": "#eval!", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Interacting-with-Lean/"}], "Lean.Parser.Command.eval [{\"string\": \"#eval\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Command___eval", "data": {"kind": "Lean.Parser.Command.eval", "forms": [{"string": "#eval", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Interacting-with-Lean/"}], "Lean.Parser.Command.eraseAttr [{\"string\": \"-\", \"kind\": \"keyword\"}, {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Command___eraseAttr-next", "data": {"kind": "Lean.Parser.Command.eraseAttr", "forms": [{"string": "-", "kind": "keyword"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Attributes/"}], "Lean.Parser.Command.end [{\"string\": \"end\", \"kind\": \"keyword\"}]": [{"id": "Lean___Parser___Command___end", "data": {"kind": "Lean.Parser.Command.end", "forms": [{"string": "end", "kind": "keyword"}], "category": null}, "address": "/Namespaces-and-Sections/"}], "Lean.Parser.Command.end [{\"string\": \"end\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Command___end-next", "data": {"kind": "Lean.Parser.Command.end", "forms": [{"string": "end", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Namespaces-and-Sections/"}], "Lean.Parser.Command.elab_rules [{\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"@[\", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \"]\", \"kind\": \"keyword\"},\n {\"string\": \")?\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"elab_rules\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"(\", \"kind\": \"keyword\"},\n {\"string\": \"kind\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":=\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")\", \"kind\": \"keyword\"},\n {\"string\": \")?\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \":\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")?\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"<=\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")?\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"|\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"`(\", \"kind\": \"keyword\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \":\", \"kind\": \"meta\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \"|\", \"kind\": \"keyword\"},\n {\"string\": \")?\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \")\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"=>\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")*\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Command___elab_rules", "data": {"kind": "Lean.Parser.Command.elab_rules", "forms": [{"string": "(", "kind": "meta"}, {"string": "@[", "kind": "keyword"}, {"string": "…", "kind": "meta"}, {"string": "]", "kind": "keyword"}, {"string": ")?", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "elab_rules", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "meta"}, {"string": "(", "kind": "keyword"}, {"string": "kind", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": ":=", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")", "kind": "keyword"}, {"string": ")?", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "meta"}, {"string": ":", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")?", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "meta"}, {"string": "<=", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")?", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "meta"}, {"string": "|", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "`(", "kind": "keyword"}, {"string": "(", "kind": "meta"}, {"string": ":", "kind": "meta"}, {"string": "…", "kind": "meta"}, {"string": "|", "kind": "keyword"}, {"string": ")?", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": ")", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "=>", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")*", "kind": "meta"}], "category": null}, "address": "/Notations-and-Macros/Elaborators/"}], "Lean.Parser.Command.docComment [{\"string\": \"/--\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"...\\n -/\", \"kind\": \"keyword\"}]": [{"id": "Lean___Parser___Command___docComment", "data": {"kind": "Lean.Parser.Command.docComment", "forms": [{"string": "/--", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "...\n -/", "kind": "keyword"}], "category": null}, "address": "/Definitions/Modifiers/"}], "Lean.Parser.Command.deriving [{\"string\": \"deriving\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"instance\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"for\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Command___deriving-next", "data": {"kind": "Lean.Parser.Command.deriving", "forms": [{"string": "deriving", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "instance", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "for", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Type-Classes/Deriving-Instances/"}], "Lean.Parser.Command.declaration [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"theorem\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"where\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Command___declaration-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next", "data": {"kind": "Lean.Parser.Command.declaration", "forms": [{"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "theorem", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "where", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Definitions/Theorems/"}], "Lean.Parser.Command.declaration [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"theorem\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":=\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Command___declaration-next-next-next-next-next-next-next-next-next-next-next-next-next-next", "data": {"kind": "Lean.Parser.Command.declaration", "forms": [{"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "theorem", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": ":=", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Definitions/Theorems/"}], "Lean.Parser.Command.declaration [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"theorem\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"|\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"=>\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")*\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Command___declaration-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next", "data": {"kind": "Lean.Parser.Command.declaration", "forms": [{"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "theorem", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "meta"}, {"string": "|", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "=>", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")*", "kind": "meta"}], "category": null}, "address": "/Definitions/Theorems/"}], "Lean.Parser.Command.declaration [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"opaque\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Command___declaration-next-next-next-next-next-next-next-next-next-next-next-next", "data": {"kind": "Lean.Parser.Command.declaration", "forms": [{"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "opaque", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Definitions/Definitions/"}], "Lean.Parser.Command.declaration [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"opaque\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":=\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Command___declaration-next-next-next-next-next-next-next-next-next-next-next", "data": {"kind": "Lean.Parser.Command.declaration", "forms": [{"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "opaque", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": ":=", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Definitions/Definitions/"}], "Lean.Parser.Command.declaration [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"example\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"where\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Command___declaration-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next", "data": {"kind": "Lean.Parser.Command.declaration", "forms": [{"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "example", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "where", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Definitions/Example-Declarations/"}], "Lean.Parser.Command.declaration [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"example\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":=\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Command___declaration-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next", "data": {"kind": "Lean.Parser.Command.declaration", "forms": [{"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "example", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": ":=", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Definitions/Example-Declarations/"}], "Lean.Parser.Command.declaration [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"example\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"|\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"=>\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")*\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Command___declaration-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next", "data": {"kind": "Lean.Parser.Command.declaration", "forms": [{"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "example", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "meta"}, {"string": "|", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "=>", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")*", "kind": "meta"}], "category": null}, "address": "/Definitions/Example-Declarations/"}], "Lean.Parser.Command.declaration [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"def\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"where\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Command___declaration-next-next-next-next-next", "data": {"kind": "Lean.Parser.Command.declaration", "forms": [{"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "def", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "where", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Definitions/Definitions/"}], "Lean.Parser.Command.declaration [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"def\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":=\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Command___declaration-next-next-next", "data": {"kind": "Lean.Parser.Command.declaration", "forms": [{"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "def", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": ":=", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Definitions/Definitions/"}], "Lean.Parser.Command.declaration [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"def\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"|\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"=>\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")*\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Command___declaration-next-next-next-next", "data": {"kind": "Lean.Parser.Command.declaration", "forms": [{"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "def", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "meta"}, {"string": "|", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "=>", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")*", "kind": "meta"}], "category": null}, "address": "/Definitions/Definitions/"}], "Lean.Parser.Command.declaration [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"class\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"inductive\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"where\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"|\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \")*\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"deriving\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")?\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Command___declaration-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next", "data": {"kind": "Lean.Parser.Command.declaration", "forms": [{"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "class", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "inductive", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "where", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "meta"}, {"string": "|", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": ")*", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "meta"}, {"string": "deriving", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")?", "kind": "meta"}], "category": null}, "address": "/Type-Classes/Class-Declarations/"}], "Lean.Parser.Command.declaration [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"abbrev\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"where\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Command___declaration-next-next-next-next-next-next-next-next-next", "data": {"kind": "Lean.Parser.Command.declaration", "forms": [{"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "abbrev", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "where", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Definitions/Definitions/"}], "Lean.Parser.Command.declaration [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"abbrev\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":=\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Command___declaration-next-next-next-next-next-next-next", "data": {"kind": "Lean.Parser.Command.declaration", "forms": [{"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "abbrev", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": ":=", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Definitions/Definitions/"}], "Lean.Parser.Command.declaration [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"abbrev\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"|\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"=>\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")*\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Command___declaration-next-next-next-next-next-next-next-next", "data": {"kind": "Lean.Parser.Command.declaration", "forms": [{"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "abbrev", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "meta"}, {"string": "|", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "=>", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")*", "kind": "meta"}], "category": null}, "address": "/Definitions/Definitions/"}], "Lean.Parser.Command.declaration [{\"string\": \"structure\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \":\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")?\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"extends\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \")?\", \"kind\": \"meta\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")?\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"where\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"::\", \"kind\": \"keyword\"},\n {\"string\": \")?\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"deriving\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")?\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Command___declaration-next", "data": {"kind": "Lean.Parser.Command.declaration", "forms": [{"string": "structure", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "meta"}, {"string": ":", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")?", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "meta"}, {"string": "extends", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "meta"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": ":", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": ")?", "kind": "meta"}, {"string": "…", "kind": "meta"}, {"string": ")?", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "where", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "meta"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "::", "kind": "keyword"}, {"string": ")?", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "meta"}, {"string": "deriving", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")?", "kind": "meta"}], "category": null}, "address": "/The-Type-System/Inductive-Types/"}], "Lean.Parser.Command.declaration [{\"string\": \"inductive\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"where\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"|\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \")*\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"deriving\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")?\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Command___declaration", "data": {"kind": "Lean.Parser.Command.declaration", "forms": [{"string": "inductive", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "where", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "meta"}, {"string": "|", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": ")*", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "meta"}, {"string": "deriving", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")?", "kind": "meta"}], "category": null}, "address": "/The-Type-System/Inductive-Types/"}], "Lean.Parser.Command.declaration [{\"string\": \"class\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \":\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")?\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"extends\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \")?\", \"kind\": \"meta\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")?\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"where\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"::\", \"kind\": \"keyword\"},\n {\"string\": \")?\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"deriving\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")?\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Command___declaration-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next", "data": {"kind": "Lean.Parser.Command.declaration", "forms": [{"string": "class", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "meta"}, {"string": ":", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")?", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "meta"}, {"string": "extends", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "meta"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": ":", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": ")?", "kind": "meta"}, {"string": "…", "kind": "meta"}, {"string": ")?", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "where", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "meta"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "::", "kind": "keyword"}, {"string": ")?", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "meta"}, {"string": "deriving", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")?", "kind": "meta"}], "category": null}, "address": "/Type-Classes/Class-Declarations/"}], "Lean.Parser.Command.declSig [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Command___declSig", "data": {"kind": "Lean.Parser.Command.declSig", "forms": [{"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": ":", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Definitions/Headers-and-Signatures/"}], "Lean.Parser.Command.declModifiers [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"noncomputable\", \"kind\": \"keyword\"},\n {\"string\": \"?\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"unsafe\", \"kind\": \"keyword\"},\n {\"string\": \"?\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"partial\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"|\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"nonrec\", \"kind\": \"keyword\"},\n {\"string\": \")\", \"kind\": \"meta\"},\n {\"string\": \"?\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Command___declModifiers", "data": {"kind": "Lean.Parser.Command.declModifiers", "forms": [{"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "noncomputable", "kind": "keyword"}, {"string": "?", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "unsafe", "kind": "keyword"}, {"string": "?", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "meta"}, {"string": "partial", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "|", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "nonrec", "kind": "keyword"}, {"string": ")", "kind": "meta"}, {"string": "?", "kind": "meta"}], "category": null}, "address": "/Definitions/Modifiers/"}], "Lean.Parser.Command.declId [{\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Command___declId", "data": {"kind": "Lean.Parser.Command.declId", "forms": [{"string": "…", "kind": "meta"}], "category": null}, "address": "/Definitions/Headers-and-Signatures/"}], "Lean.Parser.Command.declId [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \".{\", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \",\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \"}\", \"kind\": \"keyword\"}]": [{"id": "Lean___Parser___Command___declId-next", "data": {"kind": "Lean.Parser.Command.declId", "forms": [{"string": "…", "kind": "meta"}, {"string": ".{", "kind": "keyword"}, {"string": "…", "kind": "meta"}, {"string": ",", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": "}", "kind": "keyword"}], "category": null}, "address": "/Definitions/Headers-and-Signatures/"}], "Lean.Parser.Command.check_failure [{\"string\": \"#check_failure\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Command___check_failure", "data": {"kind": "Lean.Parser.Command.check_failure", "forms": [{"string": "#check_failure", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Interacting-with-Lean/"}], "Lean.Parser.Command.check [{\"string\": \"#check\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Command___check", "data": {"kind": "Lean.Parser.Command.check", "forms": [{"string": "#check", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Interacting-with-Lean/"}], "Lean.Parser.Command.axiom [{\"string\": \"axiom\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Command___axiom-next", "data": {"kind": "Lean.Parser.Command.axiom", "forms": [{"string": "axiom", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Axioms/"}], "Lean.Parser.Command.attribute [{\"string\": \"attribute\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"[\", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \"]\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Command___attribute", "data": {"kind": "Lean.Parser.Command.attribute", "forms": [{"string": "attribute", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "[", "kind": "keyword"}, {"string": "…", "kind": "meta"}, {"string": "]", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Attributes/"}], "Lean.Parser.Attr.wf_preprocess [{\"string\": \"wf_preprocess\", \"kind\": \"keyword\"}]": [{"id": "Lean___Parser___Attr___wf_preprocess", "data": {"kind": "Lean.Parser.Attr.wf_preprocess", "forms": [{"string": "wf_preprocess", "kind": "keyword"}], "category": null}, "address": "/Definitions/Recursive-Definitions/"}], "Lean.Parser.Attr.spec [{\"string\": \"spec\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"←\", \"kind\": \"keyword\"},\n {\"string\": \"?\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"|\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"<-\", \"kind\": \"keyword\"},\n {\"string\": \"?\", \"kind\": \"meta\"},\n {\"string\": \")\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Attr___spec", "data": {"kind": "Lean.Parser.Attr.spec", "forms": [{"string": "spec", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "meta"}, {"string": "←", "kind": "keyword"}, {"string": "?", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "|", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "<-", "kind": "keyword"}, {"string": "?", "kind": "meta"}, {"string": ")", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/The--mvcgen--tactic/Predicate-Transformers/"}], "Lean.Parser.Attr.simple [{\"string\": \"term_elab\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Attr___simple-next-next-next-next-next-next-next-next-next-next", "data": {"kind": "Lean.Parser.Attr.simple", "forms": [{"string": "term_elab", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Notations-and-Macros/Elaborators/"}], "Lean.Parser.Attr.simple [{\"string\": \"tactic\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Attr___simple-next-next-next-next-next-next-next-next-next-next-next-next", "data": {"kind": "Lean.Parser.Attr.simple", "forms": [{"string": "tactic", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Notations-and-Macros/Elaborators/"}], "Lean.Parser.Attr.simple [{\"string\": \"symm\", \"kind\": \"keyword\"}]": [{"id": "Lean___Parser___Attr___simple-next-next-next-next-next-next-next", "data": {"kind": "Lean.Parser.Attr.simple", "forms": [{"string": "symm", "kind": "keyword"}], "category": null}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Attr.simple [{\"string\": \"semireducible\", \"kind\": \"keyword\"}]": [{"id": "Lean___Parser___Attr___simple-next-next", "data": {"kind": "Lean.Parser.Attr.simple", "forms": [{"string": "semireducible", "kind": "keyword"}], "category": null}, "address": "/Definitions/Recursive-Definitions/"}], "Lean.Parser.Attr.simple [{\"string\": \"refl\", \"kind\": \"keyword\"}]": [{"id": "Lean___Parser___Attr___simple-next-next-next-next-next-next", "data": {"kind": "Lean.Parser.Attr.simple", "forms": [{"string": "refl", "kind": "keyword"}], "category": null}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Attr.simple [{\"string\": \"reducible\", \"kind\": \"keyword\"}]": [{"id": "Lean___Parser___Attr___simple-next", "data": {"kind": "Lean.Parser.Attr.simple", "forms": [{"string": "reducible", "kind": "keyword"}], "category": null}, "address": "/Definitions/Recursive-Definitions/"}], "Lean.Parser.Attr.simple [{\"string\": \"pp_nodot\", \"kind\": \"keyword\"}]": [{"id": "Lean___Parser___Attr___simple-next-next-next-next", "data": {"kind": "Lean.Parser.Attr.simple", "forms": [{"string": "pp_nodot", "kind": "keyword"}], "category": null}, "address": "/Terms/Function-Application/"}], "Lean.Parser.Attr.simple [{\"string\": \"match_pattern\", \"kind\": \"keyword\"}]": [{"id": "Lean___Parser___Attr___simple-next-next-next-next-next", "data": {"kind": "Lean.Parser.Attr.simple", "forms": [{"string": "match_pattern", "kind": "keyword"}], "category": null}, "address": "/Terms/Pattern-Matching/"}], "Lean.Parser.Attr.simple [{\"string\": \"irreducible\", \"kind\": \"keyword\"}]": [{"id": "Lean___Parser___Attr___simple-next-next-next", "data": {"kind": "Lean.Parser.Attr.simple", "forms": [{"string": "irreducible", "kind": "keyword"}], "category": null}, "address": "/Definitions/Recursive-Definitions/"}], "Lean.Parser.Attr.simple [{\"string\": \"induction_eliminator\", \"kind\": \"keyword\"}]": [{"id": "Lean___Parser___Attr___simple-next-next-next-next-next-next-next-next", "data": {"kind": "Lean.Parser.Attr.simple", "forms": [{"string": "induction_eliminator", "kind": "keyword"}], "category": null}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Attr.simple [{\"string\": \"implemented_by\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Attr___simple", "data": {"kind": "Lean.Parser.Attr.simple", "forms": [{"string": "implemented_by", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Definitions/Recursive-Definitions/"}], "Lean.Parser.Attr.simple [{\"string\": \"delab\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Attr___simple-next-next-next-next-next-next-next-next-next-next-next-next-next-next", "data": {"kind": "Lean.Parser.Attr.simple", "forms": [{"string": "delab", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Notations-and-Macros/Extending-Lean___s-Output/"}], "Lean.Parser.Attr.simple [{\"string\": \"default_target\", \"kind\": \"keyword\"}]": [{"id": "Lean___Parser___Attr___simple-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next", "data": {"kind": "Lean.Parser.Attr.simple", "forms": [{"string": "default_target", "kind": "keyword"}], "category": null}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lean.Parser.Attr.simple [{\"string\": \"default_script\", \"kind\": \"keyword\"}]": [{"id": "Lean___Parser___Attr___simple-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next", "data": {"kind": "Lean.Parser.Attr.simple", "forms": [{"string": "default_script", "kind": "keyword"}], "category": null}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lean.Parser.Attr.simple [{\"string\": \"command_elab\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Attr___simple-next-next-next-next-next-next-next-next-next-next-next", "data": {"kind": "Lean.Parser.Attr.simple", "forms": [{"string": "command_elab", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Notations-and-Macros/Elaborators/"}], "Lean.Parser.Attr.simple [{\"string\": \"cases_eliminator\", \"kind\": \"keyword\"}]": [{"id": "Lean___Parser___Attr___simple-next-next-next-next-next-next-next-next-next", "data": {"kind": "Lean.Parser.Attr.simple", "forms": [{"string": "cases_eliminator", "kind": "keyword"}], "category": null}, "address": "/Tactic-Proofs/Tactic-Reference/"}], "Lean.Parser.Attr.simple [{\"string\": \"app_unexpander\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Attr___simple-next-next-next-next-next-next-next-next-next-next-next-next-next", "data": {"kind": "Lean.Parser.Attr.simple", "forms": [{"string": "app_unexpander", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Notations-and-Macros/Extending-Lean___s-Output/"}], "Lean.Parser.Attr.simp [{\"string\": \"simp\", \"kind\": \"keyword\"}]": [{"id": "Lean___Parser___Attr___simp", "data": {"kind": "Lean.Parser.Attr.simp", "forms": [{"string": "simp", "kind": "keyword"}], "category": null}, "address": "/The-Simplifier/Simp-sets/"}], "Lean.Parser.Attr.simp [{\"string\": \"simp\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"↓\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"←\", \"kind\": \"keyword\"},\n {\"string\": \"?\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"|\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"<-\", \"kind\": \"keyword\"},\n {\"string\": \"?\", \"kind\": \"meta\"},\n {\"string\": \")\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Attr___simp-next-next", "data": {"kind": "Lean.Parser.Attr.simp", "forms": [{"string": "simp", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "↓", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "meta"}, {"string": "←", "kind": "keyword"}, {"string": "?", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "|", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "<-", "kind": "keyword"}, {"string": "?", "kind": "meta"}, {"string": ")", "kind": "meta"}], "category": null}, "address": "/The-Simplifier/Simp-sets/"}], "Lean.Parser.Attr.simp [{\"string\": \"simp\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"↑\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"←\", \"kind\": \"keyword\"},\n {\"string\": \"?\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"|\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"<-\", \"kind\": \"keyword\"},\n {\"string\": \"?\", \"kind\": \"meta\"},\n {\"string\": \")\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Attr___simp-next", "data": {"kind": "Lean.Parser.Attr.simp", "forms": [{"string": "simp", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "↑", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "meta"}, {"string": "←", "kind": "keyword"}, {"string": "?", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "|", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "<-", "kind": "keyword"}, {"string": "?", "kind": "meta"}, {"string": ")", "kind": "meta"}], "category": null}, "address": "/The-Simplifier/Simp-sets/"}], "Lean.Parser.Attr.simp [{\"string\": \"simp\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Attr___simp-next-next-next", "data": {"kind": "Lean.Parser.Attr.simp", "forms": [{"string": "simp", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/The-Simplifier/Simp-sets/"}], "Lean.Parser.Attr.macro [{\"string\": \"macro\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Attr___macro", "data": {"kind": "Lean.Parser.Attr.macro", "forms": [{"string": "macro", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Notations-and-Macros/Macros/"}], "Lean.Parser.Attr.instance [{\"string\": \"instance\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Attr___instance", "data": {"kind": "Lean.Parser.Attr.instance", "forms": [{"string": "instance", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Type-Classes/Instance-Declarations/"}], "Lean.Parser.Attr.grindMod [{\"string\": \"⇒\", \"kind\": \"keyword\"}]": [{"id": "Lean___Parser___Attr___grindMod-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next", "data": {"kind": "Lean.Parser.Attr.grindMod", "forms": [{"string": "⇒", "kind": "keyword"}], "category": null}, "address": "/The--grind--tactic/E___matching/"}], "Lean.Parser.Attr.grindMod [{\"string\": \"⇐\", \"kind\": \"keyword\"}]": [{"id": "Lean___Parser___Attr___grindMod-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next", "data": {"kind": "Lean.Parser.Attr.grindMod", "forms": [{"string": "⇐", "kind": "keyword"}], "category": null}, "address": "/The--grind--tactic/E___matching/"}], "Lean.Parser.Attr.grindMod [{\"string\": \"→\", \"kind\": \"keyword\"}]": [{"id": "Lean___Parser___Attr___grindMod-next-next-next-next-next-next-next-next-next-next", "data": {"kind": "Lean.Parser.Attr.grindMod", "forms": [{"string": "→", "kind": "keyword"}], "category": null}, "address": "/The--grind--tactic/E___matching/"}], "Lean.Parser.Attr.grindMod [{\"string\": \"←\", \"kind\": \"keyword\"}]": [{"id": "Lean___Parser___Attr___grindMod-next-next-next-next-next-next-next-next-next-next-next-next", "data": {"kind": "Lean.Parser.Attr.grindMod", "forms": [{"string": "←", "kind": "keyword"}], "category": null}, "address": "/The--grind--tactic/E___matching/"}], "Lean.Parser.Attr.grindMod [{\"string\": \"←\", \"kind\": \"keyword\"}, {\"string\": \"=\", \"kind\": \"keyword\"}]": [{"id": "Lean___Parser___Attr___grindMod-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next", "data": {"kind": "Lean.Parser.Attr.grindMod", "forms": [{"string": "←", "kind": "keyword"}, {"string": "=", "kind": "keyword"}], "category": null}, "address": "/The--grind--tactic/E___matching/"}], "Lean.Parser.Attr.grindMod [{\"string\": \"·\", \"kind\": \"keyword\"}]": [{"id": "Lean___Parser___Attr___grindMod-next-next", "data": {"kind": "Lean.Parser.Attr.grindMod", "forms": [{"string": "·", "kind": "keyword"}], "category": null}, "address": "/The--grind--tactic/E___matching/"}], "Lean.Parser.Attr.grindMod [{\"string\": \"intro\", \"kind\": \"keyword\"}]": [{"id": "Lean___Parser___Attr___grindMod-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next", "data": {"kind": "Lean.Parser.Attr.grindMod", "forms": [{"string": "intro", "kind": "keyword"}], "category": null}, "address": "/The--grind--tactic/E___matching/"}], "Lean.Parser.Attr.grindMod [{\"string\": \"inj\", \"kind\": \"keyword\"}]": [{"id": "Lean___Parser___Attr___grindMod-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next", "data": {"kind": "Lean.Parser.Attr.grindMod", "forms": [{"string": "inj", "kind": "keyword"}], "category": null}, "address": "/The--grind--tactic/E___matching/"}], "Lean.Parser.Attr.grindMod [{\"string\": \"ext\", \"kind\": \"keyword\"}]": [{"id": "Lean___Parser___Attr___grindMod-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next", "data": {"kind": "Lean.Parser.Attr.grindMod", "forms": [{"string": "ext", "kind": "keyword"}], "category": null}, "address": "/The--grind--tactic/E___matching/"}], "Lean.Parser.Attr.grindMod [{\"string\": \"_\", \"kind\": \"keyword\"},\n {\"string\": \"=\", \"kind\": \"keyword\"},\n {\"string\": \"_\", \"kind\": \"keyword\"}]": [{"id": "Lean___Parser___Attr___grindMod-next-next-next-next-next-next-next-next", "data": {"kind": "Lean.Parser.Attr.grindMod", "forms": [{"string": "_", "kind": "keyword"}, {"string": "=", "kind": "keyword"}, {"string": "_", "kind": "keyword"}], "category": null}, "address": "/The--grind--tactic/E___matching/"}], "Lean.Parser.Attr.grindMod [{\"string\": \"=>\", \"kind\": \"keyword\"}]": [{"id": "Lean___Parser___Attr___grindMod-next-next-next-next-next-next-next-next-next-next-next-next-next-next", "data": {"kind": "Lean.Parser.Attr.grindMod", "forms": [{"string": "=>", "kind": "keyword"}], "category": null}, "address": "/The--grind--tactic/E___matching/"}], "Lean.Parser.Attr.grindMod [{\"string\": \"=\", \"kind\": \"keyword\"}]": [{"id": "Lean___Parser___Attr___grindMod-next-next-next-next", "data": {"kind": "Lean.Parser.Attr.grindMod", "forms": [{"string": "=", "kind": "keyword"}], "category": null}, "address": "/The--grind--tactic/E___matching/"}], "Lean.Parser.Attr.grindMod [{\"string\": \"=\", \"kind\": \"keyword\"}, {\"string\": \"_\", \"kind\": \"keyword\"}]": [{"id": "Lean___Parser___Attr___grindMod-next-next-next-next-next-next", "data": {"kind": "Lean.Parser.Attr.grindMod", "forms": [{"string": "=", "kind": "keyword"}, {"string": "_", "kind": "keyword"}], "category": null}, "address": "/The--grind--tactic/E___matching/"}], "Lean.Parser.Attr.grindMod [{\"string\": \"<=\", \"kind\": \"keyword\"}]": [{"id": "Lean___Parser___Attr___grindMod-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next-next", "data": {"kind": "Lean.Parser.Attr.grindMod", "forms": [{"string": "<=", "kind": "keyword"}], "category": null}, "address": "/The--grind--tactic/E___matching/"}], "Lean.Parser.Attr.grindMod [{\"string\": \".\", \"kind\": \"keyword\"}]": [{"id": "Lean___Parser___Attr___grindMod-next", "data": {"kind": "Lean.Parser.Attr.grindMod", "forms": [{"string": ".", "kind": "keyword"}], "category": null}, "address": "/The--grind--tactic/E___matching/"}], "Lean.Parser.Attr.grind? [{\"string\": \"grind?\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Attr___grind___-next", "data": {"kind": "Lean.Parser.Attr.grind?", "forms": [{"string": "grind?", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/The--grind--tactic/E___matching/"}], "Lean.Parser.Attr.grind!? [{\"string\": \"grind!?\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Attr___grind______", "data": {"kind": "Lean.Parser.Attr.grind!?", "forms": [{"string": "grind!?", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/The--grind--tactic/E___matching/"}], "Lean.Parser.Attr.grind! [{\"string\": \"grind!\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Attr___grind___", "data": {"kind": "Lean.Parser.Attr.grind!", "forms": [{"string": "grind!", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/The--grind--tactic/E___matching/"}], "Lean.Parser.Attr.grind [{\"string\": \"grind\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Attr___grind-next-next", "data": {"kind": "Lean.Parser.Attr.grind", "forms": [{"string": "grind", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/The--grind--tactic/E___matching/"}], "Lean.Parser.Attr.grind [{\"string\": \"grind\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"cases\", \"kind\": \"keyword\"}]": [{"id": "Lean___Parser___Attr___grind", "data": {"kind": "Lean.Parser.Attr.grind", "forms": [{"string": "grind", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "cases", "kind": "keyword"}], "category": null}, "address": "/The--grind--tactic/Case-Analysis/"}], "Lean.Parser.Attr.grind [{\"string\": \"grind\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"cases\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"eager\", \"kind\": \"keyword\"}]": [{"id": "Lean___Parser___Attr___grind-next", "data": {"kind": "Lean.Parser.Attr.grind", "forms": [{"string": "grind", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "cases", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "eager", "kind": "keyword"}], "category": null}, "address": "/The--grind--tactic/Case-Analysis/"}], "Lean.Parser.Attr.extern [{\"string\": \"extern\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Attr___extern", "data": {"kind": "Lean.Parser.Attr.extern", "forms": [{"string": "extern", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Run-Time-Code/Foreign-Function-Interface/"}], "Lean.Parser.Attr.export [{\"string\": \"export\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Attr___export", "data": {"kind": "Lean.Parser.Attr.export", "forms": [{"string": "export", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Run-Time-Code/Foreign-Function-Interface/"}], "Lean.Parser.Attr.default_instance [{\"string\": \"default_instance\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lean___Parser___Attr___default_instance", "data": {"kind": "Lean.Parser.Attr.default_instance", "forms": [{"string": "default_instance", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Type-Classes/Instance-Declarations/"}], "Lean.Attr.coe [{\"string\": \"coe\", \"kind\": \"keyword\"}]": [{"id": "Lean___Attr___coe", "data": {"kind": "Lean.Attr.coe", "forms": [{"string": "coe", "kind": "keyword"}], "category": null}, "address": "/Coercions/Coercing-Between-Types/"}], "Lake.DSL.targetCommand [{\"string\": \"target\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":=\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"where\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")?\", \"kind\": \"meta\"}]": [{"id": "Lake___DSL___targetCommand", "data": {"kind": "Lake.DSL.targetCommand", "forms": [{"string": "target", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": ":", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": ":=", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "meta"}, {"string": "where", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")?", "kind": "meta"}], "category": null}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.DSL.scriptDecl [{\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"@[\", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \"]\", \"kind\": \"keyword\"},\n {\"string\": \")?\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"script\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":=\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"where\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")?\", \"kind\": \"meta\"}]": [{"id": "Lake___DSL___scriptDecl", "data": {"kind": "Lake.DSL.scriptDecl", "forms": [{"string": "(", "kind": "meta"}, {"string": "@[", "kind": "keyword"}, {"string": "…", "kind": "meta"}, {"string": "]", "kind": "keyword"}, {"string": ")?", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "script", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": ":=", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "meta"}, {"string": "where", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")?", "kind": "meta"}], "category": null}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.DSL.runIO [{\"string\": \"run_io\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lake___DSL___runIO", "data": {"kind": "Lake.DSL.runIO", "forms": [{"string": "run_io", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.DSL.requireDecl [{\"string\": \"require\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"@\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"git\", \"kind\": \"keyword\"},\n {\"string\": \"?\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")?\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"with\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")?\", \"kind\": \"meta\"}]": [{"id": "Lake___DSL___requireDecl", "data": {"kind": "Lake.DSL.requireDecl", "forms": [{"string": "require", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "meta"}, {"string": "@", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "git", "kind": "keyword"}, {"string": "?", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")?", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "meta"}, {"string": "with", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")?", "kind": "meta"}], "category": null}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.DSL.postUpdateDecl [{\"string\": \"post_update\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lake___DSL___postUpdateDecl", "data": {"kind": "Lake.DSL.postUpdateDecl", "forms": [{"string": "post_update", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.DSL.packageFacetDecl [{\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"@[\", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \"]\", \"kind\": \"keyword\"},\n {\"string\": \")?\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"package_facet\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":=\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"where\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")?\", \"kind\": \"meta\"}]": [{"id": "Lake___DSL___packageFacetDecl", "data": {"kind": "Lake.DSL.packageFacetDecl", "forms": [{"string": "(", "kind": "meta"}, {"string": "@[", "kind": "keyword"}, {"string": "…", "kind": "meta"}, {"string": "]", "kind": "keyword"}, {"string": ")?", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "package_facet", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": ":", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": ":=", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "meta"}, {"string": "where", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")?", "kind": "meta"}], "category": null}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.DSL.packageCommand [{\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"@[\", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \"]\", \"kind\": \"keyword\"},\n {\"string\": \")?\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"package\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"{\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \";*\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"}\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"where\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \";*\", \"kind\": \"meta\"},\n {\"string\": \")?\", \"kind\": \"meta\"}]": [{"id": "Lake___DSL___packageCommand-next-next", "data": {"kind": "Lake.DSL.packageCommand", "forms": [{"string": "(", "kind": "meta"}, {"string": "@[", "kind": "keyword"}, {"string": "…", "kind": "meta"}, {"string": "]", "kind": "keyword"}, {"string": ")?", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "package", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "{", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ";*", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "}", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "meta"}, {"string": "where", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ";*", "kind": "meta"}, {"string": ")?", "kind": "meta"}], "category": null}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.DSL.packageCommand [{\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"@[\", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \"]\", \"kind\": \"keyword\"},\n {\"string\": \")?\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"package\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"where\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lake___DSL___packageCommand-next", "data": {"kind": "Lake.DSL.packageCommand", "forms": [{"string": "(", "kind": "meta"}, {"string": "@[", "kind": "keyword"}, {"string": "…", "kind": "meta"}, {"string": "]", "kind": "keyword"}, {"string": ")?", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "package", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "where", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.DSL.packageCommand [{\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"@[\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"]\", \"kind\": \"keyword\"},\n {\"string\": \")?\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"package\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lake___DSL___packageCommand", "data": {"kind": "Lake.DSL.packageCommand", "forms": [{"string": "(", "kind": "meta"}, {"string": "@[", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "]", "kind": "keyword"}, {"string": ")?", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "package", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.DSL.moduleFacetDecl [{\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"@[\", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \"]\", \"kind\": \"keyword\"},\n {\"string\": \")?\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"module_facet\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":=\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"where\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")?\", \"kind\": \"meta\"}]": [{"id": "Lake___DSL___moduleFacetDecl", "data": {"kind": "Lake.DSL.moduleFacetDecl", "forms": [{"string": "(", "kind": "meta"}, {"string": "@[", "kind": "keyword"}, {"string": "…", "kind": "meta"}, {"string": "]", "kind": "keyword"}, {"string": ")?", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "module_facet", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": ":", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": ":=", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "meta"}, {"string": "where", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")?", "kind": "meta"}], "category": null}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.DSL.metaIf [{\"string\": \"meta\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"if\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"then\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"else\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")?\", \"kind\": \"meta\"}]": [{"id": "Lake___DSL___metaIf", "data": {"kind": "Lake.DSL.metaIf", "forms": [{"string": "meta", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "if", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "then", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "meta"}, {"string": "else", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")?", "kind": "meta"}], "category": null}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.DSL.libraryFacetDecl [{\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"@[\", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \"]\", \"kind\": \"keyword\"},\n {\"string\": \")?\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"library_facet\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":=\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"where\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")?\", \"kind\": \"meta\"}]": [{"id": "Lake___DSL___libraryFacetDecl", "data": {"kind": "Lake.DSL.libraryFacetDecl", "forms": [{"string": "(", "kind": "meta"}, {"string": "@[", "kind": "keyword"}, {"string": "…", "kind": "meta"}, {"string": "]", "kind": "keyword"}, {"string": ")?", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "library_facet", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": ":", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": ":=", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "meta"}, {"string": "where", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")?", "kind": "meta"}], "category": null}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.DSL.leanLibCommand [{\"string\": \"lean_lib\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lake___DSL___leanLibCommand", "data": {"kind": "Lake.DSL.leanLibCommand", "forms": [{"string": "lean_lib", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.DSL.leanLibCommand [{\"string\": \"lean_lib\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"{\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \";*\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"}\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"where\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \";*\", \"kind\": \"meta\"},\n {\"string\": \")?\", \"kind\": \"meta\"}]": [{"id": "Lake___DSL___leanLibCommand-next-next", "data": {"kind": "Lake.DSL.leanLibCommand", "forms": [{"string": "lean_lib", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "{", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ";*", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "}", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "meta"}, {"string": "where", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ";*", "kind": "meta"}, {"string": ")?", "kind": "meta"}], "category": null}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.DSL.leanLibCommand [{\"string\": \"lean_lib\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"where\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lake___DSL___leanLibCommand-next", "data": {"kind": "Lake.DSL.leanLibCommand", "forms": [{"string": "lean_lib", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "where", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.DSL.leanExeCommand [{\"string\": \"lean_exe\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lake___DSL___leanExeCommand", "data": {"kind": "Lake.DSL.leanExeCommand", "forms": [{"string": "lean_exe", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.DSL.leanExeCommand [{\"string\": \"lean_exe\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"{\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \";*\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"}\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"where\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \";*\", \"kind\": \"meta\"},\n {\"string\": \")?\", \"kind\": \"meta\"}]": [{"id": "Lake___DSL___leanExeCommand-next-next", "data": {"kind": "Lake.DSL.leanExeCommand", "forms": [{"string": "lean_exe", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "{", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ";*", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "}", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "meta"}, {"string": "where", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ";*", "kind": "meta"}, {"string": ")?", "kind": "meta"}], "category": null}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.DSL.leanExeCommand [{\"string\": \"lean_exe\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"where\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lake___DSL___leanExeCommand-next", "data": {"kind": "Lake.DSL.leanExeCommand", "forms": [{"string": "lean_exe", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "where", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.DSL.getConfig [{\"string\": \"get_config?\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lake___DSL___getConfig", "data": {"kind": "Lake.DSL.getConfig", "forms": [{"string": "get_config?", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.DSL.fromClause [{\"string\": \"from\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lake___DSL___fromClause", "data": {"kind": "Lake.DSL.fromClause", "forms": [{"string": "from", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.DSL.fromClause [{\"string\": \"from\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"git\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"@\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")?\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"/\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")?\", \"kind\": \"meta\"}]": [{"id": "Lake___DSL___fromClause-next", "data": {"kind": "Lake.DSL.fromClause", "forms": [{"string": "from", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "git", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "meta"}, {"string": "@", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")?", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "meta"}, {"string": "/", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")?", "kind": "meta"}], "category": null}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.DSL.externLibCommand [{\"string\": \"extern_lib\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":=\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"(\", \"kind\": \"meta\"},\n {\"string\": \"where\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \")?\", \"kind\": \"meta\"}]": [{"id": "Lake___DSL___externLibCommand", "data": {"kind": "Lake.DSL.externLibCommand", "forms": [{"string": "extern_lib", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": ":=", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "(", "kind": "meta"}, {"string": "where", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": ")?", "kind": "meta"}], "category": null}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.DSL.dirConst [{\"string\": \"__dir__\", \"kind\": \"keyword\"}]": [{"id": "Lake___DSL___dirConst", "data": {"kind": "Lake.DSL.dirConst", "forms": [{"string": "__dir__", "kind": "keyword"}], "category": null}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.DSL.declField [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":=\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lake___DSL___declField-next", "data": {"kind": "Lake.DSL.declField", "forms": [{"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": ":=", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.DSL.cmdDo [{\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lake___DSL___cmdDo", "data": {"kind": "Lake.DSL.cmdDo", "forms": [{"string": "…", "kind": "meta"}], "category": null}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Lake.DSL.cmdDo [{\"string\": \"do\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Lake___DSL___cmdDo-next", "data": {"kind": "Lake.DSL.cmdDo", "forms": [{"string": "do", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Build-Tools-and-Distribution/Lake/"}], "Int.«term-[_+1]» [{\"string\": \"-[\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"+1]\", \"kind\": \"keyword\"}]": [{"id": "Int____FLQQ_term-_LSQ_____1_RSQ__FLQQ_", "data": {"kind": "Int.«term-[_+1]»", "forms": [{"string": "-[", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "+1]", "kind": "keyword"}], "category": null}, "address": "/Basic-Types/Integers/"}], "Bool.«term_^^_» [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"^^\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "Bool____FLQQ_term_________FLQQ_", "data": {"kind": "Bool.«term_^^_»", "forms": [{"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": "^^", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Basic-Types/Booleans/"}], "BitVec.«term__#__» [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \"#\", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "BitVec____FLQQ_term________FLQQ_", "data": {"kind": "BitVec.«term__#__»", "forms": [{"string": "…", "kind": "meta"}, {"string": "#", "kind": "keyword"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Basic-Types/Bitvectors/"}], "BitVec.«term__#'__» [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \"#'\", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"}]": [{"id": "BitVec____FLQQ_term___________FLQQ_", "data": {"kind": "BitVec.«term__#'__»", "forms": [{"string": "…", "kind": "meta"}, {"string": "#'", "kind": "keyword"}, {"string": "…", "kind": "meta"}], "category": null}, "address": "/Basic-Types/Bitvectors/"}], "Array.«term__[_:_]» [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \"[\", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":\", \"kind\": \"keyword\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \"]\", \"kind\": \"keyword\"}]": [{"id": "Array____FLQQ_term___LSQ_______RSQ__FLQQ_", "data": {"kind": "Array.«term__[_:_]»", "forms": [{"string": "…", "kind": "meta"}, {"string": "[", "kind": "keyword"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": ":", "kind": "keyword"}, {"string": " ", "kind": "ws"}, {"string": "…", "kind": "meta"}, {"string": "]", "kind": "keyword"}], "category": null}, "address": "/Basic-Types/Arrays/"}], "Array.«term__[_:]» [{\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \"[\", \"kind\": \"keyword\"},\n {\"string\": \"…\", \"kind\": \"meta\"},\n {\"string\": \" \", \"kind\": \"ws\"},\n {\"string\": \":\", \"kind\": \"keyword\"},\n {\"string\": \"]\", \"kind\": \"keyword\"}]": [{"id": "Array____FLQQ_term___LSQ______RSQ__FLQQ_", "data": {"kind": "Array.«term__[_:]»", "forms": [{"string": "…", "kind": "meta"}, {"string": "[", "kind": "keyword"}, {"string": "…", "kind": "meta"}, {"string": " ", "kind": "ws"}, {"string": ":", "kind": "keyword"}, {"string": "]", "kind": "keyword"}], "category": null}, "address": "/Basic-Types/Arrays/"}]}}}} ================================================ FILE: book/Main.lean ================================================ import VersoManual import TPiL open Verso.Genre Manual open Verso Code External open Verso.Output.Html in def plausible := {{ }} def config : Config where emitTeX := false emitHtmlSingle := false emitHtmlMulti := true htmlDepth := 1 extraFiles := [("static", "static")] extraCss := Std.HashSet.ofList [ "/static/theme.css", "/static/fonts/source-serif/source-serif-text.css", "/static/fonts/source-code-pro/source-code-pro.css", "/static/fonts/source-sans/source-sans-3.css", "/static/fonts/noto-sans-mono/noto-sans-mono.css" ] extraHead := #[plausible] logo := some "/static/lean_logo.svg" sourceLink := some "https://github.com/leanprover/theorem_proving_in_lean4" issueLink := some "https://github.com/leanprover/theorem_proving_in_lean4/issues" linkTargets := fun st => st.localTargets ++ st.remoteTargets def main := manualMain (%doc TPiL) (config := config) ================================================ FILE: book/TPiL/AxiomsComputation.lean ================================================ import VersoManual import TPiL.Examples open Verso.Genre Manual open TPiL #doc (Manual) "Axioms and Computation" => %%% tag := "axioms-and-computation" %%% We have seen that the version of the Calculus of Constructions that has been implemented in Lean includes dependent function types, inductive types, and a hierarchy of universes that starts with an {tech}[impredicative], {tech (key := "proof irrelevance")}[proof-irrelevant] {lean}`Prop` at the bottom. In this chapter, we consider ways of extending the CIC with additional axioms and rules. Extending a foundational system in such a way is often convenient; it can make it possible to prove more theorems, as well as make it easier to prove theorems that could have been proved otherwise. But there can be negative consequences of adding additional axioms, consequences which may go beyond concerns about their correctness. In particular, the use of axioms bears on the computational content of definitions and theorems, in ways we will explore here. Lean is designed to support both computational and classical reasoning. Users that are so inclined can stick to a “computationally pure” fragment, which guarantees that closed expressions in the system evaluate to canonical normal forms. In particular, any closed computationally pure expression of type {lean}`Nat`, for example, will reduce to a numeral. Lean's standard library defines an additional axiom, propositional extensionality, and a quotient construction which in turn implies the principle of function extensionality. These extensions are used, for example, to develop theories of sets and finite sets. We will see below that using these theorems can block evaluation in Lean's kernel, so that closed terms of type {lean}`Nat` no longer evaluate to numerals. But Lean erases types and propositional information when compiling definitions to executable code, and since these axioms only add new propositions, they are compatible with that computational interpretation. Even computationally inclined users may wish to use the classical law of the excluded middle to reason about computation. This also blocks evaluation in the kernel, but it is compatible with compiled code. The standard library also defines a choice principle that is entirely antithetical to a computational interpretation, since it magically produces “data” from a proposition asserting its existence. Its use is essential to some classical constructions, and users can import it when needed. But expressions that use this construction to produce data do not have computational content, and in Lean we are required to mark such definitions as {kw}`noncomputable` to flag that fact. Using a clever trick (known as Diaconescu's theorem), one can use propositional extensionality, function extensionality, and choice to derive the law of the excluded middle. As noted above, however, use of the law of the excluded middle is still compatible with compilation, as are other classical principles, as long as they are not used to manufacture data. To summarize, then, on top of the underlying framework of universes, dependent function types, and inductive types, the standard library adds three additional components: - the axiom of propositional extensionality - a quotient construction, which implies function extensionality - a choice principle, which produces data from an existential proposition. The first two of these block normalization within Lean, but are compatible with code generation, whereas the third is not amenable to computational interpretation. We will spell out the details more precisely below. # Historical and Philosophical Context %%% tag := "historical-and-philosophical-context" %%% :::setup ``` variable (x : α) (y : β) ``` For most of its history, mathematics was essentially computational: geometry dealt with constructions of geometric objects, algebra was concerned with algorithmic solutions to systems of equations, and analysis provided means to compute the future behavior of systems evolving over time. From the proof of a theorem to the effect that “for every {lean}`x`, there is a {lean}`y` such that ...”, it was generally straightforward to extract an algorithm to compute such a {lean}`y` given {lean}`x`. ::: In the nineteenth century, however, increases in the complexity of mathematical arguments pushed mathematicians to develop new styles of reasoning that suppress algorithmic information and invoke descriptions of mathematical objects that abstract away the details of how those objects are represented. The goal was to obtain a powerful “conceptual” understanding without getting bogged down in computational details, but this had the effect of admitting mathematical theorems that are simply _false_ on a direct computational reading. There is still fairly uniform agreement today that computation is important to mathematics. But there are different views as to how best to address computational concerns. From a _constructive_ point of view, it is a mistake to separate mathematics from its computational roots; every meaningful mathematical theorem should have a direct computational interpretation. From a _classical_ point of view, it is more fruitful to maintain a separation of concerns: we can use one language and body of methods to write computer programs, while maintaining the freedom to use nonconstructive theories and methods to reason about them. Lean is designed to support both of these approaches. Core parts of the library are developed constructively, but the system also provides support for carrying out classical mathematical reasoning. :::setup ``` open Nat notation "… " e "…" => e ``` Computationally, the purest part of dependent type theory avoids the use of {lean}`Prop` entirely. Inductive types and dependent function types can be viewed as data types, and terms of these types can be “evaluated” by applying reduction rules until no more rules can be applied. In principle, any closed term (that is, term with no free variables) of type {lean}`Nat` should evaluate to a numeral, {lean}`succ (… (succ zero)…)`. ::: :::setup ``` variable (p : Prop) (s t : α) (prf : p) notation x " = " y " : " α => @Eq α x y ``` Introducing a proof-irrelevant {lean}`Prop` and marking theorems irreducible represents a first step towards separation of concerns. The intention is that elements of a type {lean}`p : Prop` should play no role in computation, and so the particular construction of a term {lean}`prf : p` is “irrelevant” in that sense. One can still define computational objects that incorporate elements of type {lean}`Prop`; the point is that these elements can help us reason about the effects of the computation, but can be ignored when we extract “code” from the term. Elements of type {lean}`Prop` are not entirely innocuous, however. They include equations {lean}`s = t : α` for any type {lean}`α`, and such equations can be used as casts, to type check terms. Below, we will see examples of how such casts can block computation in the system. However, computation is still possible under an evaluation scheme that erases propositional content, ignores intermediate typing constraints, and reduces terms until they reach a normal form. This is precisely what Lean's virtual machine does. Having adopted a proof-irrelevant {lean}`Prop`, one might consider it legitimate to use, for example, the law of the excluded middle, {lean}`p ∨ ¬p`, where {lean}`p` is any proposition. Of course, this, too, can block computation according to the rules of CIC, but it does not prevent the generation of executable code, as described above. It is only the choice principles discussed in {ref "choice"}[the section on choice] that completely erase the distinction between the proof-irrelevant and data-relevant parts of the theory. ::: # Propositional Extensionality %%% tag := "propositional-extensionality" %%% Propositional extensionality is the following axiom: ```lean (suppressNamespaces := "Hidden") (allowVisible := false) namespace Hidden ------ axiom propext {a b : Prop} : (a ↔ b) → a = b ------ end Hidden ``` :::setup ``` variable (a : Prop) ``` It asserts that when two propositions imply one another, they are actually equal. This is consistent with set-theoretic interpretations in which any element {lean}`a : Prop` is either empty or the singleton set $`\{\ast\}`, for some distinguished element $`\ast`. The axiom has the effect that equivalent propositions can be substituted for one another in any context: ::: ```lean variable (a b c d e : Prop) theorem thm₁ (h : a ↔ b) : (c ∧ a ∧ d → e) ↔ (c ∧ b ∧ d → e) := propext h ▸ Iff.refl _ theorem thm₂ (p : Prop → Prop) (h : a ↔ b) (h₁ : p a) : p b := propext h ▸ h₁ ``` :::comment ``` ``` ::: # Function Extensionality %%% tag := "function-extensionality" %%% :::leanFirst Similar to propositional extensionality, function extensionality asserts that any two functions of type {leanRef}`(x : α) → β x` that agree on all their inputs are equal: ```signature funext.{u, v} {α : Sort u} {β : α → Sort v} {f g : (x : α) → β x} (h : ∀ (x : α), f x = g x) : f = g ``` ::: From a classical, set-theoretic perspective, this is exactly what it means for two functions to be equal. This is known as an “extensional” view of functions. From a constructive perspective, however, it is sometimes more natural to think of functions as algorithms, or computer programs, that are presented in some explicit way. It is certainly the case that two computer programs can compute the same answer for every input despite the fact that they are syntactically quite different. In much the same way, you might want to maintain a view of functions that does not force you to identify two functions that have the same input / output behavior. This is known as an “intensional” view of functions. In fact, function extensionality follows from the existence of quotients, which we describe in the next section. In the Lean standard library, therefore, {leanRef}`funext` is thus [proved from the quotient construction](https://github.com/leanprover/lean4/blob/master/src/Init/Core.lean). :::leanFirst Suppose that for {leanRef}`α : Type u` we define the {leanRef}`Set `{leanRef (in := "(α : Type u)")}`α`{leanRef}` := α → Prop` to denote the type of subsets of {leanRef (in := "(α : Type u)")}`α`, essentially identifying subsets with predicates. By combining {leanRef}`funext` and {leanRef}`propext`, we obtain an extensional theory of such sets: ```lean def Set (α : Type u) := α → Prop namespace Set def mem (x : α) (a : Set α) := a x infix:50 (priority := high) "∈" => mem theorem setext {a b : Set α} (h : ∀ x, x ∈ a ↔ x ∈ b) : a = b := funext (fun x => propext (h x)) end Set ``` ::: We can then proceed to define the empty set and set intersection, for example, and prove set identities: ```lean def Set (α : Type u) := α → Prop namespace Set def mem (x : α) (a : Set α) := a x infix:50 (priority := high) "∈" => mem theorem setext {a b : Set α} (h : ∀ x, x ∈ a ↔ x ∈ b) : a = b := funext (fun x => propext (h x)) ------ def empty : Set α := fun _ => False notation (priority := high) "∅" => empty def inter (a b : Set α) : Set α := fun x => x ∈ a ∧ x ∈ b infix:70 " ∩ " => inter theorem inter_self (a : Set α) : a ∩ a = a := setext fun x => Iff.intro (fun ⟨h, _⟩ => h) (fun h => ⟨h, h⟩) theorem inter_empty (a : Set α) : a ∩ ∅ = ∅ := setext fun _ => Iff.intro (fun ⟨_, h⟩ => h) (fun h => False.elim h) theorem empty_inter (a : Set α) : ∅ ∩ a = ∅ := setext fun _ => Iff.intro (fun ⟨h, _⟩ => h) (fun h => False.elim h) theorem inter.comm (a b : Set α) : a ∩ b = b ∩ a := setext fun _ => Iff.intro (fun ⟨h₁, h₂⟩ => ⟨h₂, h₁⟩) (fun ⟨h₁, h₂⟩ => ⟨h₂, h₁⟩) ----- end Set ``` The following is an example of how function extensionality blocks computation inside the Lean kernel: ```lean def f (x : Nat) := x def g (x : Nat) := 0 + x theorem f_eq_g : f = g := funext fun x => (Nat.zero_add x).symm def val : Nat := Eq.recOn (motive := fun _ _ => Nat) f_eq_g 0 -- does not reduce to 0 #reduce val -- evaluates to 0 #eval val ``` First, we show that the two functions {leanRef}`f` and {leanRef}`g` are equal using function extensionality, and then we cast {leanRef}`0` of type {lean}`Nat` by replacing {leanRef}`f` by {leanRef}`g` in the type. Of course, the cast is vacuous, because {lean}`Nat` does not depend on {leanRef}`f`. But that is enough to do the damage: under the computational rules of the system, we now have a closed term of {lean}`Nat` that does not reduce to a numeral. In this case, we may be tempted to reduce the expression to {lean}`0`. But in nontrivial examples, eliminating cast changes the type of the term, which might make an ambient expression type incorrect. The virtual machine, however, has no trouble evaluating the expression to {lean}`0`. Here is a similarly contrived example that shows how {lean}`propext` can get in the way: ```lean theorem tteq : (True ∧ True) = True := propext (Iff.intro (fun ⟨h, _⟩ => h) (fun h => ⟨h, h⟩)) def val : Nat := Eq.recOn (motive := fun _ _ => Nat) tteq 0 -- does not reduce to 0 #reduce val -- evaluates to 0 #eval val ``` Current research programs, including work on _observational type theory_ and _cubical type theory_, aim to extend type theory in ways that permit reductions for casts involving function extensionality, quotients, and more. But the solutions are not so clear-cut, and the rules of Lean's underlying calculus do not sanction such reductions. In a sense, however, a cast does not change the meaning of an expression. Rather, it is a mechanism to reason about the expression's type. Given an appropriate semantics, it then makes sense to reduce terms in ways that preserve their meaning, ignoring the intermediate bookkeeping needed to make the reductions type-correct. In that case, adding new axioms in {lean}`Prop` does not matter; by {tech}[proof irrelevance], an expression in {lean}`Prop` carries no information, and can be safely ignored by the reduction procedures. # Quotients %%% tag := "quotients" %%% :::setup ``` variable (α : Sort u) (r : α → α → Prop) (f : α → β) (x y : α) (f' : Quot r → β) notation α " / " r:max => Quot (α := α) r notation "⟦" x "⟧" => Quot.mk _ x ``` Let {lean}`α` be any type, and let {lean}`r` be an equivalence relation on {lean}`α`. It is mathematically common to form the “quotient” {lean}`α / r`, that is, the type of elements of {lean}`α` “modulo” {lean}`r`. Set theoretically, one can view {lean}`α / r` as the set of equivalence classes of {lean}`α` modulo {lean}`r`. If {lean}`f : α → β` is any function that respects the equivalence relation in the sense that for every {lean}`x y : α`, {lean}`r x y` implies {lean}`f x = f y`, then {lean}`f` “lifts” to a function {lean}`f' : α / r → β` defined on each equivalence class {lean (type := "Quot r")}`⟦x⟧` by {lean}`f' ⟦x⟧ = f x`. Lean's standard library extends the Calculus of Constructions with additional constants that perform exactly these constructions, and installs this last equation as a definitional reduction rule. In its most basic form, the quotient construction does not even require {lean}`r` to be an equivalence relation. The following constants are built into Lean: ::: ```lean (suppressNamespaces := "Hidden") (allowVisible := false) namespace Hidden ------ universe u v axiom Quot : {α : Sort u} → (α → α → Prop) → Sort u axiom Quot.mk : {α : Sort u} → (r : α → α → Prop) → α → Quot r axiom Quot.ind : ∀ {α : Sort u} {r : α → α → Prop} {β : Quot r → Prop}, (∀ a, β (Quot.mk r a)) → (q : Quot r) → β q axiom Quot.lift : {α : Sort u} → {r : α → α → Prop} → {β : Sort u} → (f : α → β) → (∀ a b, r a b → f a = f b) → Quot r → β ------ end Hidden ``` :::setup ``` variable (α : Type u) (r : α → α → Prop) (a : α) (f : α → β) (h : ∀ a b, r a b → f a = f b) ``` The first one forms a type {lean}`Quot r` given a type {lean}`α` by any binary relation {lean}`r` on {lean}`α`. The second maps {lean}`α` to {lit}`Quot α`, so that if {lean}`r : α → α → Prop` and {lit}`a : α`, then {lean}`Quot.mk r a` is an element of {lean}`Quot r`. The third principle, {lean}`Quot.ind`, says that every element of {lean}`Quot.mk r a` is of this form. As for {lean}`Quot.lift`, given a function {lean}`f : α → β`, if {lean}`h` is a proof that {lean}`f` respects the relation {lean}`r`, then {lean}`Quot.lift f h` is the corresponding function on {lean}`Quot r`. The idea is that for each element {lean}`a` in {lean}`α`, the function {lean}`Quot.lift f h` maps {lean}`Quot.mk r a` (the {lean}`r`-class containing {lean}`a`) to {lean}`f a`, wherein {lean}`h` shows that this function is well defined. In fact, the computation principle is declared as a reduction rule, as the proof below makes clear. ```lean def mod7Rel (x y : Nat) : Prop := x % 7 = y % 7 -- the quotient type #check (Quot mod7Rel : Type) -- the class of numbers equivalent to 4 #check (Quot.mk mod7Rel 4 : Quot mod7Rel) def f (x : Nat) : Bool := x % 7 = 0 theorem f_respects (a b : Nat) (h : mod7Rel a b) : f a = f b := by simp [mod7Rel, f] at * rw [h] #check (Quot.lift f f_respects : Quot mod7Rel → Bool) -- the computation principle example (a : Nat) : Quot.lift f f_respects (Quot.mk mod7Rel a) = f a := rfl ``` The four constants, {lean}`Quot`, {lean}`Quot.mk`, {lean}`Quot.ind`, and {lean}`Quot.lift` in and of themselves are not very strong. You can check that the {lean}`Quot.ind` is satisfied if we take {lean}`Quot r` to be simply {lean}`α`, and take {lean}`Quot.lift` to be the identity function (ignoring {lean}`h`). For that reason, these four constants are not viewed as additional axioms. ::: :::comment ``` ``` ::: They are, like inductively defined types and the associated constructors and recursors, viewed as part of the logical framework. What makes the {lean}`Quot` construction into a bona fide quotient is the following additional axiom: ```lean (suppressNamespaces := "Hidden") (allowVisible := false) namespace Hidden universe u v ------ axiom Quot.sound : ∀ {α : Type u} {r : α → α → Prop} {a b : α}, r a b → Quot.mk r a = Quot.mk r b ``` This is the axiom that asserts that any two elements of {leanRef}`α` that are related by {leanRef}`r` become identified in the quotient. If a theorem or definition makes use of {leanRef}`Quot.sound`, it will show up in the {kw}`#print axioms` command. :::setup ``` variable (α : Type u) (r : α → α → Prop) (r' r'': α → α → Prop) (a b : α) ``` Of course, the quotient construction is most commonly used in situations when {lean}`r` is an equivalence relation. Given {lean}`r` as above, if we define {lean}`r'` according to the rule {lean}`r' a b` iff {lean}`Quot.mk r a = Quot.mk r b`, then it's clear that {lean}`r'` is an equivalence relation. Indeed, {lean}`r'` is the _kernel_ of the function {lean}`fun a => Quot.mk r a`. The axiom {lean}`Quot.sound` says that {lean}`r a b` implies {lean}`r' a b`. Using {lean}`Quot.lift` and {lean}`Quot.ind`, we can show that {lean}`r'` is the smallest equivalence relation containing {lean}`r`, in the sense that if {lean}`r''` is any equivalence relation containing {lean}`r`, then {lean}`r' a b` implies {lean}`r'' a b`. In particular, if {lean}`r` was an equivalence relation to start with, then for all {lean}`a` and {lean}`b` we have {lean}`r a b` iff {lean}`r' a b`. ::: To support this common use case, the standard library defines the notion of a _setoid_, which is simply a type with an associated equivalence relation: ```lean (suppressNamespaces := "Hidden") (allowVisible := false) namespace Hidden ------ class Setoid (α : Sort u) where r : α → α → Prop iseqv : Equivalence r instance {α : Sort u} [Setoid α] : HasEquiv α := ⟨Setoid.r⟩ namespace Setoid variable {α : Sort u} [Setoid α] theorem refl (a : α) : a ≈ a := iseqv.refl a theorem symm {a b : α} (hab : a ≈ b) : b ≈ a := iseqv.symm hab theorem trans {a b c : α} (hab : a ≈ b) (hbc : b ≈ c) : a ≈ c := iseqv.trans hab hbc end Setoid ------ end Hidden ``` Given a type {leanRef (in := "Setoid (α")}`α`, a relation {leanRef (in := "Equivalence r")}`r` on {leanRef (in := "Setoid (α")}`α`, and a proof {leanRef}`iseqv` that {leanRef (in := "Equivalence r")}`r` is an equivalence relation, we can define an instance of the {leanRef (in := "class Setoid")}`Setoid` class. ```lean (suppressNamespaces := "Hidden") (allowVisible := false) namespace Hidden ------ def Quotient {α : Sort u} (s : Setoid α) := @Quot α Setoid.r ------ end Hidden ``` :::setup ``` variable (α : Type u) [Setoid α] (a b : α) ``` The constants {lean}`Quotient.mk`, {lean}`Quotient.ind`, {lean}`Quotient.lift`, and {lean}`Quotient.sound` are nothing more than the specializations of the corresponding elements of {lean}`Quot`. The fact that type class inference can find the setoid associated to a type {lean}`α` brings a number of benefits. First, we can use the notation {lean}`a ≈ b` (entered with {kbd}`\approx`) for {lean}`Setoid.r a b`, where the instance of {lean}`Setoid` is implicit in the notation {lean}`Setoid.r`. We can use the generic theorems {lean}`Setoid.refl`, {lean}`Setoid.symm`, {lean}`Setoid.trans` to reason about the relation. Specifically with quotients we can use the theorem {lean}`Quotient.exact`: ```signature Quotient.exact {α : Sort u} {s : Setoid α} {a b : α} : Quotient.mk s a = Quotient.mk s b → a ≈ b ``` Together with {lean}`Quotient.sound`, this implies that the elements of the quotient correspond exactly to the equivalence classes of elements in {lean}`α`. ::: :::setup ``` variable (α : Type u) (β : Type v) ``` Recall that in the standard library, {lean}`α × β` represents the Cartesian product of the types {lean}`α` and {lean}`β`. To illustrate the use of quotients, let us define the type of _unordered_ pairs of elements of a type {lean}`α` as a quotient of the type {lean}`α × α`. First, we define the relevant equivalence relation: ::: ```lean private def eqv (p₁ p₂ : α × α) : Prop := (p₁.1 = p₂.1 ∧ p₁.2 = p₂.2) ∨ (p₁.1 = p₂.2 ∧ p₁.2 = p₂.1) infix:50 " ~ " => eqv ``` The next step is to prove that {leanRef}`eqv` is in fact an equivalence relation, which is to say, it is reflexive, symmetric and transitive. We can prove these three facts in a convenient and readable way by using dependent pattern matching to perform case-analysis and break the hypotheses into pieces that are then reassembled to produce the conclusion. ```lean private def eqv (p₁ p₂ : α × α) : Prop := (p₁.1 = p₂.1 ∧ p₁.2 = p₂.2) ∨ (p₁.1 = p₂.2 ∧ p₁.2 = p₂.1) infix:50 " ~ " => eqv ------ private theorem eqv.refl (p : α × α) : p ~ p := Or.inl ⟨rfl, rfl⟩ private theorem eqv.symm : ∀ {p₁ p₂ : α × α}, p₁ ~ p₂ → p₂ ~ p₁ | (a₁, a₂), (b₁, b₂), (Or.inl ⟨a₁b₁, a₂b₂⟩) => Or.inl (by simp_all) | (a₁, a₂), (b₁, b₂), (Or.inr ⟨a₁b₂, a₂b₁⟩) => Or.inr (by simp_all) private theorem eqv.trans : ∀ {p₁ p₂ p₃ : α × α}, p₁ ~ p₂ → p₂ ~ p₃ → p₁ ~ p₃ | (a₁, a₂), (b₁, b₂), (c₁, c₂), Or.inl ⟨a₁b₁, a₂b₂⟩, Or.inl ⟨b₁c₁, b₂c₂⟩ => Or.inl (by simp_all) | (a₁, a₂), (b₁, b₂), (c₁, c₂), Or.inl ⟨a₁b₁, a₂b₂⟩, Or.inr ⟨b₁c₂, b₂c₁⟩ => Or.inr (by simp_all) | (a₁, a₂), (b₁, b₂), (c₁, c₂), Or.inr ⟨a₁b₂, a₂b₁⟩, Or.inl ⟨b₁c₁, b₂c₂⟩ => Or.inr (by simp_all) | (a₁, a₂), (b₁, b₂), (c₁, c₂), Or.inr ⟨a₁b₂, a₂b₁⟩, Or.inr ⟨b₁c₂, b₂c₁⟩ => Or.inl (by simp_all) private theorem is_equivalence : Equivalence (@eqv α) := { refl := eqv.refl, symm := eqv.symm, trans := eqv.trans } ``` :::leanFirst Now that we have proved that {leanRef}`eqv` is an equivalence relation, we can construct a {leanRef}`Setoid (α × α)`, and use it to define the type {leanRef}`UProd α` of unordered pairs. ```lean private def eqv (p₁ p₂ : α × α) : Prop := (p₁.1 = p₂.1 ∧ p₁.2 = p₂.2) ∨ (p₁.1 = p₂.2 ∧ p₁.2 = p₂.1) infix:50 " ~ " => eqv private theorem eqv.refl (p : α × α) : p ~ p := Or.inl ⟨rfl, rfl⟩ private theorem eqv.symm : ∀ {p₁ p₂ : α × α}, p₁ ~ p₂ → p₂ ~ p₁ | (a₁, a₂), (b₁, b₂), (Or.inl ⟨a₁b₁, a₂b₂⟩) => Or.inl (by simp_all) | (a₁, a₂), (b₁, b₂), (Or.inr ⟨a₁b₂, a₂b₁⟩) => Or.inr (by simp_all) private theorem eqv.trans : ∀ {p₁ p₂ p₃ : α × α}, p₁ ~ p₂ → p₂ ~ p₃ → p₁ ~ p₃ | (a₁, a₂), (b₁, b₂), (c₁, c₂), Or.inl ⟨a₁b₁, a₂b₂⟩, Or.inl ⟨b₁c₁, b₂c₂⟩ => Or.inl (by simp_all) | (a₁, a₂), (b₁, b₂), (c₁, c₂), Or.inl ⟨a₁b₁, a₂b₂⟩, Or.inr ⟨b₁c₂, b₂c₁⟩ => Or.inr (by simp_all) | (a₁, a₂), (b₁, b₂), (c₁, c₂), Or.inr ⟨a₁b₂, a₂b₁⟩, Or.inl ⟨b₁c₁, b₂c₂⟩ => Or.inr (by simp_all) | (a₁, a₂), (b₁, b₂), (c₁, c₂), Or.inr ⟨a₁b₂, a₂b₁⟩, Or.inr ⟨b₁c₂, b₂c₁⟩ => Or.inl (by simp_all) private theorem is_equivalence : Equivalence (@eqv α) := { refl := eqv.refl, symm := eqv.symm, trans := eqv.trans } ------ instance uprodSetoid (α : Type u) : Setoid (α × α) where r := eqv iseqv := is_equivalence def UProd (α : Type u) : Type u := Quotient (uprodSetoid α) namespace UProd def mk {α : Type} (a₁ a₂ : α) : UProd α := Quotient.mk' (a₁, a₂) notation "{ " a₁ ", " a₂ " }" => mk a₁ a₂ end UProd ``` ::: :::setup ``` private def eqv (p₁ p₂ : α × α) : Prop := (p₁.1 = p₂.1 ∧ p₁.2 = p₂.2) ∨ (p₁.1 = p₂.2 ∧ p₁.2 = p₂.1) infix:50 " ~ " => eqv private theorem eqv.refl (p : α × α) : p ~ p := Or.inl ⟨rfl, rfl⟩ private theorem eqv.symm : ∀ {p₁ p₂ : α × α}, p₁ ~ p₂ → p₂ ~ p₁ | (a₁, a₂), (b₁, b₂), (Or.inl ⟨a₁b₁, a₂b₂⟩) => Or.inl (by simp_all) | (a₁, a₂), (b₁, b₂), (Or.inr ⟨a₁b₂, a₂b₁⟩) => Or.inr (by simp_all) private theorem eqv.trans : ∀ {p₁ p₂ p₃ : α × α}, p₁ ~ p₂ → p₂ ~ p₃ → p₁ ~ p₃ | (a₁, a₂), (b₁, b₂), (c₁, c₂), Or.inl ⟨a₁b₁, a₂b₂⟩, Or.inl ⟨b₁c₁, b₂c₂⟩ => Or.inl (by simp_all) | (a₁, a₂), (b₁, b₂), (c₁, c₂), Or.inl ⟨a₁b₁, a₂b₂⟩, Or.inr ⟨b₁c₂, b₂c₁⟩ => Or.inr (by simp_all) | (a₁, a₂), (b₁, b₂), (c₁, c₂), Or.inr ⟨a₁b₂, a₂b₁⟩, Or.inl ⟨b₁c₁, b₂c₂⟩ => Or.inr (by simp_all) | (a₁, a₂), (b₁, b₂), (c₁, c₂), Or.inr ⟨a₁b₂, a₂b₁⟩, Or.inr ⟨b₁c₂, b₂c₁⟩ => Or.inl (by simp_all) private theorem is_equivalence : Equivalence (@eqv α) := { refl := eqv.refl, symm := eqv.symm, trans := eqv.trans } instance uprodSetoid (α : Type u) : Setoid (α × α) where r := eqv iseqv := is_equivalence def UProd (α : Type u) : Type u := Quotient (uprodSetoid α) namespace UProd def mk {α : Type} (a₁ a₂ : α) : UProd α := Quotient.mk' (a₁, a₂) notation "{ " a₁ ", " a₂ " }" => mk a₁ a₂ end UProd variable (a₁ a₂ : α) ``` Notice that we locally define the notation {lean}`{a₁, a₂}` for unordered pairs as {lean}`Quotient.mk' (a₁, a₂)`. This is useful for illustrative purposes, but it is not a good idea in general, since the notation will shadow other uses of curly brackets, such as for records and sets. We can easily prove that {lean}`{a₁, a₂} = {a₂, a₁}` using {lean}`Quot.sound`, since we have {lean}`(a₁, a₂) ~ (a₂, a₁)`. ::: ```lean private def eqv (p₁ p₂ : α × α) : Prop := (p₁.1 = p₂.1 ∧ p₁.2 = p₂.2) ∨ (p₁.1 = p₂.2 ∧ p₁.2 = p₂.1) infix:50 " ~ " => eqv private theorem eqv.refl (p : α × α) : p ~ p := Or.inl ⟨rfl, rfl⟩ private theorem eqv.symm : ∀ {p₁ p₂ : α × α}, p₁ ~ p₂ → p₂ ~ p₁ | (a₁, a₂), (b₁, b₂), (Or.inl ⟨a₁b₁, a₂b₂⟩) => Or.inl (by simp_all) | (a₁, a₂), (b₁, b₂), (Or.inr ⟨a₁b₂, a₂b₁⟩) => Or.inr (by simp_all) private theorem eqv.trans : ∀ {p₁ p₂ p₃ : α × α}, p₁ ~ p₂ → p₂ ~ p₃ → p₁ ~ p₃ | (a₁, a₂), (b₁, b₂), (c₁, c₂), Or.inl ⟨a₁b₁, a₂b₂⟩, Or.inl ⟨b₁c₁, b₂c₂⟩ => Or.inl (by simp_all) | (a₁, a₂), (b₁, b₂), (c₁, c₂), Or.inl ⟨a₁b₁, a₂b₂⟩, Or.inr ⟨b₁c₂, b₂c₁⟩ => Or.inr (by simp_all) | (a₁, a₂), (b₁, b₂), (c₁, c₂), Or.inr ⟨a₁b₂, a₂b₁⟩, Or.inl ⟨b₁c₁, b₂c₂⟩ => Or.inr (by simp_all) | (a₁, a₂), (b₁, b₂), (c₁, c₂), Or.inr ⟨a₁b₂, a₂b₁⟩, Or.inr ⟨b₁c₂, b₂c₁⟩ => Or.inl (by simp_all) private theorem is_equivalence : Equivalence (@eqv α) := { refl := eqv.refl, symm := eqv.symm, trans := eqv.trans } instance uprodSetoid (α : Type u) : Setoid (α × α) where r := eqv iseqv := is_equivalence def UProd (α : Type u) : Type u := Quotient (uprodSetoid α) namespace UProd def mk {α : Type} (a₁ a₂ : α) : UProd α := Quotient.mk' (a₁, a₂) notation "{ " a₁ ", " a₂ " }" => mk a₁ a₂ ------ theorem mk_eq_mk (a₁ a₂ : α) : {a₁, a₂} = {a₂, a₁} := Quot.sound (Or.inr ⟨rfl, rfl⟩) ------ end UProd ``` :::leanFirst To complete the example, given {leanRef}`a : α` and {leanRef}`u : UProd α`, we define the proposition {leanRef (in := "mem (a : α) (u : UProd α)")}`a`{lit}` ∈ `{leanRef (in := "mem (a : α) (u : UProd α)")}`u` which should hold if {leanRef (in := "mem (a : α) (u : UProd α)")}`a` is one of the elements of the unordered pair {leanRef (in := "mem (a : α) (u : UProd α)")}`u`. First, we define a similar proposition {leanRef}`mem_fn`{leanRef (in := "mem (a : α) (u : UProd α)")}` a`{leanRef (in := "mem (a : α) (u : UProd α)")}` u` on (ordered) pairs; then we show that {leanRef}`mem_fn` respects the equivalence relation {leanRef}`eqv` with the lemma {leanRef}`mem_respects`. This is an idiom that is used extensively in the Lean standard library. ```lean set_option linter.unusedVariables false private def eqv (p₁ p₂ : α × α) : Prop := (p₁.1 = p₂.1 ∧ p₁.2 = p₂.2) ∨ (p₁.1 = p₂.2 ∧ p₁.2 = p₂.1) infix:50 " ~ " => eqv private theorem eqv.refl (p : α × α) : p ~ p := Or.inl ⟨rfl, rfl⟩ private theorem eqv.symm : ∀ {p₁ p₂ : α × α}, p₁ ~ p₂ → p₂ ~ p₁ | (a₁, a₂), (b₁, b₂), (Or.inl ⟨a₁b₁, a₂b₂⟩) => Or.inl (by simp_all) | (a₁, a₂), (b₁, b₂), (Or.inr ⟨a₁b₂, a₂b₁⟩) => Or.inr (by simp_all) private theorem eqv.trans : ∀ {p₁ p₂ p₃ : α × α}, p₁ ~ p₂ → p₂ ~ p₃ → p₁ ~ p₃ | (a₁, a₂), (b₁, b₂), (c₁, c₂), Or.inl ⟨a₁b₁, a₂b₂⟩, Or.inl ⟨b₁c₁, b₂c₂⟩ => Or.inl (by simp_all) | (a₁, a₂), (b₁, b₂), (c₁, c₂), Or.inl ⟨a₁b₁, a₂b₂⟩, Or.inr ⟨b₁c₂, b₂c₁⟩ => Or.inr (by simp_all) | (a₁, a₂), (b₁, b₂), (c₁, c₂), Or.inr ⟨a₁b₂, a₂b₁⟩, Or.inl ⟨b₁c₁, b₂c₂⟩ => Or.inr (by simp_all) | (a₁, a₂), (b₁, b₂), (c₁, c₂), Or.inr ⟨a₁b₂, a₂b₁⟩, Or.inr ⟨b₁c₂, b₂c₁⟩ => Or.inl (by simp_all) private theorem is_equivalence : Equivalence (@eqv α) := { refl := eqv.refl, symm := eqv.symm, trans := eqv.trans } instance uprodSetoid (α : Type u) : Setoid (α × α) where r := eqv iseqv := is_equivalence def UProd (α : Type u) : Type u := Quotient (uprodSetoid α) namespace UProd def mk {α : Type} (a₁ a₂ : α) : UProd α := Quotient.mk' (a₁, a₂) notation "{ " a₁ ", " a₂ " }" => mk a₁ a₂ theorem mk_eq_mk (a₁ a₂ : α) : {a₁, a₂} = {a₂, a₁} := Quot.sound (Or.inr ⟨rfl, rfl⟩) ------ private def mem_fn (a : α) : α × α → Prop | (a₁, a₂) => a = a₁ ∨ a = a₂ -- auxiliary lemma for proving mem_respects private theorem mem_swap {a : α} : ∀ {p : α × α}, mem_fn a p = mem_fn a (⟨p.2, p.1⟩) | (a₁, a₂) => by apply propext apply Iff.intro . intro | Or.inl h => exact Or.inr h | Or.inr h => exact Or.inl h . intro | Or.inl h => exact Or.inr h | Or.inr h => exact Or.inl h private theorem mem_respects : {p₁ p₂ : α × α} → (a : α) → p₁ ~ p₂ → mem_fn a p₁ = mem_fn a p₂ | (a₁, a₂), (b₁, b₂), a, Or.inl ⟨a₁b₁, a₂b₂⟩ => by simp_all | (a₁, a₂), (b₁, b₂), a, Or.inr ⟨a₁b₂, a₂b₁⟩ => by simp_all only apply mem_swap def mem (a : α) (u : UProd α) : Prop := Quot.liftOn u (fun p => mem_fn a p) (fun p₁ p₂ e => mem_respects a e) infix:50 (priority := high) " ∈ " => mem theorem mem_mk_left (a b : α) : a ∈ {a, b} := Or.inl rfl theorem mem_mk_right (a b : α) : b ∈ {a, b} := Or.inr rfl theorem mem_or_mem_of_mem_mk {a b c : α} : c ∈ {a, b} → c = a ∨ c = b := fun h => h --------- end UProd ``` ::: For convenience, the standard library also defines {lean}`Quotient.lift₂` for lifting binary functions, and {lit}`Quotient.ind₂` for induction on two variables. :::setup ``` variable (α : Sort u) (β : α → Sort v) (f₁ f₂ f : (x : α) → β x) (a : α) def extfun (α : Sort u) (β : α → Sort v) := Quot (fun (f g : (x : α) → β x) => ∀ x, f x = g x) def extfun_app {α β} : extfun α β → (x : α) → β x := fun f x => Quot.lift (· x) (by intros; simp [*]) f ``` We close this section with some hints as to why the quotient construction implies function extensionality. It is not hard to show that extensional equality on the {lean}`(x : α) → β x` is an equivalence relation, and so we can consider the type {lean}`extfun α β` of functions “up to equivalence.” Of course, application respects that equivalence in the sense that if {lean}`f₁` is equivalent to {lean}`f₂`, then {lean}`f₁ a` is equal to {lean}`f₂ a`. Thus application gives rise to a function {lean}`extfun_app : extfun α β → (x : α) → β x`. But for every {lean}`f`, {lean}`extfun_app (.mk _ f)` is definitionally equal to {lean}`fun x => f x`, which is in turn definitionally equal to {lean}`f`. So, when {lean}`f₁` and {lean}`f₂` are extensionally equal, we have the following chain of equalities: ```lean variable {α : Sort u} {β : α → Sort v} def extfun (α : Sort u) (β : α → Sort v) := Quot (fun (f g : (x : α) → β x) => ∀ x, f x = g x) def extfun_app {α β} (f : extfun α β) (x : α) : β x := Quot.lift (· x) (by intros; simp [*]) f ---------- example (f₁ f₂ : (x : α) → β x) (h : ∀ x, f₁ x = f₂ x) := calc f₁ _ = extfun_app (.mk _ f₁) := rfl _ = extfun_app (.mk _ f₂) := by rw [Quot.sound]; trivial _ = f₂ := rfl ``` As a result, {leanRef}`f₁` is equal to {leanRef}`f₂`. ::: # Choice %%% tag := "choice" %%% :::leanFirst To state the final axiom defined in the standard library, we need the {leanRef}`Nonempty` type, which is defined as follows: ```lean (suppressNamespaces := "Hidden") (allowVisible := false) namespace Hidden ------ class inductive Nonempty (α : Sort u) : Prop where | intro (val : α) : Nonempty α ------ end Hidden ``` ::: :::setup ``` variable {α : Sort u} ``` Because {lean}`Nonempty α` has type {lean}`Prop` and its constructor contains data, it can only eliminate to {lean}`Prop`. In fact, {lean}`Nonempty α` is equivalent to {lean}`∃ x : α, True`: ::: ```lean example (α : Type u) : Nonempty α ↔ ∃ x : α, True := Iff.intro (fun ⟨a⟩ => ⟨a, trivial⟩) (fun ⟨a, h⟩ => ⟨a⟩) ``` Our axiom of choice is now expressed simply as follows: ```lean (suppressNamespaces := "Hidden") (allowVisible := false) namespace Hidden universe u ------ axiom choice {α : Sort u} : Nonempty α → α ------ end Hidden ``` :::setup ``` variable {α : Sort u} {h : Nonempty α} open Classical ``` Given only the assertion {lean}`h` that {lean}`α` is nonempty, {lean}`choice h` magically produces an element of {lean}`α`. Of course, this blocks any meaningful computation: by the interpretation of {lean}`Prop`, {lean}`h` contains no information at all as to how to find such an element. ::: This is found in the {lit}`Classical` namespace, so the full name of the theorem is {lean}`Classical.choice`. The choice principle is equivalent to the principle of *indefinite description*, which can be expressed with subtypes as follows: ```lean (suppressNamespaces := "Hidden") (allowVisible := false) namespace Hidden universe u axiom choice {α : Sort u} : Nonempty α → α ------ noncomputable def indefiniteDescription {α : Sort u} (p : α → Prop) (h : ∃ x, p x) : {x // p x} := choice <| let ⟨x, px⟩ := h; ⟨⟨x, px⟩⟩ ------ end Hidden ``` :::setup ``` variable {α : Sort u} {h : Nonempty α} open Classical ``` Because it depends on {lean}`choice`, Lean cannot generate executable code for {lean}`indefiniteDescription`, and so requires us to mark the definition as {kw}`noncomputable`. Also in the {lit}`Classical` namespace, the function {lean}`choose` and the property {lean}`choose_spec` decompose the two parts of the output of {lean}`indefiniteDescription`: ```lean (suppressNamespaces := "Hidden") (allowVisible := false) open Classical namespace Hidden ------ variable {α : Sort u} {p : α → Prop} noncomputable def choose (h : ∃ x, p x) : α := (indefiniteDescription p h).val theorem choose_spec (h : ∃ x, p x) : p (choose h) := (indefiniteDescription p h).property ------ end Hidden ``` The {lean}`choice` principle also erases the distinction between the property of being {lean}`Nonempty` and the more constructive property of being {lean}`Inhabited`: ```lean open Classical ------ noncomputable def inhabited_of_nonempty (h : Nonempty α) : Inhabited α := choice (let ⟨a⟩ := h; ⟨⟨a⟩⟩) ``` ::: In the next section, we will see that {lean}`propext`, {lean}`funext`, and {leanRef}`choice`, taken together, imply the law of the excluded middle and the decidability of all propositions. Using those, one can strengthen the principle of indefinite description as follows: ::::setup ``` open Classical ``` ```signature strongIndefiniteDescription {α : Sort u} (p : α → Prop) (h : Nonempty α) : {x // (∃ (y : α), p y) → p x} ``` Assuming the ambient type {leanRef}`α` is nonempty, {leanRef}`strongIndefiniteDescription`{lit}` `{leanRef}`p` produces an element of {leanRef}`α` satisfying {leanRef}`p` if there is one. The data component of this definition is conventionally known as *Hilbert's epsilon function*: ```signature epsilon {α : Sort u} [h : Nonempty α] (p : α → Prop) : α ``` ```signature epsilon_spec {α : Sort u} {p : α → Prop} (hex : ∃ (y : α), p y) : p (@epsilon _ (nonempty_of_exists hex) p) ``` :::: # The Law of the Excluded Middle %%% tag := "the-law-of-the-excluded-middle" %%% The law of the excluded middle is the following: ```signature Classical.em : ∀ (p : Prop), p ∨ ¬p ``` [Diaconescu's theorem](https://en.wikipedia.org/wiki/Diaconescu%27s_theorem) states that the axiom of choice is sufficient to derive the law of excluded middle. More precisely, it shows that the law of the excluded middle follows from {lean}`Classical.choice`, {lean}`propext`, and {lean}`funext`. We sketch the proof that is found in the standard library. ```save emProof -- ANCHOR: emSetup open Classical theorem em (p : Prop) : p ∨ ¬p := by let U (x : Prop) : Prop := x = True ∨ p let V (x : Prop) : Prop := x = False ∨ p have exU : ∃ x, U x := ⟨True, Or.inl rfl⟩ have exV : ∃ x, V x := ⟨False, Or.inl rfl⟩ -- ^ PROOF_STATE: em1 -- ANCHOR_END: emSetup -- ANCHOR: emChoose let u : Prop := choose exU let v : Prop := choose exV have u_def : U u := choose_spec exU have v_def : V v := choose_spec exV -- ^ PROOF_STATE: em2 -- ANCHOR_END: emChoose -- ANCHOR: emCases have not_uv_or_p : u ≠ v ∨ p := by match u_def, v_def with | Or.inr h, _ => exact Or.inr h | _, Or.inr h => exact Or.inr h | Or.inl hut, Or.inl hvf => apply Or.inl simp [hvf, hut, true_ne_false] -- ANCHOR_END: emCases -- ANCHOR: emNext have p_implies_uv : p → u = v := fun hp => have hpred : U = V := funext fun x => have hl : (x = True ∨ p) → (x = False ∨ p) := fun _ => Or.inr hp have hr : (x = False ∨ p) → (x = True ∨ p) := fun _ => Or.inr hp show (x = True ∨ p) = (x = False ∨ p) from propext (Iff.intro hl hr) have h₀ : ∀ exU exV, @choose _ U exU = @choose _ V exV := by rw [hpred]; intros; rfl show u = v from h₀ _ _ -- ANCHOR_END: emNext -- ANCHOR: emDone match not_uv_or_p with | Or.inl hne => exact Or.inr (mt p_implies_uv hne) | Or.inr h => exact Or.inl h -- ANCHOR_END: emDone ``` :::leanFirst First, we import the necessary axioms, and define two predicates {leanRef}`U` and {leanRef}`V`: ```savedAnchor emSetup open Classical theorem em (p : Prop) : p ∨ ¬p := by let U (x : Prop) : Prop := x = True ∨ p let V (x : Prop) : Prop := x = False ∨ p have exU : ∃ x, U x := ⟨True, Or.inl rfl⟩ have exV : ∃ x, V x := ⟨False, Or.inl rfl⟩ ``` ::: If {leanRef}`p` is true, then every element of {lean}`Prop` is in both {leanRef}`U` and {leanRef}`V`. If {leanRef}`p` is false, then {leanRef}`U` is the singleton {leanRef}`True`, and {leanRef}`V` is the singleton {leanRef}`False`. :::leanFirst Next, we use {leanRef}`choose` to choose an element from each of {leanRef}`U` and {leanRef}`V`: ```savedAnchor emChoose let u : Prop := choose exU let v : Prop := choose exV have u_def : U u := choose_spec exU have v_def : V v := choose_spec exV ``` ::: :::leanFirst Each of {leanRef}`U` and {leanRef}`V` is a disjunction, so {leanRef}`u_def` and {leanRef}`v_def` represent four cases. In one of these cases, {leanRef}`u = True` and {leanRef}`v = False`, and in all the other cases, {leanRef}`p` is true. Thus we have: ```savedAnchor emCases have not_uv_or_p : u ≠ v ∨ p := by match u_def, v_def with | Or.inr h, _ => exact Or.inr h | _, Or.inr h => exact Or.inr h | Or.inl hut, Or.inl hvf => apply Or.inl simp [hvf, hut, true_ne_false] ``` ::: On the other hand, if {leanRef}`p` is true, then, by function extensionality and propositional extensionality, {leanRef}`U` and {leanRef}`V` are equal. By the definition of {leanRef}`u` and {leanRef}`v`, this implies that they are equal as well. ```savedAnchor emNext have p_implies_uv : p → u = v := fun hp => have hpred : U = V := funext fun x => have hl : (x = True ∨ p) → (x = False ∨ p) := fun _ => Or.inr hp have hr : (x = False ∨ p) → (x = True ∨ p) := fun _ => Or.inr hp show (x = True ∨ p) = (x = False ∨ p) from propext (Iff.intro hl hr) have h₀ : ∀ exU exV, @choose _ U exU = @choose _ V exV := by rw [hpred]; intros; rfl show u = v from h₀ _ _ ``` Putting these last two facts together yields the desired conclusion: ```savedAnchor emDone match not_uv_or_p with | Or.inl hne => exact Or.inr (mt p_implies_uv hne) | Or.inr h => exact Or.inl h ``` Consequences of excluded middle include double-negation elimination, proof by cases, and proof by contradiction, all of which are described in the section on {ref "classical-logic"}[classical logic]. The law of the excluded middle and propositional extensionality imply propositional completeness: ```lean (suppressNamespaces := "Hidden") (allowVisible := false) open Classical theorem propComplete (a : Prop) : a = True ∨ a = False := match em a with | Or.inl ha => Or.inl (propext (Iff.intro (fun _ => True.intro) (fun _ => ha))) | Or.inr hn => Or.inr (propext (Iff.intro (fun h => hn h) (fun h => False.elim h))) ``` Together with choice, we also get the stronger principle that every proposition is decidable. Recall that the class of {lean}`Decidable` propositions is defined as follows: ```lean namespace Hidden ------ class inductive Decidable (p : Prop) where | isFalse (h : ¬p) : Decidable p | isTrue (h : p) : Decidable p ------ end Hidden ``` ::::setup ``` variable {p : Prop} {f : α → β} {c : Prop} [Decidable c] {t e : α} open Classical (choose propDecidable) ``` :::leanFirst In contrast to {lean}`p ∨ ¬ p`, which can only eliminate to {lean}`Prop`, the type {lean}`Decidable p` is equivalent to the sum type {lit}`Sum p (¬ p)`, which can eliminate to any type. It is this data that is needed to write an if-then-else expression. As an example of classical reasoning, we use {lean}`choose` to show that if {lean}`f : α → β` is injective and {lean}`α` is inhabited, then {lean}`f` has a left inverse. To define the left inverse {leanRef}`linv`, we use a dependent if-then-else expression. Recall that {lean}`if h : c then t else e` is notation for {lean}`dite c (fun h : c => t) (fun h : ¬ c => e)`. In the definition of {leanRef}`linv`, choice is used twice: first, to show that {leanRef}`(∃ a : α, f a = b)` is “decidable,” and then to choose an {leanRef}`a` such that {leanRef}`f a = b`. Notice that {lean}`propDecidable` is a scoped instance and is activated by the {leanRef}`open Classical` command. We use this instance to justify the {kw}`if`-{kw}`then`-{kw}`else` expression. (See also the discussion in {ref "decidable-propositions"}[Decidable Propositions]). ```lean open Classical noncomputable def linv [Inhabited α] (f : α → β) : β → α := fun b : β => if ex : (∃ a : α, f a = b) then choose ex else default theorem linv_comp_self {f : α → β} [Inhabited α] (inj : ∀ {a b}, f a = f b → a = b) : linv f ∘ f = id := funext fun a => have ex : ∃ a₁ : α, f a₁ = f a := ⟨a, rfl⟩ have feq : f (choose ex) = f a := choose_spec ex calc linv f (f a) _ = choose ex := rfl _ = a := inj feq ``` From a classical point of view, {leanRef}`linv` is a function. From a constructive point of view, it is unacceptable; because there is no way to implement such a function in general, the construction is not informative. ::: :::: ================================================ FILE: book/TPiL/Conv.lean ================================================ import VersoManual import TPiL.Examples open Verso.Genre open Verso.Genre.Manual hiding tactic open TPiL #doc (Manual) "The Conversion Tactic Mode" => %%% tag := "conv" %%% Inside a tactic block, one can use the keyword {tactic}`conv` to enter _conversion mode_. This mode allows to travel inside assumptions and goals, even inside function abstractions and dependent arrows, to apply rewriting or simplifying steps. # Basic navigation and rewriting %%% tag := "basic-navigation-and-rewriting" %%% :::leanFirst As a first example, let us prove example {leanRef}`(a b c : Nat) : a * (b * c) = a * (c * b)` (examples in this file are somewhat artificial since other tactics could finish them immediately). The naive first attempt is to enter tactic mode and try {leanRef}`rw [Nat.mul_comm]`. But this transforms the goal into {leanRef}`b * c * a = a * (c * b)`, after commuting the very first multiplication appearing in the term. There are several ways to fix this issue, and one way is to use a more precise tool: the conversion mode. The following code block shows the current target after each line. ```lean (showProofStates := "oops conv1 conv2 conv3 conv4") #guard_msgs (drop all) in example (a b c : Nat) : a * (b * c) = a * (c * b) := by rw [Nat.mul_comm] -- ^ PROOF_STATE: oops example (a b c : Nat) : a * (b * c) = a * (c * b) := by conv => -- ^ PROOF_STATE: conv1 lhs -- ^ PROOF_STATE: conv2 congr -- ^ PROOF_STATE: conv3 rfl -- ^ PROOF_STATE: conv4 rw [Nat.mul_comm] ``` ::: The above snippet shows three navigation commands: - {leanRef}`lhs` navigates to the left-hand side of a relation (equality, in this case). There is also a {tactic}`rhs` to navigate to the right-hand side. - {leanRef}`congr` creates as many targets as there are (nondependent and explicit) arguments to the current head function (here the head function is multiplication). - {leanRef}`rfl` closes target using reflexivity. Once arrived at the relevant target, we can use {leanRef}`rw` as in normal tactic mode. :::leanFirst The second main reason to use conversion mode is to rewrite under binders. Suppose we want to prove example {leanRef}`(fun x : Nat => 0 + x) = (fun x => x)`. The naive first attempt is to enter tactic mode and try {leanRef}`rw [Nat.zero_add]`. But this fails with a frustrating ``` error: tactic 'rewrite' failed, did not find instance of the pattern in the target expression 0 + ?n ⊢ (fun x => 0 + x) = fun x => x ``` The solution is: ```lean example : (fun x : Nat => 0 + x) = (fun x => x) := by conv => lhs intro x rw [Nat.zero_add] ``` ::: where {leanRef}`intro x` is the navigation command entering inside the {kw}`fun` binder. Note that this example is somewhat artificial, one could also do: ```lean example : (fun x : Nat => 0 + x) = (fun x => x) := by funext x; rw [Nat.zero_add] ``` or just ```lean example : (fun x : Nat => 0 + x) = (fun x => x) := by simp ``` {leanRef}`conv` can also rewrite a hypothesis {lit}`h` from the local context, using {kw}`conv at`{lit}` h`. # Pattern matching %%% tag := "pattern-matching-conv" %%% Navigation using the above commands can be tedious. One can shortcut it using pattern matching as follows: ```lean example (a b c : Nat) : a * (b * c) = a * (c * b) := by conv in b * c => rw [Nat.mul_comm] ``` which is just syntax sugar for ```lean example (a b c : Nat) : a * (b * c) = a * (c * b) := by conv => pattern b * c rw [Nat.mul_comm] ``` Of course, wildcards are allowed: ```lean example (a b c : Nat) : a * (b * c) = a * (c * b) := by conv in _ * c => rw [Nat.mul_comm] ``` # Structuring conversion tactics %%% tag := "structuring-conversion-tactics" %%% Curly brackets and {lit}`.` can also be used in {leanRef}`conv` mode to structure tactics: ```lean example (a b c : Nat) : (0 + a) * (b * c) = a * (c * b) := by conv => lhs congr . rw [Nat.zero_add] . rw [Nat.mul_comm] ``` # Other tactics inside conversion mode %%% tag := "other-tactics-inside-conversion-mode" %%% - :::leanFirst {leanRef}`arg`{lit}` i` enter the {lit}`i`-th nondependent explicit argument of an application. ```lean (showProofStates := "arg2 arg3") example (a b c : Nat) : a * (b * c) = a * (c * b) := by conv => -- ^ PROOF_STATE: arg1 lhs -- ^ PROOF_STATE: arg2 arg 2 -- ^ PROOF_STATE: arg3 rw [Nat.mul_comm] ``` ::: - {tactic}`args` is an alternative name for {leanRef}`congr`. - {leanRef}`simp` applies the simplifier to the current goal. It supports the same options available in regular tactic mode. ```lean def f (x : Nat) := if x > 0 then x + 1 else x + 2 example (g : Nat → Nat) (h₁ : g x = x + 1) (h₂ : x > 0) : g x = f x := by conv => rhs simp [f, h₂] exact h₁ ``` - {kw}`enter`{lit}` [1, x, 2, y]` iterate {leanRef}`arg` and {leanRef}`intro` with the given arguments. - {tactic}`done` fail if there are unsolved goals. - {tactic}`trace_state` display the current tactic state. - {tactic}`whnf` put term in weak head normal form. - {kw}`tactic`{lit}` => ` go back to regular tactic mode. This is useful for discharging goals not supported by {leanRef}`conv` mode, and applying custom congruence and extensionality lemmas. ```lean (showProofStates := "convTac1 convTac2 convTac4") example (g : Nat → Nat → Nat) (h₁ : ∀ x, x ≠ 0 → g x x = 1) (h₂ : x ≠ 0) : g x x + x = 1 + x := by conv => lhs -- ^ PROOF_STATE: convTac1 arg 1 -- ^ PROOF_STATE: convTac2 rw [h₁] . skip . tactic => -- ^ PROOF_STATE: convTac4 exact h₂ ``` - {kw}`apply`{lit}` ` is syntax sugar for {kw}`tactic`{lit}` => apply `. ```lean example (g : Nat → Nat → Nat) (h₁ : ∀ x, x ≠ 0 → g x x = 1) (h₂ : x ≠ 0) : g x x + x = 1 + x := by conv => lhs arg 1 rw [h₁] . skip . apply h₂ ``` ================================================ FILE: book/TPiL/DependentTypeTheory.lean ================================================ import VersoManual import TPiL.Examples open TPiL open Verso.Genre Manual #doc (Manual) "Dependent Type Theory" => %%% tag := "dependent-type-theory" htmlSplit := .never %%% Dependent type theory is a powerful and expressive language, allowing you to express complex mathematical assertions, write complex hardware and software specifications, and reason about both of these in a natural and uniform way. Lean is based on a version of dependent type theory known as the _Calculus of Constructions_, with a countable hierarchy of non-cumulative universes and inductive types. By the end of this chapter, you will understand much of what this means. # Simple Type Theory %%% tag := "simple-type-theory" %%% “Type theory” gets its name from the fact that every expression has an associated _type_. For example, in a given context, {lit}`x + 0` may denote a natural number and {lit}`f` may denote a function on the natural numbers. For those who like precise definitions, a Lean natural number is an arbitrary-precision unsigned integer. Here are some examples of how you can declare objects in Lean and check their types. ```lean /- Define some constants. -/ def m : Nat := 1 -- m is a natural number def n : Nat := 0 def b1 : Bool := true -- b1 is a Boolean def b2 : Bool := false /- Check their types. -/ #check m -- m : Nat #check n #check n + 0 -- n + 0 : Nat #check m * (n + 0) -- m * (n + 0) : Nat #check b1 -- b1 : Bool -- "&&" is the Boolean and #check b1 && b2 -- b1 && b2 : Bool -- Boolean or #check b1 || b2 -- b1 || b2 : Bool -- Boolean "true" #check true -- Bool.true : Bool /- Evaluate -/ #eval 5 * 4 -- 20 #eval m + 2 -- 3 #eval b1 && b2 -- false ``` Any text between {lit}`/-` and {lit}`-/` constitutes a comment block that is ignored by Lean. Similarly, two dashes {lean}`--` indicate that the rest of the line contains a comment that is also ignored. Comment blocks can be nested, making it possible to “comment out” chunks of code, just as in many programming languages. The {kw}`def` keyword declares new constant symbols into the working environment. In the example above, {leanRef}`def m : Nat := 1` defines a new constant {leanRef}`m` of type {lean}`Nat` whose value is {leanRef}`1`. The {kw}`#check` command asks Lean to report their types; in Lean, auxiliary commands that query the system for information typically begin with the hash (#) symbol. The {kw}`#eval` command asks Lean to evaluate the given expression. You should try declaring some constants and type checking some expressions on your own. Declaring new objects in this manner is a good way to experiment with the system. :::setup ``` variable (a b : Type) ``` What makes simple type theory powerful is that you can build new types out of others. For example, if {lean}`a` and {lean}`b` are types, {lean}`a -> b` denotes the type of functions from {lean}`a` to {lean}`b`, and {lean}`a × b` denotes the type of pairs consisting of an element of {lean}`a` paired with an element of {lean}`b`, also known as the _Cartesian product_. Note that {lit}`×` is a Unicode symbol. The judicious use of Unicode improves legibility, and all modern editors have great support for it. In the Lean standard library, you often see Greek letters to denote types, and the Unicode symbol {lit}`→` as a more compact version of {lit}`->`. ::: ```lean (check := false) #check Nat → Nat -- type the arrow as “\to” or "\r" #check Nat -> Nat -- alternative ASCII notation #check Nat × Nat -- type the product as "\times" #check Prod Nat Nat -- alternative notation #check Nat → Nat → Nat #check Nat → (Nat → Nat) -- same type as above #check Nat × Nat → Nat #check (Nat → Nat) → Nat -- a "functional" ``` ```lean #check Nat.succ -- Nat.succ (n : Nat) : Nat #check (0, 1) -- (0, 1) : Nat × Nat #check Nat.add -- Nat.add : Nat → Nat → Nat #check Nat.succ 2 -- Nat.succ 2 : Nat #check Nat.add 3 -- Nat.add 3 : Nat → Nat #check Nat.add 5 2 -- Nat.add 5 2 : Nat #check (5, 9).1 -- (5, 9).fst : Nat #check (5, 9).2 -- (5, 9).snd : Nat #eval Nat.succ 2 -- 3 #eval Nat.add 5 2 -- 7 #eval (5, 9).1 -- 5 #eval (5, 9).2 -- 9 ``` Once again, you should try some examples on your own. Let's take a look at some basic syntax. You can enter the Unicode arrow {lit}`→` by typing {kbd}`\to` or {kbd}`\r` or {kbd}`\->`. You can also use the ASCII alternative {lit}`->`, so the expressions {lean}`Nat -> Nat` and {lean}`Nat → Nat` mean the same thing. Both expressions denote the type of functions that take a natural number as input and return a natural number as output. The Unicode symbol {lit}`×` for the Cartesian product is entered as {kbd}`\times`. You will generally use lower-case Greek letters like {lit}`α`, {lit}`β`, and {lit}`γ` to range over types. You can enter these particular ones with {kbd}`\a`, {kbd}`\b`, and {kbd}`\g`. ::::setup ``` variable (α β : Type) (f : α → β) (x : α) (m n : Nat) (p : Nat × Nat) ``` There are a few more things to notice here. First, the application of a function {lean}`f` to a value {lean}`x` is denoted {lean}`f x` (e.g., {lean}`Nat.succ 2`). Second, when writing type expressions, arrows associate to the _right_; for example, the type of {lean}`Nat.add` is {lean}`Nat → Nat → Nat` which is equivalent to {lean}`Nat → (Nat → Nat)`. Thus you can view {lean}`Nat.add` as a function that takes a natural number and returns another function that takes a natural number and returns a natural number. In type theory, this is generally more convenient than writing {lean}`Nat.add` as a function that takes a pair of natural numbers as input and returns a natural number as output. For example, it allows you to “partially apply” the function {lean}`Nat.add`. The example above shows that {lean}`Nat.add 3` has type {lean}`Nat → Nat`, that is, {lean}`Nat.add 3` returns a function that “waits” for a second argument, {lean}`n`, which is then equivalent to writing {lean}`Nat.add 3 n`. :::comment ``` ``` ::: You have seen that if you have {lean}`m : Nat` and {lean}`n : Nat`, then {lean}`(m, n)` denotes the ordered pair of {lean}`m` and {lean}`n` which is of type {lean}`Nat × Nat`. This gives you a way of creating pairs of natural numbers. Conversely, if you have {lean}`p : Nat × Nat`, then you can write {lean}`p.1 : Nat` and {lean}`p.2 : Nat`. This gives you a way of extracting its two components. :::: # Types as objects %%% tag := "types-as-objects" %%% One way in which Lean's dependent type theory extends simple type theory is that types themselves—entities like {lean}`Nat` and {lean}`Bool`—are first-class citizens, which is to say that they themselves are objects. For that to be the case, each of them also has to have a type. ```lean #check Nat #check Bool #check Nat → Bool #check Nat × Bool #check Nat → Nat #check Nat × Nat → Nat #check Nat → Nat → Nat #check Nat → (Nat → Nat) #check Nat → Nat → Bool #check (Nat → Nat) → Nat ``` You can see that each one of the expressions above is an object of type {lean}`Type`. You can also declare new constants for types: ```lean def α : Type := Nat def β : Type := Bool def F : Type → Type := List def G : Type → Type → Type := Prod #check α -- α : Type #check F α -- F α : Type #check F Nat -- F Nat : Type #check G α -- G α : Type → Type #check G α β -- G α β : Type #check G α Nat -- G α Nat : Type ``` As the example above suggests, you have already seen an example of a function of type {lean}`Type → Type → Type`, namely, the Cartesian product {lean}`Prod`: ```lean def α : Type := Nat def β : Type := Bool #check Prod α β -- α × β : Type #check α × β -- α × β : Type #check Prod Nat Nat -- Nat × Nat : Type #check Nat × Nat -- Nat × Nat : Type ``` :::leanFirst Here is another example: given any type {leanRef}`α`, the type {leanRef}`List α` denotes the type of lists of elements of type {leanRef}`α`. ```lean def α : Type := Nat #check List α -- List α : Type #check List Nat -- List Nat : Type ``` ::: Given that every expression in Lean has a type, it is natural to ask: what type does {lean}`Type` itself have? ```lean #check Type -- Type : Type 1 ``` You have actually come up against one of the most subtle aspects of Lean's typing system. Lean's underlying foundation has an infinite hierarchy of types: ```lean #check Type -- Type : Type 1 #check Type 1 -- Type 1 : Type 2 #check Type 2 -- Type 2 : Type 3 #check Type 3 -- Type 3 : Type 4 #check Type 4 -- Type 4 : Type 5 ``` :::setup ``` universe n variable (n : Nat) ``` Think of {lean}`Type 0` as a universe of “small” or “ordinary” types. {lean}`Type 1` is then a larger universe of types, which contains {lean}`Type 0` as an element, and {lean}`Type 2` is an even larger universe of types, which contains {lean}`Type 1` as an element. The list is infinite: there is a {lean}`Type n` for every natural number {lean}`n`. {lean}`Type` is an abbreviation for {lean}`Type 0`: ::: ```lean #check Type #check Type 0 ``` The following table may help concretize the relationships being discussed. Movement along the x-axis represents a change in the universe, while movement along the y-axis represents a change in what is sometimes referred to as “degree”. :::table * * sort * {lean}`Prop` ({lean}`Sort 0`) * {lean}`Type` ({lean}`Sort 1`) * {lean}`Type 1` ({lean}`Sort 2`) * {lean}`Type 2` ({lean}`Sort 3`) * ... * * type * {lean}`True` * {lean}`Bool` * {lean}`Nat -> Type` * {lean}`Type -> Type 1` * ... * * term * {lean}`True.intro` * {lean}`true` * {lean}`fun n => Fin n` * {lean}`fun (_ : Type) => Type` * ... ::: :::setup ``` universe u variable (α : Type u) ``` Some operations, however, need to be _polymorphic_ over type universes. For example, {lean}`List α` should make sense for any type {lean}`α`, no matter which type universe {lean}`α` lives in. This explains the type signature of the function {lean}`List`: ```lean #check List -- List.{u} (α : Type u) : Type u ``` Here {lit}`u` is a variable ranging over type levels. The output of the {kw}`#check` command means that whenever {lean}`α` has type {lean}`Type u`, {lean}`List α` also has type {lean}`Type u`. The function {lean}`Prod` is similarly polymorphic: ::: ```lean #check Prod -- Prod.{u, v} (α : Type u) (β : Type v) : Type (max u v) ``` To define polymorphic constants, Lean allows you to declare universe variables explicitly using the {kw}`universe` command: ```lean universe u def F (α : Type u) : Type u := Prod α α #check F -- F.{u} (α : Type u) : Type u ``` :::leanFirst You can avoid the {kw}`universe` command by providing the universe parameters when defining {leanRef}`F`: ```lean def F.{u} (α : Type u) : Type u := Prod α α #check F -- F.{u} (α : Type u) : Type u ``` ::: # Function Abstraction and Evaluation %%% tag := "function-abstraction-and-evaluation" %%% Lean provides a {kw}`fun` (or {kw}`λ`) keyword to create a function from an expression as follows: ```lean #check fun (x : Nat) => x + 5 -- fun x => x + 5 : Nat → Nat -- λ and fun mean the same thing #check λ (x : Nat) => x + 5 -- fun x => x + 5 : Nat → Nat ``` The type {lean}`Nat` can be inferred in this example: ```lean #check fun x => x + 5 -- fun x => x + 5 : Nat → Nat #check λ x => x + 5 -- fun x => x + 5 : Nat → Nat ``` You can evaluate a lambda function by passing the required parameters: ```lean #eval (λ x : Nat => x + 5) 10 -- 15 ``` :::setup ``` variable {x : α} {t : β} ``` Creating a function from another expression is a process known as _lambda abstraction_. Suppose you have the variable {lean}`x : α` and you can construct an expression {lean}`t : β`, then the expression {lean}`fun (x : α) => t`, or, equivalently, {lean}`λ (x : α) => t`, is an object of type {lean}`α → β`. Think of this as the function from {lean}`α` to {lean}`β` which maps any value {leanRef}`x` to the value {leanRef}`t`. ::: Here are some more examples ```lean #check fun x : Nat => fun y : Bool => if not y then x + 1 else x + 2 #check fun (x : Nat) (y : Bool) => if not y then x + 1 else x + 2 #check fun x y => if not y then x + 1 else x + 2 -- fun x y => if (!y) = true then x + 1 else x + 2 : Nat → Bool → Nat ``` Lean interprets the final three examples as the same expression; in the last expression, Lean infers the type of {leanRef}`x` and {leanRef}`y` from the expression {leanRef}`if not y then x + 1 else x + 2`. Some mathematically common examples of operations of functions can be described in terms of lambda abstraction: ```lean def f (n : Nat) : String := toString n def g (s : String) : Bool := s.length > 0 #check fun x : Nat => x -- fun x => x : Nat → Nat #check fun x : Nat => true -- fun x => true : Nat → Bool #check fun x : Nat => g (f x) -- fun x => g (f x) : Nat → Bool #check fun x => g (f x) -- fun x => g (f x) : Nat → Bool ``` Think about what these expressions mean. The expression {lean}`fun x : Nat => x` denotes the identity function on {lean}`Nat`, the expression {lean}`fun x : Nat => true` denotes the constant function that always returns {lean}`true`, and {leanRef}`fun x : Nat => g (f x)` denotes the composition of {leanRef}`f` and {leanRef}`g`. You can, in general, leave off the type annotation and let Lean infer it for you. So, for example, you can write {leanRef}`fun x => g (f x)` instead of {leanRef}`fun x : Nat => g (f x)`. :::leanFirst You can pass functions as parameters and by giving them names {leanRef}`f` and {leanRef}`g` you can then use those functions in the implementation: ```lean #check fun (g : String → Bool) (f : Nat → String) (x : Nat) => g (f x) ``` ::: You can also pass types as parameters: ```lean #check fun (α β γ : Type) (g : β → γ) (f : α → β) (x : α) => g (f x) ``` The last expression, for example, denotes the function that takes three types, {leanRef}`α`, {leanRef}`β`, and {leanRef}`γ`, and two functions, {leanRef}`g : β → γ` and {leanRef}`f : α → β`, and returns the composition of {leanRef}`g` and {leanRef}`f`. (Making sense of the type of this function requires an understanding of _dependent products_, which will be explained below.) :::setup ``` variable (α : Type) (t : β) -- Avoid warnings axiom whatever : α def b : γ := whatever ``` The general form of a lambda expression is {lean}`fun (x : α) => t`, where the variable {leanRef}`x` is a “bound variable”: it is really a placeholder, whose “scope” does not extend beyond the expression {leanRef}`t`. For example, the variable {lit}`b` in the expression {lean}`fun (b : β) (x : α) => b` has nothing to do with the constant {lean}`b` declared earlier. In fact, the expression denotes the same function as {lean}`fun (u : β) (z : α) => u`. Formally, expressions that are the same up to a renaming of bound variables are called _alpha equivalent_, and are considered “the same.” Lean recognizes this equivalence. ::: :::setup ``` variable (t : α → β) (s : α) ``` Notice that applying a term {lean}`t : α → β` to a term {lean}`s : α` yields an expression {lean}`t s : β`. Returning to the previous example and renaming bound variables for clarity, notice the types of the following expressions: ::: ```lean #check (fun x : Nat => x) 1 -- (fun x => x) 1 : Nat #check (fun x : Nat => true) 1 -- (fun x => true) 1 : Bool def f (n : Nat) : String := toString n def g (s : String) : Bool := s.length > 0 #check (fun (α β γ : Type) (u : β → γ) (v : α → β) (x : α) => u (v x)) Nat String Bool g f 0 ``` As expected, the expression {lean}`(fun x : Nat => x) 1` has type {lean}`Nat`. In fact, more should be true: applying the expression {lean}`(fun x : Nat => x)` to {lean}`1` should “return” the value {lean}`1`. And, indeed, it does: ```lean #eval (fun x : Nat => x) 1 -- 1 #eval (fun x : Nat => true) 1 -- true ``` You will see later how these terms are evaluated. For now, notice that this is an important feature of dependent type theory: every term has a computational behavior, and supports a notion of _normalization_. In principle, two terms that reduce to the same value are called _definitionally equal_. They are considered “the same” by Lean's type checker, and Lean does its best to recognize and support these identifications. Lean is a complete programming language. It has a compiler that generates a binary executable and an interactive interpreter. You can use the command {kw}`#eval` to execute expressions, and it is the preferred way of testing your functions. :::comment ``` ``` ::: # Definitions %%% tag := "definitions" %%% Recall that the {kw}`def` keyword provides one important way of declaring new named objects. ```lean def double (x : Nat) : Nat := x + x ``` This might look more familiar to you if you know how functions work in other programming languages. The name {leanRef}`double` is defined as a function that takes an input parameter {leanRef}`x` of type {lean}`Nat`, where the result of the call is {leanRef}`x + x`, so it is returning type {lean}`Nat`. You can then invoke this function using: ```lean def double (x : Nat) : Nat := x + x ----- #eval double 3 -- 6 ``` In this case you can think of {kw}`def` as a kind of named {kw}`fun`. The following yields the same result: ```lean def double : Nat → Nat := fun x => x + x #eval double 3 -- 6 ``` You can omit the type declarations when Lean has enough information to infer it. Type inference is an important part of Lean: ```lean def double := fun (x : Nat) => x + x ``` The general form of a definition is {lit}`def foo : α := bar` where {lit}`α` is the type returned from the expression {lit}`bar`. Lean can usually infer the type {lit}`α`, but it is often a good idea to write it explicitly. This clarifies your intention, and Lean will flag an error if the right-hand side of the definition does not have a matching type. The right hand side {lit}`bar` can be any expression, not just a lambda. So {kw}`def` can also be used to simply name a value like this: ```lean def pi := 3.141592654 ``` {kw}`def` can take multiple input parameters. Let's create one that adds two natural numbers: ```lean def add (x y : Nat) := x + y #eval add 3 2 -- 5 ``` The parameter list can be separated like this: ```lean def double (x : Nat) : Nat := x + x ----- def add (x : Nat) (y : Nat) := x + y #eval add (double 3) (7 + 9) -- 22 ``` Notice here we called the {leanRef}`double` function to create the first parameter to {leanRef}`add`. You can use other more interesting expressions inside a {kw}`def`: ```lean def greater (x y : Nat) := if x > y then x else y ``` You can probably guess what this one will do. You can also define a function that takes another function as input. The following calls a given function twice passing the output of the first invocation to the second: ```lean def double (x : Nat) : Nat := x + x ----- def doTwice (f : Nat → Nat) (x : Nat) : Nat := f (f x) #eval doTwice double 2 -- 8 ``` Now to get a bit more abstract, you can also specify arguments that are like type parameters: ```lean def compose (α β γ : Type) (g : β → γ) (f : α → β) (x : α) : γ := g (f x) ``` This means {leanRef}`compose` is a function that takes any two functions as input arguments, so long as those functions each take only one input. The type algebra {leanRef}`β → γ` and {leanRef}`α → β` means it is a requirement that the type of the output of the second function must match the type of the input to the first function—which makes sense, otherwise the two functions would not be composable. {leanRef}`compose` also takes a 3rd argument of type {leanRef}`α` which it uses to invoke the second function (locally named {leanRef}`f`) and it passes the result of that function (which is type {leanRef}`β`) as input to the first function (locally named {leanRef}`g`). The first function returns a type {leanRef}`γ` so that is also the return type of the {leanRef}`compose` function. {leanRef}`compose` is also very general in that it works over any type {leanRef}`α β γ`. This means {leanRef}`compose` can compose just about any 2 functions so long as they each take one parameter, and so long as the type of output of the second matches the input of the first. For example: ```lean def compose (α β γ : Type) (g : β → γ) (f : α → β) (x : α) : γ := g (f x) def double (x : Nat) : Nat := x + x ----- def square (x : Nat) : Nat := x * x #eval compose Nat Nat Nat double square 3 -- 18 ``` # Local Definitions %%% tag := "local-definitions" %%% :::setup ``` variable (t1 : α) (t2 : β) ``` Lean also allows you to introduce “local” definitions using the {kw}`let` keyword. The expression {lean}`let a := t1; t2` is definitionally equal to the result of replacing every occurrence of {leanRef}`a` in {leanRef}`t2` by {leanRef}`t1`. ::: ```lean #check let y := 2 + 2; y * y -- let y := 2 + 2; y * y : Nat #eval let y := 2 + 2; y * y -- 16 def twice_double (x : Nat) : Nat := let y := x + x; y * y #eval twice_double 2 -- 16 ``` :::setup ``` def twice_double (x : Nat) : Nat := let y := x + x; y * y variable (x : Nat) ``` Here, {lean}`twice_double x` is definitionally equal to the term {lean}`(x + x) * (x + x)`. ::: You can combine multiple assignments by chaining {kw}`let` statements: ```lean #check let y := 2 + 2; let z := y + y; z * z #eval let y := 2 + 2; let z := y + y; z * z -- 64 ``` The {lit}`;` can be omitted when a line break is used. ```lean def t (x : Nat) : Nat := let y := x + x y * y ``` ::::leanFirst :::setup ``` variable (t1 : α) (t2 : β) ``` Notice that the meaning of the expression {lean}`let a := t1; t2` is very similar to the meaning of {lean}`(fun a => t2) t1`, but the two are not the same. In the first expression, you should think of every instance of {leanRef (in:="let a := t1; t2")}`a` in {leanRef (in:="let a := t1; t2")}`t2` as a syntactic abbreviation for {leanRef (in:="let a := t1; t2")}`t1`. In the second expression, {leanRef (in:="(fun a => t2) t1")}`a` is a variable, and the expression {leanRef (in:="(fun a => t2) t1")}`fun a => t2` has to make sense independently of the value of {leanRef (in:="(fun a => t2) t1")}`a`. The {kw}`let` construct is a stronger means of abbreviation, and there are expressions of the form {lean}`let a := t1; t2` that cannot be expressed as {lean}`(fun a => t2) t1`. As an exercise, try to understand why the definition of {leanRef}`foo` below type checks, but the definition of {lit}`bar` does not. ::: ```lean def foo := let a := Nat; fun x : a => x + 2 /- def bar := (fun a => fun x : a => x + 2) Nat -/ ``` :::: # Variables and Sections %%% tag := "variables-and-sections" %%% Consider the following three function definitions: ```lean def compose (α β γ : Type) (g : β → γ) (f : α → β) (x : α) : γ := g (f x) def doTwice (α : Type) (h : α → α) (x : α) : α := h (h x) def doThrice (α : Type) (h : α → α) (x : α) : α := h (h (h x)) ``` Lean provides you with the {kw}`variable` command to make such declarations look more compact: ```lean variable (α β γ : Type) def compose (g : β → γ) (f : α → β) (x : α) : γ := g (f x) def doTwice (h : α → α) (x : α) : α := h (h x) def doThrice (h : α → α) (x : α) : α := h (h (h x)) ``` You can declare variables of any type, not just {lean}`Type` itself: ```lean variable (α β γ : Type) variable (g : β → γ) (f : α → β) (h : α → α) variable (x : α) def compose := g (f x) def doTwice := h (h x) def doThrice := h (h (h x)) #print compose #print doTwice #print doThrice ``` Printing them out shows that all three groups of definitions have exactly the same effect. The {kw}`variable` command instructs Lean to insert the declared variables as bound variables in definitions that refer to them by name. Lean is smart enough to figure out which variables are used explicitly or implicitly in a definition. You can therefore proceed as though {leanRef}`α`, {leanRef}`β`, {leanRef}`γ`, {leanRef}`g`, {leanRef}`f`, {leanRef}`h`, and {leanRef}`x` are fixed objects when you write your definitions, and let Lean abstract the definitions for you automatically. When declared in this way, a variable stays in scope until the end of the file you are working on. Sometimes, however, it is useful to limit the scope of a variable. For that purpose, Lean provides the notion of a {kw}`section`: ```lean section useful variable (α β γ : Type) variable (g : β → γ) (f : α → β) (h : α → α) variable (x : α) def compose := g (f x) def doTwice := h (h x) def doThrice := h (h (h x)) end useful ``` When the section is closed, the variables go out of scope, and cannot be referenced any more. You do not have to indent the lines within a section. Nor do you have to name a section, which is to say, you can use an anonymous {kw}`section` / {kw}`end` pair. If you do name a section, however, you have to close it using the same name. Sections can also be nested, which allows you to declare new variables incrementally. # Namespaces %%% tag := "namespaces" %%% Lean provides you with the ability to group definitions into nested, hierarchical _namespaces_: ```lean namespace Foo def a : Nat := 5 def f (x : Nat) : Nat := x + 7 def fa : Nat := f a def ffa : Nat := f (f a) #check a #check f #check fa #check ffa #check Foo.fa end Foo -- #check a -- error -- #check f -- error #check Foo.a #check Foo.f #check Foo.fa #check Foo.ffa open Foo #check a #check f #check fa #check Foo.fa ``` When you declare that you are working in the namespace {leanRef}`Foo`, every identifier you declare has a full name with prefix “{lit}`Foo.`”. Within the namespace, you can refer to identifiers by their shorter names, but once you end the namespace, you have to use the longer names. Unlike {kw}`section`, namespaces require a name. There is only one anonymous namespace at the root level. The {leanRef}`open` command brings the shorter names into the current context. Often, when you import a module, you will want to open one or more of the namespaces it contains, to have access to the short identifiers. But sometimes you will want to leave this information protected by a fully qualified name, for example, when they conflict with identifiers in another namespace you want to use. Thus namespaces give you a way to manage names in your working environment. For example, Lean groups definitions and theorems involving lists into a namespace {lit}`List`. ```lean #check List.nil #check List.cons #check List.map ``` :::leanFirst The command {leanRef}`open List` allows you to use the shorter names: ```lean open List #check nil #check cons #check map ``` ::: Like sections, namespaces can be nested: ```lean namespace Foo def a : Nat := 5 def f (x : Nat) : Nat := x + 7 def fa : Nat := f a namespace Bar def ffa : Nat := f (f a) #check fa #check ffa end Bar #check fa #check Bar.ffa end Foo #check Foo.fa #check Foo.Bar.ffa open Foo #check fa #check Bar.ffa ``` Namespaces that have been closed can later be reopened, even in another file: ```lean namespace Foo def a : Nat := 5 def f (x : Nat) : Nat := x + 7 def fa : Nat := f a end Foo #check Foo.a #check Foo.f namespace Foo def ffa : Nat := f (f a) end Foo ``` Like sections, nested namespaces have to be closed in the order they are opened. Namespaces and sections serve different purposes: namespaces organize data and sections declare variables for insertion in definitions. Sections are also useful for delimiting the scope of commands such as {kw}`set_option` and {kw}`open`. In many respects, however, a {kw}`namespace`{lit}` ... `{kw}`end` block behaves the same as a {kw}`section`{lit}` ... `{kw}`end` block. In particular, if you use the {kw}`variable` command within a namespace, its scope is limited to the namespace. Similarly, if you use an {kw}`open` command within a namespace, its effects disappear when the namespace is closed. # What makes dependent type theory dependent? %%% tag := "what-makes-dependent-type-theory-dependent" %%% :::setup ``` variable (α : Type) (n : Nat) ``` The short explanation is that types can depend on parameters. You have already seen a nice example of this: the type {lean}`List α` depends on the argument {lean}`α`, and this dependence is what distinguishes {lean}`List Nat` and {lean}`List Bool`. For another example, consider the type {lean}`Vector α n`, the type of vectors of elements of {lean}`α` of length {lean}`n`. This type depends on _two_ parameters: the type of the elements in the vector ({lean}`α : Type`) and the length of the vector {lean}`n : Nat`. ::: ::::setup ``` def cons (α : Type) (a : α) (as : List α) : List α := List.cons a as variable (α : Type) (a : α) (as : List α) ``` :::leanFirst Suppose you wish to write a function {leanRef}`cons` which inserts a new element at the head of a list. What type should {leanRef}`cons` have? Such a function is _polymorphic_: you expect the {leanRef}`cons` function for {lean}`Nat`, {lean}`Bool`, or an arbitrary type {leanRef}`α` to behave the same way. So it makes sense to take the type to be the first argument to {leanRef}`cons`, so that for any type, {lean}`α`, {lean}`cons α` is the insertion function for lists of type {lean}`α`. In other words, for every {lean}`α`, {lean}`cons α` is the function that takes an element {lean}`a : α` and a list {lean}`as : List α`, and returns a new list, so you have {lean}`cons α a as : List α`. It is clear that {lean}`cons α` should have type {lean}`α → List α → List α`. But what type should {leanRef}`cons` have? A first guess might be {lean}`Type → α → List α → List α`, but, on reflection, this does not make sense: the {leanRef}`α` in this expression does not refer to anything, whereas it should refer to the argument of type {lean}`Type`. In other words, _assuming_ {lean}`α : Type` is the first argument to the function, the type of the next two elements are {lean}`α` and {lean}`List α`. These types vary depending on the first argument, {leanRef}`α`. ```lean def cons (α : Type) (a : α) (as : List α) : List α := List.cons a as #check cons Nat -- cons Nat : Nat → List Nat → List Nat #check cons Bool -- cons Bool : Bool → List Bool → List Bool #check cons -- cons (α : Type) (a : α) (as : List α) : List α ``` ::: :::: :::setup ``` variable (α : Type) (β : α → Type) (a : α) (f : (a : α) → β a) ``` This is an instance of a _dependent function type_, or *dependent arrow type*. Given {lean}`α : Type` and {lean}`β : α → Type`, think of {lean}`β` as a family of types over {lean}`α`, that is, a type {lean}`β a` for each {lean}`a : α`. In that case, the type {lean}`(a : α) → β a` denotes the type of functions {lean}`f` with the property that, for each {lean}`a : α`, {lean}`f a` is an element of {lean}`β a`. In other words, the type of the value returned by {lean}`f` depends on its input. ::: :::setup ``` variable (α : Type) (β : Type) (a : α) (f : (a : α) → β a) ``` Notice that {lean}`(a : α) → β` makes sense for any expression {lean}`β : Type`. When the value of {lean}`β` depends on {leanRef}`a` (as does, for example, the expression {leanRef}`β a` in the previous paragraph), {leanRef}`(a : α) → β` denotes a dependent function type. When {lean}`β` doesn't depend on {leanRef}`a`, {leanRef}`(a : α) → β` is no different from the type {lean}`α → β`. Indeed, in dependent type theory (and in Lean), {lean}`α → β` is just notation for {lean}`(a : α) → β` when {lean}`β` does not depend on {leanRef (in := "a : α")}`a`. ::: Returning to the example of lists, you can use the command {kw}`#check` to inspect the type of the following {lean}`List` functions. The {lit}`@` symbol and the difference between the round and curly braces will be explained momentarily. ```lean #check @List.cons -- @List.cons : {α : Type u_1} → α → List α → List α #check @List.nil -- @List.nil : {α : Type u_1} → List α #check @List.length -- @List.length : {α : Type u_1} → List α → Nat #check @List.append -- @List.append : {α : Type u_1} → List α → List α → List α ``` :::setup ``` variable (α : Type) (β : α → Type) (a : α) (b : β a) ``` Just as dependent function types {lean}`(a : α) → β a` generalize the notion of a function type {leanRef}`α → β` by allowing {leanRef (in := "α → β")}`β` to depend on {lean}`a`, dependent Cartesian product types {lean}`(a : α) × β a` generalize the Cartesian product {lit}`α × β` in the same way. Dependent products are also called _sigma_ types, and you can also write them as {lean}`Σ a : α, β a`. You can use {lean (type := "(a : α) × β a")}`⟨a, b⟩` or {lean}`Sigma.mk a b` to create a dependent pair. The {lit}`⟨` and {lit}`⟩` characters may be typed with {kbd}`\langle` and {kbd}`\rangle` or {kbd}`\<` and {kbd}`\>`, respectively. ::: ```lean universe u v def f (α : Type u) (β : α → Type v) (a : α) (b : β a) : (a : α) × β a := ⟨a, b⟩ def g (α : Type u) (β : α → Type v) (a : α) (b : β a) : Σ a : α, β a := Sigma.mk a b def h1 (x : Nat) : Nat := (f Type (fun α => α) Nat x).2 #eval h1 5 -- 5 def h2 (x : Nat) : Nat := (g Type (fun α => α) Nat x).2 #eval h2 5 -- 5 ``` The functions {leanRef}`f` and {leanRef}`g` above denote the same function. # Implicit Arguments %%% tag := "implicit-arguments" %%% Suppose we have an implementation of lists as: ```lean universe u def Lst (α : Type u) : Type u := List α def Lst.cons (α : Type u) (a : α) (as : Lst α) : Lst α := List.cons a as def Lst.nil (α : Type u) : Lst α := List.nil def Lst.append (α : Type u) (as bs : Lst α) : Lst α := List.append as bs ----- #check Lst -- Lst.{u} (α : Type u) : Type u #check Lst.cons -- Lst.cons.{u} (α : Type u) (a : α) (as : Lst α) : Lst α #check Lst.nil -- Lst.nil.{u} (α : Type u) : Lst α #check Lst.append -- Lst.append.{u} (α : Type u) (as bs : Lst α) : Lst α ``` Then, you can construct lists of {lean}`Nat` as follows: ```lean universe u def Lst (α : Type u) : Type u := List α def Lst.cons (α : Type u) (a : α) (as : Lst α) : Lst α := List.cons a as def Lst.nil (α : Type u) : Lst α := List.nil def Lst.append (α : Type u) (as bs : Lst α) : Lst α := List.append as bs ----- #check Lst.cons Nat 0 (Lst.nil Nat) def as : Lst Nat := Lst.nil Nat def bs : Lst Nat := Lst.cons Nat 5 (Lst.nil Nat) #check Lst.append Nat as bs ``` :::setup ``` def Lst (α : Type u) : Type u := List α variable (α : Type) ``` Because the constructors are polymorphic over types, we have to insert the type {lean}`Nat` as an argument repeatedly. But this information is redundant: one can infer the argument {leanRef}`α` in {leanRef}`Lst.cons Nat 5 (Lst.nil Nat)` from the fact that the second argument, {leanRef}`5`, has type {lean}`Nat`. One can similarly infer the argument in {leanRef}`Lst.nil Nat`, not from anything else in that expression, but from the fact that it is sent as an argument to the function {leanRef}`Lst.cons`, which expects an element of type {lean}`Lst α` in that position. ::: This is a central feature of dependent type theory: terms carry a lot of information, and often some of that information can be inferred from the context. In Lean, one uses an underscore, {lit}`_`, to specify that the system should fill in the information automatically. This is known as an “implicit argument.” ```lean universe u def Lst (α : Type u) : Type u := List α def Lst.cons (α : Type u) (a : α) (as : Lst α) : Lst α := List.cons a as def Lst.nil (α : Type u) : Lst α := List.nil def Lst.append (α : Type u) (as bs : Lst α) : Lst α := List.append as bs #check Lst #check Lst.cons #check Lst.nil #check Lst.append ----- #check Lst.cons _ 0 (Lst.nil _) def as : Lst Nat := Lst.nil _ def bs : Lst Nat := Lst.cons _ 5 (Lst.nil _) #check Lst.append _ as bs -- Lst.append Nat as bs : Lst Nat ``` It is still tedious, however, to type all these underscores. When a function takes an argument that can generally be inferred from context, Lean allows you to specify that this argument should, by default, be left implicit. This is done by putting the arguments in curly braces, as follows: ```lean universe u def Lst (α : Type u) : Type u := List α def Lst.cons {α : Type u} (a : α) (as : Lst α) : Lst α := List.cons a as def Lst.nil {α : Type u} : Lst α := List.nil def Lst.append {α : Type u} (as bs : Lst α) : Lst α := List.append as bs #check Lst.cons 0 Lst.nil def as : Lst Nat := Lst.nil def bs : Lst Nat := Lst.cons 5 Lst.nil #check Lst.append as bs ``` All that has changed are the braces around {leanRef}`α : Type u` in the declaration of the variables. We can also use this device in function definitions: ```lean universe u def ident {α : Type u} (x : α) := x ``` Checking the type of {leanRef}`ident` requires wrapping it in parentheses to avoid having its signature shown: ```lean universe u def ident {α : Type u} (x : α) := x --------- #check (ident) -- ident : ?m.22 → ?m.22 #check ident 1 -- ident 1 : Nat #check ident "hello" -- ident "hello" : String #check @ident -- @ident : {α : Type u_1} → α → α ``` The makes the first argument to {leanRef}`ident` implicit. Notationally, this hides the specification of the type, making it look as though {leanRef}`ident` simply takes an argument of any type. In fact, the function {lean}`id` is defined in the standard library in exactly this way. We have chosen a nontraditional name here only to avoid a clash of names. Variables can also be specified as implicit when they are declared with the {kw}`variable` command: ```lean universe u section variable {α : Type u} variable (x : α) def ident := x end #check ident #check ident 4 #check ident "hello" ``` This definition of {leanRef}`ident` here has the same effect as the one above. Lean has very complex mechanisms for instantiating implicit arguments, and we will see that they can be used to infer function types, predicates, and even proofs. The process of instantiating these “holes,” or “placeholders,” in a term is often known as _elaboration_. The presence of implicit arguments means that at times there may be insufficient information to fix the meaning of an expression precisely. An expression like {lean}`id` or {lean}`List.nil` is said to be _polymorphic_, because it can take on different meanings in different contexts. :::setup ``` variable (T : Type) (e : T) ``` One can always specify the type {lean}`T` of an expression {lean}`e` by writing {lean}`(e : T)`. This instructs Lean's elaborator to use the value {lean}`T` as the type of {lean}`e` when trying to resolve implicit arguments. In the second pair of examples below, this mechanism is used to specify the desired types of the expressions {lean}`id` and {lean}`List.nil`: ::: ```lean #check (List.nil) -- [] : List ?m.2 #check (id) -- id : ?m.1 → ?m.1 #check (List.nil : List Nat) -- [] : List Nat #check (id : Nat → Nat) -- id : Nat → Nat ``` Numerals are overloaded in Lean, but when the type of a numeral cannot be inferred, Lean assumes, by default, that it is a natural number. So the expressions in the first two {kw}`#check` commands below are elaborated in the same way, whereas the third {kw}`#check` command interprets {lean (type := "Int")}`2` as an integer. ```lean #check 2 -- 2 : Nat #check (2 : Nat) -- 2 : Nat #check (2 : Int) -- 2 : Int ``` :::setup ``` variable (foo : {α : Type} → α → β) ``` Sometimes, however, we may find ourselves in a situation where we have declared an argument to a function to be implicit, but now want to provide the argument explicitly. If {lean}`foo` is such a function, the notation {lean}`@foo` denotes the same function with all the arguments made explicit. ::: ```lean #check @id -- @id : {α : Sort u_1} → α → α #check @id Nat -- id : Nat → Nat #check @id Bool -- id : Bool → Bool #check @id Nat 1 -- id 1 : Nat #check @id Bool true -- id true : Bool ``` Notice that now the first {kw}`#check` command gives the type of the identifier, {leanRef}`id`, without inserting any placeholders. Moreover, the output indicates that the first argument is implicit. ================================================ FILE: book/TPiL/Examples.lean ================================================ import SubVerso.Examples import Lean.Data.NameMap import Lean.DocString.Syntax import VersoManual import Verso.Code.HighlightedToTex open Lean (NameMap MessageSeverity) open Lean.Doc.Syntax namespace TPiL open Verso Doc Elab Genre.Manual ArgParse Code Highlighted WebAssets Output Html Log Code External open SubVerso.Highlighting open SubVerso.Examples.Messages open Lean open Std export Verso.Code.External (lit) private def projectDir : System.FilePath := "../examples/" def alphabet := "abcdefghijklmnopqrstuvwxyz0123456789" def hashString (n : UInt64) : String := Id.run do let mut n : Nat := n.toNat let mut out : String := "Example" -- always start with a letter while n > 0 do out := out.push ({ byteIdx := n % 36 : String.Pos.Raw} |>.get! alphabet ) n := n / 36 return out section open System open SubVerso.Module variable [Monad m] [MonadError m] [MonadLiftT BaseIO m] [MonadLiftT IO m] [MonadFinally m] variable [MonadTrace m] [AddMessageContext m] [MonadOptions m] [MonadAlwaysExcept ε m] def extractFile (contents : String) (suppressNamespaces : Option String) : m (Array ModuleItem) := do let codeHash := hash contents let modBase := hashString codeHash let filename := modBase ++ ".lean" let mod := "Examples." ++ modBase let jsonFile := s!"{modBase}.json" let jsonPath := (projectDir / "Examples" / jsonFile) let jsonExists : Bool ← if (← jsonPath.pathExists) then (IO.FS.readFile jsonPath) <&> (!·.isEmpty) else pure false unless jsonExists do IO.FS.writeFile (projectDir / "Examples" / filename) contents -- Validate that the path is really a Lean project let lakefile := projectDir / "lakefile.lean" let lakefile' := projectDir / "lakefile.toml" if !(← lakefile.pathExists) && !(← lakefile'.pathExists) then throwError m!"Neither {lakefile} nor {lakefile'} exist, couldn't load project" let toolchainfile := projectDir / "lean-toolchain" let toolchain ← do if !(← toolchainfile.pathExists) then throwError m!"File {toolchainfile} doesn't exist, couldn't load project" pure (← IO.FS.readFile toolchainfile).trimAscii.copy -- Kludge: remove variables introduced by Lake. Clearing out DYLD_LIBRARY_PATH and -- LD_LIBRARY_PATH is useful so the version selected by Elan doesn't get the wrong shared -- libraries. let lakeVars := #["LAKE", "LAKE_HOME", "LAKE_PKG_URL_MAP", "LEAN_SYSROOT", "LEAN_AR", "LEAN_PATH", "LEAN_SRC_PATH", "LEAN", "ELAN", "ELAN_HOME", "LEAN_GITHASH", "ELAN_TOOLCHAIN", "DYLD_LIBRARY_PATH", "LD_LIBRARY_PATH"] let toolchainFile ← IO.FS.Handle.mk toolchainfile .read toolchainFile.lock (exclusive := true) try let cmd := "elan" let runCmd' (args : Array String) : m Unit := do let res ← IO.Process.output { cmd, args, cwd := projectDir -- Unset Lake's environment variables env := lakeVars.map (·, none) } if res.exitCode != 0 then reportFail projectDir cmd args res let runCmd (trace : MessageData) (args : Array String) : m Unit := withTraceNode `Elab.Verso.Code.External.loadModule (fun _ => pure trace) (runCmd' args) runCmd m!"loadModuleContent': building subverso" #["run", "--install", toolchain, "lake", "build", "subverso-extract-mod"] runCmd m!"loadModuleContent': building example project's module" #["run", "--install", toolchain, "lake", "build", "+" ++ mod] let suppressArgs := if let some nss := suppressNamespaces then nss |>.splitToList (· == ' ') |>.filter (!String.isEmpty ·) |>.map (#["--suppress-namespace", ·]) |>.toArray |>.flatten else #[] withTraceNode `Elab.Verso.Code.External.loadModule (fun _ => pure m!"loadModuleContent': extracting '{mod}'") do let args := #["run", "--install", toolchain, "lake", "exe", "subverso-extract-mod"] ++ suppressArgs ++ #[mod, "Examples/" ++ jsonFile] runCmd' args finally toolchainFile.unlock let jsonString ← IO.FS.readFile (projectDir / "Examples" / jsonFile) let .ok json := Json.parse jsonString | if jsonString.isEmpty then throwError s!"Expected JSON in {projectDir / "Examples" / jsonFile}, got empty output" else throwError s!"Expected JSON in {projectDir / "Examples" / jsonFile}, got {jsonString}" match Module.fromJson? json with | .error err => throwError s!"Couldn't parse JSON from output file: {err}\nIn:\n{json}" | .ok m => pure m.items where decorateOut (name : String) (out : String) : String := if out.isEmpty then "" else s!"\n{name}:\n{out}\n" reportFail {α} (projectDir : FilePath) (cmd : String) (args : Array String) (res : IO.Process.Output) : m α := do throwError ("Build process failed." ++ "\nCWD: " ++ projectDir.toString ++ "\nCommand: " ++ cmd ++ "\nArgs: " ++ repr args ++ "\nExit code: " ++ toString res.exitCode ++ "\nstdout: " ++ res.stdout ++ "\nstderr: " ++ res.stderr) end open Std.Iterators in private def hasAtLeastM [Monad m] [Iterator α m β] [Productive α m] (it : IterM (α := α) m β) : Nat → m Bool | 0 => pure true | n + 1 => do match (← it.step).inflate with | .done .. => pure false | .skip it' .. => hasAtLeastM it' (n + 1) | .yield it' .. => hasAtLeastM it' n termination_by n => (n, it.finitelyManySkips) open Std.Iterators in private def hasAtLeast [Iterator α Id β] [Productive α Id] (it : Iter (α := α) β) (n : Nat) : Bool := hasAtLeastM it.toIterM n def splitExample (code : Highlighted) : Option Highlighted × Highlighted := Id.run do let lines := code.lines let mut out := .empty for h : i in [0:lines.size] do let line := lines[i] if isSplit line then return (some out, lines.extract (i+1) lines.size |>.foldl (init := .empty) (· ++ ·)) out := out ++ line return (none, out) where isSplit (line : Highlighted) : Bool := let trimmed := line.toString.trimAscii hasAtLeast trimmed.positions 4 && trimmed.all (· == '-') partial def hlIsWs (hl : Highlighted) : Bool := match hl with | .text s | .unparsed s => s.all Char.isWhitespace | .seq xs => xs.all hlIsWs | .span _ x | .tactics _ _ _ x => hlIsWs x | .point .. => true | .token .. => false section open SubVerso.Module private inductive LineType where | whitespace | split | other private def lineType (line : Highlighted) : LineType := let trimmed := line.toString.trimAscii if trimmed.isEmpty then .whitespace else if hasAtLeast trimmed.positions 4 && trimmed.all (· == '-') then .split else .other def detachPrefix (code : Array ModuleItem) : Option (Array ModuleItem) × Array ModuleItem := Id.run do let mut out : Array ModuleItem := #[] for h : i in [0:code.size] do let lines := code[i].code.lines -- Check for pre-split for h : j in [0:lines.size] do match lineType lines[j] with | .whitespace => continue | .other => break -- not a pre-split | .split => let leadingWs := lines.extract 0 j let pre := out.modify (out.size - 1) (fun c => {c with code := c.code ++ .seq leadingWs}) return (pre, #[{code[i] with code := .seq <| lines.extract (j+1)}] ++ code.extract (i + 1) code.size) -- Check for post-split for h : j in [0:lines.size] do let j' := lines.size - (j + 1) have : j' < lines.size := by have : j < lines.size := by get_elem_tactic omega match lineType lines[j'] with | .whitespace => continue | .other => break -- not a post-split | .split => let trailingWs := lines.extract (j' + 1) lines.size let thisItem := { code[i] with code := lines.extract 0 j' |>.foldl (init := .empty) (· ++ ·) } let nextItem? := code[i + 1]? |>.map (fun c => {c with code := Highlighted.seq trailingWs ++ c.code}) return (out.push thisItem, nextItem?.toArray ++ code.extract (i + 2) code.size) -- No split here out := out.push code[i] -- No split anywhere return (none, out) def detachSuffix (code : Array ModuleItem) : Array ModuleItem × Option (Array ModuleItem) := Id.run do let mut out : Array ModuleItem := #[] for h : i in [0:code.size] do let i := code.size - (i + 1) have : i < code.size := by rename_i i' _ _ have : i' < code.size := by get_elem_tactic omega let lines := code[i].code.lines -- Check for post-split for h : j in [0:lines.size] do let j' := lines.size - (j + 1) have : j' < lines.size := by have : j < lines.size := by get_elem_tactic omega match lineType lines[j'] with | .whitespace => continue | .other => break -- not a post-split | .split => let trailingWs := lines.extract (j' + 1) lines.size let thisItem := { code[i] with code := lines.extract 0 j' |>.foldl (init := .empty) (· ++ ·) } let nextItem? := if i > 0 then some {code[i - 1] with code := Highlighted.seq trailingWs ++ code[i-1].code} else none return (nextItem?.toArray ++ code.extract (i + 2) code.size, out.push thisItem |>.reverse) -- Check for pre-split for h : j in [0:lines.size] do match lineType lines[j] with | .whitespace => continue | .other => break -- not a pre-split | .split => let leadingWs := lines.extract 0 j return (code.extract 0 i |>.modify (i-1) (fun c => {c with code := c.code ++ .seq leadingWs}), some (out.push {code[i] with code := .seq (lines.extract (j+1))} |>.reverse)) -- No split here out := out.push code[i] -- No split anywhere return (out.reverse, none) def splitExample' (code : Array ModuleItem) : Option (Array ModuleItem) × Array ModuleItem × Option (Array ModuleItem) := let (pre, code) := detachPrefix code let (code, suffix) := detachSuffix code (pre, code, suffix) end def copyButtonCss : String := r#" .tpil-code-container { position: relative; margin: 20px 0; } .copy-btn, .toggle-btn { position: absolute; top: 0px; background: inherit; color: black; border: none; border-radius: 4px; cursor: pointer; font-size: 12px; display: flex; align-items: center; opacity: 0.7; transition: opacity 0.2s; padding: 8px; } .copy-btn:hover, .toggle-btn:hover { opacity: 1; background: #555; } .copy-btn { right: 10px; gap: 5px; } .toggle-btn { right: 45px; /* Position to the left of copy button */ } .copy-btn.copied { background: #28a745; } .copy-icon, .toggle-icon { width: 14px; height: 14px; } .hidden { display: grid; grid-template-rows: 1fr; transition: grid-template-rows 0.3s ease-out, opacity 0.2s ease-out, margin 0.3s ease-out; opacity: 0.8; } .tpil-hide-prefix .hidden { grid-template-rows: 0fr; opacity: 0; margin: 0; } .hidden > .hl.lean { overflow: hidden; margin-bottom: 0; } "# def copyButtonJs : String := r#" function addToggleButtonToElement(elementId, className = 'tpil-hide-prefix') { const element = document.getElementById(elementId); if (!element) { console.error(`Element with ID '${elementId}' not found`); return false; } // Create container wrapper if it doesn't exist let container = element.parentElement; if (!container.classList.contains('code-container')) { container = document.createElement('div'); container.className = 'code-container'; container.classList.toggle(className); // Insert container before element element.parentNode.insertBefore(container, element); // Move element into container container.appendChild(element); } // Remove existing toggle button if present const existingBtn = container.querySelector('.toggle-btn'); if (existingBtn) { existingBtn.remove(); } // Create toggle button const toggleBtn = document.createElement('button'); toggleBtn.className = 'toggle-btn'; toggleBtn.title = 'Show hidden lines'; toggleBtn.innerHTML = ` `; // Add click event listener toggleBtn.addEventListener('click', () => { container.classList.toggle(className); // Update icon based on state const isHidden = container.classList.contains(className); toggleBtn.innerHTML = !isHidden ? ` ` : ` `; toggleBtn.title = isHidden ? 'Show hidden lines' : 'Hide lines'; }); // Position toggle button to the left of copy button if it exists const copyBtn = container.querySelector('.copy-btn'); if (copyBtn) { container.insertBefore(toggleBtn, copyBtn); } else { container.appendChild(toggleBtn); } return true; } function addCopyButtonToElement(elementId, codeText) { const element = document.getElementById(elementId); if (!element) { console.error(`Element with ID '${elementId}' not found`); return false; } // Create container wrapper if it doesn't exist let container = element.parentElement; if (!container.classList.contains('code-container')) { container = document.createElement('div'); container.className = 'tpil-code-container'; // Insert container before element element.parentNode.insertBefore(container, element); // Move element into container container.appendChild(element); } // Remove existing copy button if present const existingBtn = container.querySelector('.copy-btn'); if (existingBtn) { existingBtn.remove(); } // Create copy button const copyBtn = document.createElement('button'); copyBtn.className = 'copy-btn'; copyBtn.title = 'Copy to clipboard'; copyBtn.innerHTML = ` `; // Add click event listener copyBtn.addEventListener('click', async () => { try { // Copy the provided code text to clipboard await navigator.clipboard.writeText(codeText); // Show success feedback const originalText = copyBtn.innerHTML; copyBtn.innerHTML = ` Copied! `; copyBtn.classList.add('copied'); // Reset after 2 seconds setTimeout(() => { copyBtn.innerHTML = originalText; copyBtn.classList.remove('copied'); }, 2000); } catch (err) { // Fallback for older browsers fallbackCopyTextToClipboard(codeText); // Show feedback copyBtn.textContent = 'Copied!'; setTimeout(() => { copyBtn.innerHTML = ` `; }, 2000); } }); // Add button to container container.appendChild(copyBtn); return true; } // Fallback function for older browsers function fallbackCopyTextToClipboard(text) { const textArea = document.createElement('textarea'); textArea.value = text; textArea.style.position = 'fixed'; textArea.style.left = '-999999px'; textArea.style.top = '-999999px'; document.body.appendChild(textArea); textArea.focus(); textArea.select(); try { document.execCommand('copy'); } catch (err) { console.error('Fallback: Oops, unable to copy', err); } document.body.removeChild(textArea); } // Expose API function globally window.addCopyButtonToElement = addCopyButtonToElement; window.addToggleButtonToElement = addToggleButtonToElement; "# def examplesCss := r#" .example { margin-left: 0.75em; } .example .hl.lean.block { margin: 0; } .example .information pre { margin: 0 0 0.25em 0; } "# def tpilBlock (block : BlockDescr) : BlockDescr := { block with extraJsFiles := block.extraJsFiles |>.insert { filename := "copybutton.js", contents := copyButtonJs, sourceMap? := none } extraCssFiles := block.extraCssFiles |>.insert { filename := "copybutton.css", contents := copyButtonCss } |>.insert { filename := "examples.css", contents := examplesCss } } def tpilInline (inline : InlineDescr) : InlineDescr := { inline with extraJsFiles := inline.extraJsFiles |>.insert {filename := "copybutton.js", contents := copyButtonJs, sourceMap? := none} extraCssFiles := inline.extraCssFiles |>.insert { filename := "copybutton.css", contents := copyButtonCss } |>.insert { filename := "examples.css", contents := examplesCss } } structure ExampleItem where code : Highlighted output : Option Highlighted.Message trailing : String deriving ToJson, FromJson, Repr, Quote def verbatimBlock (cmd : Highlighted) : TeX := let contents := cmd.trimOneTrailingNl.trimOneLeadingNl.toVerbatimTeX .seq #[.raw s!"\\begin\{LeanVerbatim}[vspace=0pt]\n", contents, .raw "\n\\end{LeanVerbatim}\n"] block_extension Block.lean (allowToggle : Bool) (pre : Option Highlighted) (code : Array ExampleItem) (post : Option Highlighted) (goalVisibility : HighlightHtmlM.VisibleProofStates := .none) via withHighlighting, tpilBlock where data := let defined : Array (Name × String) := code.flatMap (definedNames ·.code) .arr #[.bool allowToggle, toJson pre, toJson code, toJson post, toJson goalVisibility, toJson defined] traverse id data _ := do let .arr #[_allowToggle, _pre, _code, _post, _visibility, definesJson] := data | logError s!"Expected array for Lean block, got {data.compress}"; return none match FromJson.fromJson? definesJson with | .error err => logError <| "Failed to deserialize code config during traversal:" ++ err return none | .ok (defines : Array (Name × String)) => for (d, s) in defines do if d.isAnonymous then continue let d := d.toString let path ← (·.path) <$> read let _ ← externalTag id path d let context := (← read).headers.map (·.titleString) modify (·.saveDomainObject exampleDomain d id) if let some link := (← get).externalTags[id]? then modify (·.modifyDomainObjectData exampleDomain d fun v => let v := if let .obj _ := v then v else .obj {} v.setObjVal! link.link (json%{"context": $context, "display": $s})) pure none toTeX := open Verso.Output.TeX in open Verso.Doc.TeX in some <| fun _ _ _ data _ => do let .arr #[.bool _allowToggle, hlPreJson, hlJson, hlPostJson, goalVisibilityJson, _defs] := data | logError "Expected five-element JSON for Lean code" pure .empty let pre ← match FromJson.fromJson? (α := Option Highlighted) hlPreJson with | .error err => logError <| "Couldn't deserialize Lean code intro block while rendering HTML: " ++ err return .empty | .ok hl => pure hl let code ← match FromJson.fromJson? (α := Array ExampleItem) hlJson with | .error err => logError <| "Couldn't deserialize Lean code block while rendering HTML: " ++ err return .empty | .ok hl => pure hl let _post ← match FromJson.fromJson? (α := Option Highlighted) hlPostJson with | .error err => logError <| "Couldn't deserialize Lean code outro block while rendering HTML: " ++ err return .empty | .ok hl => pure hl let _visibility ← match FromJson.fromJson? (α := HighlightHtmlM.VisibleProofStates) goalVisibilityJson with | .error err => logError <| "Couldn't deserialize Lean code outro block while rendering HTML: " ++ err return .empty | .ok hl => pure hl let codeIndent := code.foldl (init := pre.map (·.indentation)) (fun i? y => i?.map (min · y.1.indentation)) |>.getD 0 let mut codeTeX : TeX := .empty for ⟨cmd, out?, ws⟩ in code do let cmd := cmd.deIndent codeIndent codeTeX := codeTeX ++ verbatimBlock cmd if let some msg := out? then codeTeX := codeTeX ++ (← msg.toTeX) unless ws.isEmpty do codeTeX := codeTeX ++ (← (Highlighted.text ws).toTeX) pure codeTeX extraJsFiles := .ofList [{ filename := "copybutton.js", contents := copyButtonJs, sourceMap? := none }] extraCssFiles := .ofList [ { filename := "copybutton.css", contents := copyButtonCss }, { filename := "examples.css", contents := examplesCss } ] toHtml := open Verso.Output.Html in some <| fun _ _ _ data _ => do let .arr #[.bool allowToggle, hlPreJson, hlJson, hlPostJson, goalVisibilityJson, _defs] := data | HtmlT.logError "Expected five-element JSON for Lean code" pure .empty let pre ← match FromJson.fromJson? (α := Option Highlighted) hlPreJson with | .error err => HtmlT.logError <| "Couldn't deserialize Lean code intro block while rendering HTML: " ++ err return .empty | .ok hl => pure hl let code ← match FromJson.fromJson? (α := Array ExampleItem) hlJson with | .error err => HtmlT.logError <| "Couldn't deserialize Lean code block while rendering HTML: " ++ err return .empty | .ok hl => pure hl let post ← match FromJson.fromJson? (α := Option Highlighted) hlPostJson with | .error err => HtmlT.logError <| "Couldn't deserialize Lean code outro block while rendering HTML: " ++ err return .empty | .ok hl => pure hl let visibility ← match FromJson.fromJson? (α := HighlightHtmlM.VisibleProofStates) goalVisibilityJson with | .error err => HtmlT.logError <| "Couldn't deserialize Lean code outro block while rendering HTML: " ++ err return .empty | .ok hl => pure hl let codeIndent := code.foldl (init := pre.map (·.indentation)) (fun i? y => i?.map (min · y.1.indentation)) |>.getD 0 let mut codeHtml : Html := .empty let mut codeString := "" if allowToggle then if let some p := pre then let p := p.deIndent codeIndent let inner ← withDefinitionsAsTargets false <| withVisibleProofStates visibility <| p.trimOneLeadingNl |>.blockHtml "examples" (trim := false) (g := Verso.Genre.Manual) codeHtml := codeHtml ++ {{ }} codeString := codeString ++ p.toString for ⟨cmd, out?, ws⟩ in code do let cmd := cmd.deIndent codeIndent let moreCode ← withDefinitionsAsTargets true <| withVisibleProofStates visibility <| cmd.trimOneLeadingNl |>.blockHtml "examples" (trim := false) (g := Verso.Genre.Manual) codeHtml := codeHtml ++ moreCode codeString := codeString ++ cmd.toString if let some msg := out? then let msgHtml ← msg.toHtml (g := Verso.Genre.Manual) [] codeHtml := codeHtml ++ {{
{{msgHtml}}
}} unless ws.isEmpty do codeHtml := codeHtml ++ (← (Highlighted.text ws).blockHtml "examples" (trim := false) (g := Verso.Genre.Manual)) if allowToggle then if let some p := post then let p := p.deIndent codeIndent let inner ← withDefinitionsAsTargets false <| withVisibleProofStates visibility <| p.trimOneLeadingNl |>.blockHtml "examples" (trim := false) (g := Verso.Genre.Manual) codeHtml := codeHtml ++ {{ }} codeString := codeString ++ p.toString let i ← uniqueId (g := Verso.Genre.Manual) let toCopy := (pre.map (·.toString)).getD "" ++ codeString let mut script := s!"addCopyButtonToElement({i.quote}, {toCopy.quote});" if allowToggle && (pre.isSome || post.isSome) then script := script ++ s!"\naddToggleButtonToElement({i.quote});" return {{
{{codeHtml}}
}} block_extension Block.leanAnchor (code : Highlighted) (completeCode : String) via withHighlighting, tpilBlock where data := .arr #[toJson code, toJson completeCode] traverse _ _ _ := pure none toTeX := open Verso.Output.TeX in open Verso.Doc.TeX in some <| fun _ _ _ data _ => do let .arr #[hlJson, completeCodeJson] := data | logError "Expected two-element JSON for Lean code" pure .empty let code ← match FromJson.fromJson? (α := Highlighted) hlJson with | .error err => logError <| "Couldn't deserialize Lean code block while rendering TeX: " ++ err return .empty | .ok hl => pure hl let _completeCode ← match FromJson.fromJson? (α := String) completeCodeJson with | .error err => logError <| "Couldn't deserialize Lean code string while rendering TeX: " ++ err return .empty | .ok hl => pure hl let code := code.deIndent code.indentation pure (verbatimBlock code) toHtml := open Verso.Output.Html in some <| fun _ _ _ data _ => do let .arr #[hlJson, completeCodeJson] := data | HtmlT.logError "Expected two-element JSON for Lean code" pure .empty let code ← match FromJson.fromJson? (α := Highlighted) hlJson with | .error err => HtmlT.logError <| "Couldn't deserialize Lean code block while rendering HTML: " ++ err return .empty | .ok hl => pure hl let completeCode ← match FromJson.fromJson? (α := String) completeCodeJson with | .error err => HtmlT.logError <| "Couldn't deserialize Lean code string while rendering HTML: " ++ err return .empty | .ok hl => pure hl let code := code.deIndent code.indentation let codeHtml : Html := (← code.blockHtml "examples" (trim := false) (g := Verso.Genre.Manual)) let i ← uniqueId (g := Verso.Genre.Manual) let mut script := s!"addCopyButtonToElement({i.quote}, {completeCode.quote});" return {{
{{codeHtml}}
}} def proofStateStyle := r#" .hl.lean.proof-state-view { white-space: collapse; margin-left: 0.75em; } .hl.lean.proof-state-view .hypothesis { display: table !important; border-spacing: 0 0.2rem; border-collapse: separate; } .hl.lean.proof-state-view .tactic-state { display: block; left: 0; padding: 0; border: none; } .hl.lean.proof-state-view .tactic-state:has(.goal + .goal) { display: flex; flex-wrap: wrap; gap: 2rem; justify-content: space-evenly; width: 100%; } .hl.lean.proof-state-view .tactic-state .goal { margin: 0 !important; align-self: flex-start; width: fit-content; } "# block_extension Block.goals (goals : Array (Highlighted.Goal Highlighted)) via withHighlighting, tpilBlock where data := toJson goals traverse _ _ _ := pure none toTeX := open Verso.Output.TeX in open Verso.Doc.TeX in some <| fun _ _ _ data _ => do let goals ← match fromJson? (α := Array (Highlighted.Goal Highlighted)) data with | .ok v => pure v | .error e => logError <| "Failed to deserialize proof state: " ++ e return .empty -- TODO: lay these out side-by-side pure <| .seq (← goals.mapM (·.toTeX)) extraCssFiles := .ofList [{ filename := "proof-state.css", contents := proofStateStyle }] toHtml := open Verso.Output.Html in some <| fun _ _ _ data _ => do let goals ← match fromJson? (α := Array (Highlighted.Goal Highlighted)) data with | .ok v => pure v | .error e => HtmlT.logError <| "Failed to deserialize proof state: " ++ e return .empty pure {{
{{← if goals.isEmpty then pure {{"All goals completed! 🐙"}} else withCollapsedSubgoals (g := Verso.Genre.Manual) .never <| .seq <$> (goals.mapIdxM (fun i x => x.toHtml (·.toHtml) i))}}
}} inline_extension Inline.goal (goal : Highlighted.Goal Highlighted) via withHighlighting, tpilInline where data := toJson goal traverse _ _ _ := pure none toTeX := open Verso.Doc.TeX in open Verso.Output.TeX in some <| fun _ _ data _ => do let goal ← match fromJson? (α := Highlighted.Goal Highlighted) data with | .ok v => pure v | .error e => logError <| "Failed to deserialize proof goal: " ++ e return .empty verbatimInline (goal.name.getD "") toHtml := open Verso.Output.Html in some <| fun _ _ data _ => do let goal ← match fromJson? (α := Highlighted.Goal Highlighted) data with | .ok v => pure v | .error e => HtmlT.logError <| "Failed to deserialize proof goal: " ++ e return .empty pure {{ {{goal.name |>.getD ""}} {{← goal.toHtml (g := Verso.Genre.Manual) (·.toHtml) 0}} }} def kbdCSS := r#" code.unicode-abbrev { background-color: #eee; border-radius: 3px; border: 1px solid #ccc; white-space: nowrap; } kbd { white-space: nowrap; } kbd > code { background-color: #eee; border-radius: 3px; border: 1px solid #b4b4b4; box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2), 0 2px 0 0 rgba(255, 255, 255, 0.7) inset; color: #333; display: inline-block; font-size: 0.85em; font-weight: 700; line-height: 1; padding: 2px 4px; white-space: nowrap; vertical-align: middle; } "# inline_extension Inline.kbd (items : Array String) where data := toJson items traverse _ _ _ := pure none toTeX := open Verso.Output.TeX in open Verso.Doc.TeX in let verb (s : String) : TeX := .seq #[.raw "\\verb|", .raw s, raw "|"] -- Fails if s contains "|" let verbs (ss : List String) : TeX := List.intersperse (TeX.text " ") (ss.map verb) some <| fun _ _ data _ => do let items ← match fromJson? (α := Array String) data with | .ok v => pure v | .error e => logError <| "Failed to deserialize keyboard shortcut: " ++ e return .empty if let #[item] := items then if item.startsWith "\\" then pure (verb item) else let items : List String := item.toList.map fun c => s!"{c}" pure (verbs items) else pure (verbs items.toList) extraCss := [kbdCSS] toHtml := open Verso.Output.Html in some <| fun _ _ data _ => do let items ← match fromJson? (α := Array String) data with | .ok v => pure v | .error e => HtmlT.logError <| "Failed to deserialize keyboard shortcut: " ++ e return .empty if let #[item] := items then if item.startsWith "\\" then pure {{{{item}}}} else let items : Array Html := item.toList.toArray.map fun c => {{{{s!"{c}"}}}} pure {{{{items}}}} else let items : Array Html := items.map (fun (s : String) => {{s!"{s}"}}) pure {{{{items}}}} private def oneCodeStr [Monad m] [MonadError m] (inlines : Array (TSyntax `inline)) : m StrLit := do let #[code] := inlines | (if inlines.size == 0 then (throwError ·) else (throwErrorAt (mkNullNode inlines) ·)) "Expected one code element" let `(inline|code($code)) := code | throwErrorAt code "Expected a code element" return code private def codeStrs [Monad m] [MonadError m] (inlines : Array (TSyntax `inline)) : m (Array StrLit) := do let mut out := #[] for i in inlines do match i with | `(inline|code($code)) => out := out.push code | `(inline|$s:str) => unless s.getString.all (·.isWhitespace) do throwErrorAt s "Expected a code literal" | other => throwErrorAt other "Expected a code literal" return out structure Kept (α : Type u) where values : Array α next : Nat in_bounds : next < values.size deriving Repr instance [Inhabited α] : Inhabited (Kept α) where default := ⟨#[default], 0, by simp⟩ def Kept.add (kept : Kept α) (val : α) : Kept α where values := kept.values.set kept.next val (h := kept.in_bounds) next := if kept.next = 0 then kept.values.size - 1 else kept.next - 1 in_bounds := by have := kept.in_bounds rw [Array.size_set] split <;> omega instance [Monad m] : ForM m (Kept α) α where forM kept f := do for h : i in [kept.next:kept.values.size] do f kept.values[i] for h : i in [0:kept.next] do have := kept.in_bounds have : i < kept.next := by get_elem_tactic f kept.values[i] instance [Monad m] : ForIn m (Kept α) α := ⟨ForM.forIn⟩ initialize recentHighlightsExt : EnvExtension (Kept Highlighted) ← registerEnvExtension (pure ⟨.replicate 12 .empty, 0, by simp⟩) /-- A mapping from anchor names to the corresponding code. Each code element is paired with it's de-anchored context for copy-paste purposes. -/ initialize savedAnchorExt : EnvExtension (HashMap String (Highlighted × String)) ← registerEnvExtension (pure {}) def allProofInfo (hl : Highlighted) : Array Highlighted := go #[] hl where go (acc : Array Highlighted) : Highlighted → Array Highlighted | .seq xs => xs.foldl (init := acc) go | .span _ x => go acc x | .tactics gs _ _ x => gs.foldl (init := (go acc x)) (fromGoal · ·) | .point .. | .text .. | .token .. | .unparsed .. => acc fromGoal (acc : Array Highlighted) (g : Highlighted.Goal Highlighted) := g.hypotheses.foldl (init := acc.push g.conclusion) fun acc ⟨xs, hl⟩ => let names : Highlighted := xs.foldl (init := .empty) fun hl tok => if hl.isEmpty then .token tok else hl ++ .text " " ++ .token tok acc.push (names ++ .text " " ++ .token ⟨.unknown, ":"⟩ ++ .text " " ++ hl) def saveBackref (hl : Highlighted) : DocElabM Unit := do -- Construct a document with all the proof states in it, so references can target them but they -- don't eat up individual slots in the history ring let hl := allProofInfo hl |>.foldl (init := hl) (· ++ .text "\n" ++ ·) modifyEnv (recentHighlightsExt.modifyState · (·.add hl)) structure ProofState where goals : Array (Highlighted.Goal Highlighted) start : Nat stop : Nat «syntax» : Highlighted deriving Repr initialize proofStatesExt : EnvExtension (HashMap String ProofState) ← registerEnvExtension (pure {}) /-- Extracts all messages from the given code. -/ def allInfo (hl : Highlighted) : Array (Highlighted.Message × Option Highlighted) := match hl with | .seq xs => xs.flatMap allInfo | .point k str => #[(⟨k, str⟩, none)] | .tactics _ _ _ x => allInfo x | .span infos x => (infos.map fun (k, str) => (⟨k, str⟩, some x)) ++ allInfo x | .text .. | .token .. | .unparsed .. => #[] def trailingText (hl : Highlighted) : Highlighted × String := match hl with | .seq xs => Id.run do let mut txt := "" for h : i in [0:xs.size] do let i' := xs.size - (i + 1) have : i < xs.size := by get_elem_tactic have : i' < xs.size := by grind let (hl', txt') := trailingText xs[i'] txt := txt' ++ txt if hl'.isEmpty then continue else return (.seq (xs.extract 0 i' |>.push hl'), txt) return (.empty, txt) | .point .. | .token .. => (hl, "") | .tactics i s e hl' => let (hl', txt) := trailingText hl' (.tactics i s e hl', txt) | .span i hl' => let (hl', txt) := trailingText hl' (.span i hl', txt) | .text txt | .unparsed txt => (.empty, txt) private def commentContents (s : String) : Option (String × String) := let s := s.trimAsciiStart if s.startsWith "--" then let s := s.dropWhile (· == '-') |>.trimAsciiStart let ws := s.takeEndWhile (·.isWhitespace) some (s.dropEnd ws.positions.count |>.copy, ws.copy) else none /-- Extracts a trailing comment from code, if present. Returns the code along with the comment and its trailing whitespace. -/ def trailingComment (hl : Highlighted) : Highlighted × Option (String × String) := let x := trailingText hl match commentContents x.2 with | some txt' => (x.1, some txt') | none => (hl, none) section inductive ShowProofStates where | none | named (which : Array String) | all structure LeanConfig where checkOutput : Bool suppressNamespaces : Option String allowVisible : Bool showProofStates : ShowProofStates «show» : Bool variable [Monad m] [MonadError m ] [MonadLiftT CoreM m] instance : FromArgVal ShowProofStates m where fromArgVal := { description := "`all`, `none`, or a string literal", signature := .String ∪ .Ident get := fun | .name x => match x.getId with | `all => pure .all | `none => pure .none | _ => do let h ← MessageData.hint m!"Use 'all', 'none', or a string" #["all", "none", "NAME1 NAME2 ...".quote] (ref? := x) throwErrorAt x m!"Expected 'all' or 'none' or a string literal\n{h}" | .str s => pure <| .named <| (s.getString.splitOn " ").toArray | .num n => do let h ← MessageData.hint m!"Use 'all', 'none', or a string" #["all", "none", "NAME1 NAME2 ...".quote] (ref? := n) throwErrorAt n m!"Expected 'all' or 'none' or a string literal\n{h}" } instance : FromArgs LeanConfig m where fromArgs := LeanConfig.mk <$> .namedD `check .bool true <*> .named `suppressNamespaces .string true <*> .namedD `allowVisible .bool true <*> .namedD' `showProofStates .none <*> .namedD' `show .true structure SavedLeanConfig where name : Option Ident suppressNamespaces : Option String instance : FromArgs SavedLeanConfig m where fromArgs := SavedLeanConfig.mk <$> (some <$> .positional `name .ident <|> pure none) <*> .named `suppressNamespaces .string true end def isNewline (hl : Highlighted) : Bool := match hl with | .text str | .unparsed str => str == "\n" | .token .. => false | .seq xs => Id.run do for h : i in [0:xs.size] do if xs[i].isEmpty then continue else if isNewline xs[i] then return xs.extract (i+1) |>.all (·.isEmpty) else return false return false | .tactics _ _ _ x | .span _ x => isNewline x | .point .. => false open SubVerso.Module in /-- Leading anchor comments are always incorrect. They probably result from Lean placing them with the _next_ command, so we should move them back up before processing them. -/ def fixupAnchorComments (items : Array ModuleItem) : Array ModuleItem := Id.run do let mut out := #[] let mut prev? : Option ModuleItem := none for i in items do let mut i := i if prev?.isSome then let mut lines := i.code.lines while h : lines.size > 0 do if isNewline lines[0] || (proofState? lines[0].toString |>.isOk) then prev? := prev?.map (fun i => {i with code := i.code ++ lines[0]}) lines := lines.drop 1 else break i := {i with code := .seq lines} if let some prev := prev? then out := out.push prev prev? := some i if let some prev := prev? then out := out.push prev return out private def showGoals (goals : Array (Highlighted.Goal Highlighted)) : MessageData := Id.run do if goals.isEmpty then return m!"No goals" let mut out := m!"" for g in goals do if let some n := g.name then out := out ++ m!"case {n}\n" for ⟨xs, h⟩ in g.hypotheses do let xs := " ".intercalate (xs.toList.map (fun ⟨_, x⟩ => x)) out := out ++ m!"{xs} : {h.toString}\n" out := out ++ m!" {g.goalPrefix} {g.conclusion.toString}\n\n" pure out @[code_block_expander lean] def lean : CodeBlockExpander | args, code => do let {checkOutput, suppressNamespaces, allowVisible, showProofStates, «show»} ← parseThe LeanConfig args let mut showProofStates := showProofStates let codeStr := code.getString let contents ← extractFile codeStr suppressNamespaces let contents := contents.filter (!·.code.isEmpty) let (pre, mid, post) := splitExample' contents let mid := fixupAnchorComments mid let pre : Option Highlighted := pre.map fun p => p.foldl (init := .empty) fun acc c => acc ++ c.code let mut toShow : Array ExampleItem := #[] let mut visibility : HighlightHtmlM.VisibleProofStates := match showProofStates with | .none => .none | .all => .all | .named _ => .states #[] for item in mid do let code ← match item.code.anchored (textAnchors := false) with | .ok a => for (k, v) in a.proofStates.toArray do if let .tactics goals start stop hl := v then logSilentInfo m!"Proof state {k} on `{v.toString}`:\n{showGoals goals}" modifyEnv (proofStatesExt.modifyState · (·.insert k ⟨goals, start, stop, hl⟩)) if let (.states ss, .named xs) := (visibility, showProofStates) then if k ∈ xs then visibility := .states (ss.push (start, stop)) showProofStates := .named (xs.filter (· ≠ k)) else throwError "Unexpected syntax for proof state '{k}':{indentD <| repr v}" pure a.code | .error e => throwError "Error while extracting proof states:{indentD e}" let item := {item with code} match item.kind with | ``Lean.Parser.Command.check | ``Lean.Parser.Command.eval | ``Lean.reduceCmd | ``Lean.Parser.Command.check_failure | ``Lean.Parser.Command.print | ``Lean.Parser.Command.printAxioms | ``Lean.Parser.Command.printEqns | ``Lean.guardMsgsCmd => let info? : Option Highlighted.Message := allInfo item.code |>.firstM fun (msg, hl?) => if hl? matches some (.token ⟨.keyword .., _⟩) then some msg else none if let some msg := info? then if let (code, some (comment, ws)) := trailingComment item.code then let txt := msg.toString if checkOutput && !eqMessages comment txt then throwError "Mismatch! Expected {comment} but got {txt}" toShow := toShow.push ⟨code, some msg, dropOneNl ws⟩ else let (code', ws) := trailingText item.code toShow := toShow.push ⟨code', some msg, dropOneNl ws⟩ else toShow := toShow.push ⟨item.code, none, ""⟩ | _ => toShow := toShow.push ⟨item.code, none, ""⟩ let post : Option Highlighted := post.map fun p => p.foldl (init := .empty) fun acc c => acc ++ c.code let visible := .seq <| toShow.map (·.1) saveBackref visible for (msg, _) in allInfo visible do logSilentInfo msg.toString if let .named xs := showProofStates then unless xs.isEmpty do logWarning m!"Unused proof state names: {m!", ".joinSep (xs.map (m!"'{·}'")).toList}" if «show» then return #[← ``(Block.other (Block.lean $(quote allowVisible) $(quote pre) $(quote toShow) $(quote post) $(quote visibility)) #[])] else return #[] where eqMessages (s1 s2 : String) := SubVerso.Examples.Messages.messagesMatch (s1.replace "\n" " ") (s2.replace "\n" " ") dropOneNl (s : String) : String := if s.back == '\n' then (s.dropEnd 1).copy else s @[code_block_expander save] def save : CodeBlockExpander | args, code => do let {name, suppressNamespaces} ← parseThe SavedLeanConfig args let codeStr := code.getString let contents ← extractFile codeStr suppressNamespaces let contents : Highlighted := .seq <| contents.map (·.code) match contents.anchored with | .error e => throwError s!"Error extracting anchors: {e}" | .ok {anchors, proofStates, code} => let codeStr := code.toString for (k, v) in anchors.toArray do logSilentInfo m!"Anchor {k}:\n{v.toString}" modifyEnv (savedAnchorExt.modifyState · (·.insert k (v, codeStr))) for (k, v) in proofStates.toArray do if let .tactics goals start stop hl := v then logSilentInfo m!"Proof state {k} on `{v.toString}`:\n{showGoals goals}" modifyEnv (proofStatesExt.modifyState · (·.insert k ⟨goals, start, stop, hl⟩)) if let some x := name then modifyEnv (savedAnchorExt.modifyState · (·.insert x.getId.toString (code, codeStr))) pure #[] @[code_block_expander savedAnchor] def savedAnchor : CodeBlockExpander | args, code => do let name ← ArgParse.run (.positional `name .ident) args let env ← getEnv let some (hl, complete) := (savedAnchorExt.getState env)[name.getId.toString]? | throwErrorAt name m!"Not found: '{name.getId}'" discard <| ExpectString.expectString "code" code hl.toString saveBackref hl return #[← ``(Block.other (Block.leanAnchor $(quote hl) $(quote complete)) #[])] section structure ProofStateConfig where name : StrLit structure GoalConfig where name : StrLit variable [Monad m] [MonadError m ] [MonadLiftT CoreM m] private def strOrName : ValDesc m StrLit where description := "identifier or string literal" signature := .Ident ∪ .String get | .name x => pure <| Syntax.mkStrLit x.getId.toString (info := x.raw.getHeadInfo) | .str s => pure s | .num n => throwErrorAt n "Expected identifier or string literal" instance : FromArgs ProofStateConfig m where fromArgs := ProofStateConfig.mk <$> .positional `name strOrName instance : FromArgs GoalConfig m where fromArgs := GoalConfig.mk <$> .positional `name strOrName end @[code_block_expander proofState] def proofState : CodeBlockExpander | args, code => do let {name} ← parseThe ProofStateConfig args let some {goals, ..} := (proofStatesExt.getState (← getEnv))[name.getString]? | let allStates := (proofStatesExt.getState (← getEnv)).keys let h ← if allStates.isEmpty then pure <| MessageData.hint' "Name a proof state with a suitable PROOF_STATE: comment" else MessageData.hint "Use a proof state name:" (allStates.toArray.map ({suggestion := .string ·})) (ref? := some name) logErrorAt name m!"Not found: {name.getString}\n{h}" return #[← ``(sorry)] let mut goalView := "" for g in goals do goalView := goalView ++ g.toString ++ "\n\n" goalView := goalView.trimAsciiEnd.copy ++ "\n" _ ← ExpectString.expectString "proof" code goalView return #[← ``(Block.other (Block.goals $(quote goals)) #[])] @[role_expander goal] def goal : RoleExpander | args, inls => do let {name} ← parseThe GoalConfig args let caseTag ← oneCodeStr inls let some {goals, ..} := (proofStatesExt.getState (← getEnv))[name.getString]? | logErrorAt name m!"Not found: {name.getString}" return #[← ``(sorry)] let goal? := goals.find? fun | {name := some x, ..} => caseTag.getString == x | _ => false let some goal := goal? | let validTags := goals.filterMap (·.name) let h ← if validTags.isEmpty then pure <| MessageData.hint' m!"" else MessageData.hint m!"Use a case label:" (validTags.map ({suggestion := .string ·})) (ref? := some caseTag) logErrorAt caseTag m!"Not found: {caseTag.getString}\n{h}" return #[← ``(sorry)] return #[← ``(Inline.other (Inline.goal $(quote goal)) #[])] structure Helper where highlight (term : String) (type? : Option String) : IO Highlighted command (cmd : String) : IO Highlighted signature (code : String) : IO Highlighted name (code : String) : IO Highlighted open System in open SubVerso.Helper in def Helper.fromModule (setup : String) : IO Helper := do let codeHash := hash setup let modBase := "Interact" ++ hashString codeHash let filename := modBase ++ ".lean" let mod := "Examples." ++ modBase -- Validate that the path is really a Lean project let lakefile := projectDir / "lakefile.lean" let lakefile' := projectDir / "lakefile.toml" if !(← lakefile.pathExists) && !(← lakefile'.pathExists) then throw <| .userError s!"Neither {lakefile} nor {lakefile'} exist, couldn't load project" let toolchainfile := projectDir / "lean-toolchain" let toolchain ← do if !(← toolchainfile.pathExists) then throw <| .userError s!"File {toolchainfile} doesn't exist, couldn't load project" pure (← IO.FS.readFile toolchainfile).trimAscii.copy IO.FS.writeFile (projectDir / "Examples" / filename) setup -- Kludge: remove variables introduced by Lake. Clearing out DYLD_LIBRARY_PATH and -- LD_LIBRARY_PATH is useful so the version selected by Elan doesn't get the wrong shared -- libraries. let lakeVars := #["LAKE", "LAKE_HOME", "LAKE_PKG_URL_MAP", "LEAN_SYSROOT", "LEAN_AR", "LEAN_PATH", "LEAN_SRC_PATH", "LEAN_GITHASH", "ELAN_TOOLCHAIN", "DYLD_LIBRARY_PATH", "LD_LIBRARY_PATH"] let cmd := "elan" let toolchainFile ← IO.FS.Handle.mk toolchainfile .read toolchainFile.lock (exclusive := true) try let args := #["run", "--install", toolchain, "lake", "build", "subverso-helper"] let res ← IO.Process.output { cmd, args, cwd := projectDir -- Unset Lake's environment variables env := lakeVars.map (·, none) } if res.exitCode != 0 then reportFail projectDir cmd args res finally toolchainFile.unlock let setupFile ← IO.FS.Handle.mk (projectDir / "Examples" / filename) .read setupFile.lock (exclusive := true) try let args := #["run", "--install", toolchain, "lake", "env", "subverso-helper", mod] let (hlTm, hlCmd, hlSig, hlName) ← do let (procIn, proc) ← do let proc ← IO.Process.spawn { cmd, args, cwd := projectDir -- Unset Lake's environment variables env := lakeVars.map (·, none) stdin := .piped stdout := .piped stderr := .inherit } proc.takeStdin let mutex ← Std.Mutex.new (IO.FS.Stream.ofHandle procIn, IO.FS.Stream.ofHandle proc.stdout) let hlTm := fun (tm : String) (ty? : Option String) => show IO Highlighted from do mutex.atomically do let (procIn, procOut) ← get if let some code ← proc.tryWait then throw <| .userError s!"Process terminated: {code}" send procIn (Request.term tm ty?) match (← receiveThe Response procOut) with | some (.result (.highlighted hl)) => pure hl | some (.error code e more) => let mut msg := s!"{e} ({code})." if let some details := more then msg := msg ++ s!" Details:\n {details}" throw <| .userError msg | none => throw <| .userError "Helper process no longer running" let hlCmd := fun (cmd : String) => show IO Highlighted from do mutex.atomically do let (procIn, procOut) ← get if let some code ← proc.tryWait then throw <| .userError s!"Process terminated: {code}" send procIn (Request.command cmd) match (← receiveThe Response procOut) with | some (.result (.highlighted hl)) => pure hl | some (.error code e more) => let mut msg := s!"{e} ({code})." if let some details := more then msg := msg ++ s!" Details:\n {details}" throw <| .userError msg | none => throw <| .userError "Helper process no longer running" let hlSig := fun (cmd : String) => show IO Highlighted from do mutex.atomically do let (procIn, procOut) ← get if let some code ← proc.tryWait then throw <| .userError s!"Process terminated: {code}" send procIn (Request.signature cmd) match (← receiveThe Response procOut) with | some (.result (.highlighted hl)) => pure hl | some (.error code e more) => let mut msg := s!"{e} ({code})." if let some details := more then msg := msg ++ s!" Details:\n {details}" throw <| .userError msg | none => throw <| .userError "Helper process no longer running" let hlName := fun (cmd : String) => show IO Highlighted from do mutex.atomically do let (procIn, procOut) ← get if let some code ← proc.tryWait then throw <| .userError s!"Process terminated: {code}" send procIn (Request.name cmd) match (← receiveThe Response procOut) with | some (.result (.highlighted hl)) => pure hl | some (.error code e more) => let mut msg := s!"{e} ({code})." if let some details := more then msg := msg ++ s!" Details:\n {details}" throw <| .userError msg | none => throw <| .userError "Helper process no longer running" pure (hlTm, hlCmd, hlSig, hlName) return Helper.mk hlTm hlCmd hlSig hlName finally setupFile.unlock where decorateOut (name : String) (out : String) : String := if out.isEmpty then "" else s!"\n{name}:\n{out}\n" reportFail {α} (projectDir : FilePath) (cmd : String) (args : Array String) (res : IO.Process.Output) : IO α := do IO.eprintln <| "Build process failed." ++ "\nCWD: " ++ projectDir.toString ++ "\nCommand: " ++ cmd ++ "\nArgs: " ++ repr args ++ "\nExit code: " ++ toString res.exitCode ++ "\nstdout: " ++ res.stdout ++ "\nstderr: " ++ res.stderr throw <| .userError <| "Build process failed." ++ decorateOut "stdout" res.stdout ++ decorateOut "stderr" res.stderr initialize helperExt : EnvExtension (Option Helper) ← registerEnvExtension (pure none) initialize defaultHelperExt : EnvExtension (Option Helper) ← registerEnvExtension (pure none) @[directive_expander setup] def setup : DirectiveExpander | args, contents => do ArgParse.done.run args if h : contents.size < 1 then throwError "Expected a setup code block" else let first := contents[0] let contents := contents.extract 1 contents.size let `(block|``` | $setupCode ```) := first | throwErrorAt first "Expected undecorated code block" if helperExt.getState (← getEnv) |>.isSome then throwError "Already highlighting Lean" let helper ← Helper.fromModule setupCode.getString modifyEnv fun env => helperExt.setState env (some helper) try contents.mapM elabBlock finally modifyEnv fun env => helperExt.setState env none def prioritizedElab [Monad m] (prioritize : α → m Bool) (act : α → m β) (xs : Array α) : m (Array β) := do let mut out := #[] let mut later := #[] for h:i in [0:xs.size] do let x := xs[i] if ← prioritize x then out := out.push (i, (← act x)) else later := later.push (i, x) for (i, x) in later do out := out.push (i, (← act x)) out := out.qsort (fun (i, _) (j, _) => i < j) return out.map (·.2) open Lean Elab in def isLeanBlock : TSyntax `block → CoreM Bool | `(block|```$nameStx:ident $_args*|$_contents:str```) => do let name ← realizeGlobalConstNoOverloadWithInfo nameStx return name == ``TPiL.lean || name == `TPiL.signature || name == `TPiL.savedAnchor | _ => pure false /-- Elaborates Lean blocks first, maintaining the order of blocks. This makes their code available for `leanRef`. -/ @[directive_expander leanFirst] def leanFirst : DirectiveExpander | args, contents => do ArgParse.done.run args -- Elaborate Lean blocks first, so inlines in prior blocks can refer to them prioritizedElab (isLeanBlock ·) elabBlock contents @[code_block_expander setup] def setupCode : CodeBlockExpander | args, code => do ArgParse.done.run args let helper ← Helper.fromModule code.getString modifyEnv fun env => defaultHelperExt.setState env (some helper) return #[] @[directive_expander comment] def comment : DirectiveExpander | _, _ => pure #[] @[directive_expander TODO] def TODO : DirectiveExpander | _, _ => pure #[] @[role_expander TODO] def TODOinline : RoleExpander | _, _ => pure #[] @[role_expander kw] def kw : RoleExpander | args, inls => do ArgParse.done.run args let kw ← oneCodeStr inls let hl : Highlighted := .token ⟨.keyword none none none, kw.getString⟩ -- TODO kw xref return #[← ``(Inline.other (Inline.lean $(quote hl) {}) #[Inline.code $(quote kw.getString)])] @[role_expander attr] def attr : RoleExpander | args, inls => do ArgParse.done.run args let kw ← oneCodeStr inls let hl : Highlighted := .token ⟨.keyword none none none, kw.getString⟩ -- TODO attr xref return #[← ``(Inline.other (Inline.lean $(quote hl) {}) #[Inline.code $(quote kw.getString)])] @[role_expander tactic] def tactic : RoleExpander | args, inls => do ArgParse.done.run args let kw ← oneCodeStr inls let hl : Highlighted := .token ⟨.keyword none none none, kw.getString⟩ -- TODO kw xref return #[← ``(Inline.other (Inline.lean $(quote hl) {}) #[Inline.code $(quote kw.getString)])] @[role_expander kbd] def kbd : RoleExpander | args, inls => do ArgParse.done.run args let kbd ← codeStrs inls return #[← ``(Inline.other (Inline.kbd $(quote <| kbd.map (·.getString))) #[])] @[role_expander option] def option : RoleExpander | args, inls => do ArgParse.done.run args let kw ← oneCodeStr inls return #[← ``(Inline.code $(quote kw.getString))] def currentHelper : DocElabM Helper := do if let some h := helperExt.getState (← getEnv) then pure h else if let some h := defaultHelperExt.getState (← getEnv) then pure h else let helper ← Helper.fromModule s!"-- EMPTY for {← getMainModule}\n" modifyEnv fun env => defaultHelperExt.setState env (some helper) pure helper def multiVar? (str : String) : Option (Array String × String) := do let mut out := #[] let mut str := str.trimAscii repeat let pref1 := str.takeWhile alpha let length1 := pref1.positions.count if length1 < 1 then failure str := str.drop length1 let pref2 := str.takeWhile (fun c => alpha c || c.isDigit) let length2 := pref2.positions.count str := str.drop length2 let pref := pref1.copy ++ pref2.copy let c := str.startPos.get? if pref.length > 0 && (c.isEqSome ' ' || c.isEqSome ':') then out := out.push pref str := str.dropWhile (· == ' ') else failure if str.startPos.get? |>.isEqSome ':' then str := str.drop 1 str := str.dropWhile (· == ' ') if str.isEmpty then failure return (out, str.copy) failure where alpha c := c.isAlpha || c ∈ ['α', 'β', 'γ'] def highlightInline (code : String) (type? : Option String := none) : DocElabM Highlighted := do let helper ← currentHelper try if type?.isSome then throwError "failed" let some (vars, type) := multiVar? code | throwError "failed" let mut out : Highlighted := .empty for v in vars do out := out ++ (← helper.highlight v (some type)) ++ .text " " out := out ++ .text ": " out := out ++ (← helper.highlight type none) pure out catch e1 => try let codeStr := "(\n" ++ code ++ "\n)" let hl ← helper.highlight codeStr type? pure (hl.lines.extract 1 (hl.lines.size - 1) |> Highlighted.seq) catch e2 => throwError "Failed to highlight code. Errors:{indentD e1.toMessageData}\nand:{indentD e2.toMessageData}" def highlightCommand (code : String) : DocElabM Highlighted := do let helper ← currentHelper helper.command code def highlightSignature (code : String) : DocElabM Highlighted := do let helper ← currentHelper helper.signature code def highlightName (code : String) : DocElabM Highlighted := do let helper ← currentHelper helper.name code @[role_expander lean] def leanInline : RoleExpander | args, inls => do let type? ← ArgParse.run (.named `type .string true) args let code ← oneCodeStr inls let codeStr := code.getString try let hl ← highlightInline codeStr type? saveBackref hl return #[← ``(Inline.other (Inline.lean $(quote hl) {}) #[Inline.code $(quote hl.toString)])] catch | .error refStx e => logErrorAt refStx e return #[← ``(sorry)] | e => throw e @[role_expander name] def name : RoleExpander | args, inls => do let show? ← ArgParse.run (.named `show .string true) args let code ← oneCodeStr inls let codeStr := code.getString try let hl ← highlightName codeStr let hl := if let some s := show? then if let .token ⟨k, _⟩ := hl then .token ⟨k, s⟩ else hl else hl saveBackref hl match hl with | .token ⟨k, _⟩ => match k with | .const _ sig doc? _ => Hover.addCustomHover code <| s!"```\n{sig}\n```\n" ++ (doc?.map ("\n\n***\n\n" ++ ·) |>.getD "") | .var _ sig => Hover.addCustomHover code <| s!"```\n{sig}\n```\n" | _ => pure () | _ => pure () return #[← ``(Inline.other (Inline.lean $(quote hl) {}) #[Inline.code $(quote hl.toString)])] catch | .error refStx e => logErrorAt refStx e return #[← ``(sorry)] | e => throw e @[role_expander leanCommand] def leanCommand : RoleExpander | args, inls => do let type? ← ArgParse.done.run args let code ← oneCodeStr inls let codeStr := code.getString try let hl ← highlightCommand codeStr saveBackref hl for (msg, _) in allInfo hl do let k := match msg.severity with | .info => "info" | .error => "error" | .warning => "warning" logSilentInfo m!"{k}: {msg.toString}" return #[← ``(Inline.other (Inline.lean $(quote hl) {}) #[Inline.code $(quote hl.toString)])] catch | .error refStx e => logErrorAt refStx e return #[← ``(sorry)] | e => throw e @[code_block_expander leanCommand] def leanCommandBlock : CodeBlockExpander | args, code => do let type? ← ArgParse.done.run args let codeStr := code.getString try let hl ← highlightCommand codeStr saveBackref hl for (msg, _) in allInfo hl do let k := match msg.severity with | .info => "info" | .error => "error" | .warning => "warning" logSilentInfo m!"{k}: {msg.toString}" return #[← ``(Block.other (Block.lean false none #[ExampleItem.mk $(quote hl) none ""] none) #[])] catch | .error refStx e => logErrorAt refStx e return #[← ``(sorry)] | e => throw e @[code_block_expander signature] def signature : CodeBlockExpander | args, code => do let type? ← ArgParse.done.run args let codeStr := code.getString try let hl ← highlightSignature codeStr saveBackref hl for (msg, _) in allInfo hl do let k := match msg.severity with | .info => "info" | .error => "error" | .warning => "warning" logSilentInfo m!"{k}: {msg.toString}" return #[← ``(Block.other (Block.lean false none #[ExampleItem.mk $(quote hl) none ""] none) #[])] catch | .error refStx e => logErrorAt refStx e return #[← ``(sorry)] | e => throw e @[role_expander leanRef] def leanRef : RoleExpander | args, inls => do let in? ← ArgParse.run (.named `in .string true) args let code ← oneCodeStr inls let codeStr := code.getString for prev in recentHighlightsExt.getState (← getEnv) do if let some «in» := in? then if let some hl := prev.matchingExpr? «in» then if let some hl := hl.matchingExpr? codeStr then return #[← ``(Inline.other (Inline.lean $(quote hl) {}) #[Inline.code $(quote hl.toString)])] else break else if let some hl := prev.matchingExpr? codeStr then return #[← ``(Inline.other (Inline.lean $(quote hl) {}) #[Inline.code $(quote hl.toString)])] throwError "Not found: '{codeStr}'" @[role_expander empty] def empty : RoleExpander | args, _inls => do ArgParse.done.run args return #[] private def keywords := [ "#print", "#eval", "#print axioms", "#reduce", "#check", "noncomputable", "protected", "partial", "import", "export", "local", "def", "example", "instance", "macro_rules", "axiom", "if", "then", "else", "show", "have", "calc", "universe", "section", "end", "variable", "open", "set_option", "let", "fun" ] private def tactics := [ "if", "then", "else", "show", "have", "calc", "simp", "rw", "let", "fun", "<;>" ] private def leanLits := [ "→", "->", ";", "×", ".", "_", "⟨", "⟩" ] open MessageData (hint) in /-- Internal detail of suggestion mechanism. -/ @[inline_expander Lean.Doc.Syntax.code] private def suggest : InlineExpander | `(inline| code( $str )) => do let str' := str.getString -- unless verso.examples.suggest.get (← getOptions) do -- -- Delegate to the next handler -- Elab.throwUnsupportedSyntax if str' ∈ keywords then let h ← hint m!"Add the `kw` role:" #["{kw}`" ++ str' ++ "`"] logWarning <| m!"Code element could be a keyword." ++ h else if str'.startsWith "\\" then let h ← hint m!"Add the `kbd` role:" #["{kbd}`" ++ str' ++ "`"] logWarning <| m!"Code element could be a Unicode abbreviation." ++ h else if (← getOptionDecls).any (fun x _ => x.toString == str'.trimAscii) then let h ← hint m!"Add the `option` role:" #["{option}`" ++ str' ++ "`"] logWarning <| m!"Code element could be a compiler option." ++ h else let mut suggs : Array Meta.Hint.Suggestion := #[] let mut exns := #[] try let _ ← highlightInline str' suggs := suggs.push <| "{lean}`" ++ str' ++ "`" catch e => exns := exns.push e if str' ∈ tactics then suggs := suggs.push <| "{tactic}`" ++ str' ++ "`" for prev in recentHighlightsExt.getState (← getEnv) do if let some _ := prev.matchingExpr? str' then suggs := suggs.push <| "{leanRef}`" ++ str' ++ "`" break if str' ∈ leanLits then suggs := suggs.push <| "{lit}`" ++ str' ++ "`" for (name, {goals := gs, ..}) in proofStatesExt.getState (← getEnv) do let name := if name.any (·.isWhitespace) then name.quote else name if gs.any (·.name |>.isEqSome str') then suggs := suggs.push <| "{goal " ++ name ++ "}`" ++ str' ++ "`" if suggs.isEmpty then let h ← hint m!"Add the `lit` role to indicate that it denotes literal characters:" #["{lit}`" ++ str' ++ "`"] logWarning <| m!"Code element is missing a role, and can't be Lean code:{m!"\nand\n".joinSep (exns.map (indentD ·.toMessageData) |>.toList)}" ++ h else let h ← hint m!"Add a `lean` role:" suggs logWarning <| m!"Code element could be highlighted." ++ h return (← ``(Inline.code $(quote str.getString))) | _ => Elab.throwUnsupportedSyntax ================================================ FILE: book/TPiL/InductionAndRecursion.lean ================================================ import VersoManual import TPiL.Examples open Verso.Genre open Verso.Genre.Manual hiding tactic open TPiL #doc (Manual) "Induction and Recursion" => %%% tag := "induction-and-recursion" %%% In the previous chapter, we saw that inductive definitions provide a powerful means of introducing new types in Lean. Moreover, the constructors and the recursors provide the only means of defining functions on these types. By the {tech}[propositions-as-types] correspondence, this means that induction is the fundamental method of proof. Lean provides natural ways of defining recursive functions, performing pattern matching, and writing inductive proofs. It allows you to define a function by specifying equations that it should satisfy, and it allows you to prove a theorem by specifying how to handle various cases that can arise. Behind the scenes, these descriptions are “compiled” down to primitive recursors, using a procedure that we refer to as the “equation compiler.” The equation compiler is not part of the trusted code base; its output consists of terms that are checked independently by the kernel. # Pattern Matching %%% tag := "pattern-matching" %%% The interpretation of schematic patterns is the first step of the compilation process. We have seen that the {lit}`casesOn` recursor can be used to define functions and prove theorems by cases, according to the constructors involved in an inductively defined type. But complicated definitions may use several nested {lit}`casesOn` applications, and may be hard to read and understand. Pattern matching provides an approach that is more convenient, and familiar to users of functional programming languages. :::setup ``` open Nat variable (x : Nat) ``` Consider the inductively defined type of natural numbers. Every natural number is either {lean}`zero` or {lean}`succ x`, and so you can define a function from the natural numbers to an arbitrary type by specifying a value in each of those cases: ::: ```lean set_option linter.unusedVariables false -------- open Nat def sub1 : Nat → Nat | zero => zero | succ x => x def isZero : Nat → Bool | zero => true | succ x => false ``` The equations used to define these functions hold definitionally: ```lean open Nat def sub1 : Nat → Nat | zero => zero | succ x => x def isZero : Nat → Bool | zero => true | succ x => false ------ example : sub1 0 = 0 := rfl example (x : Nat) : sub1 (succ x) = x := rfl example : isZero 0 = true := rfl example (x : Nat) : isZero (succ x) = false := rfl example : sub1 7 = 6 := rfl example (x : Nat) : isZero (x + 3) = false := rfl ``` Instead of {leanRef}`zero` and {leanRef}`succ`, we can use more familiar notation: ```lean set_option linter.unusedVariables false -------- def sub1 : Nat → Nat | 0 => 0 | x + 1 => x def isZero : Nat → Bool | 0 => true | x + 1 => false ``` Because addition and the zero notation have been assigned the {attr}`[match_pattern]` attribute, they can be used in pattern matching. Lean simply normalizes these expressions until the constructors {leanRef}`zero` and {leanRef}`succ` are exposed. Pattern matching works with any inductive type, such as products and option types: ```lean def swap : α × β → β × α | (a, b) => (b, a) def foo : Nat × Nat → Nat | (m, n) => m + n def bar : Option Nat → Nat | some n => n + 1 | none => 0 ``` Here we use it not only to define a function, but also to carry out a proof by cases: ```lean namespace Hidden ------ def not : Bool → Bool | true => false | false => true theorem not_not : ∀ (b : Bool), not (not b) = b | true => show not (not true) = true from rfl | false => show not (not false) = false from rfl ------ end Hidden ``` Pattern matching can also be used to destruct inductively defined propositions: ```lean example (p q : Prop) : p ∧ q → q ∧ p | And.intro h₁ h₂ => And.intro h₂ h₁ example (p q : Prop) : p ∨ q → q ∨ p | Or.inl hp => Or.inr hp | Or.inr hq => Or.inl hq ``` This provides a compact way of unpacking hypotheses that make use of logical connectives. In all these examples, pattern matching was used to carry out a single case distinction. More interestingly, patterns can involve nested constructors, as in the following examples. ```lean def sub2 : Nat → Nat | 0 => 0 | 1 => 0 | x + 2 => x ``` The equation compiler first splits on cases as to whether the input is {leanRef}`zero` or of the form {leanRef}`succ x`. It then does a case split on whether {leanRef}`x` is of the form {leanRef}`zero` or {leanRef}`succ x`. It determines the necessary case splits from the patterns that are presented to it, and raises an error if the patterns fail to exhaust the cases. Once again, we can use arithmetic notation, as in the version below. In either case, the defining equations hold definitionally. ```lean def sub2 : Nat → Nat | 0 => 0 | 1 => 0 | x+2 => x ------ example : sub2 0 = 0 := rfl example : sub2 1 = 0 := rfl example : sub2 (x+2) = x := rfl example : sub2 5 = 3 := rfl ``` :::setup ``` def sub2 : Nat → Nat | 0 => 0 | 1 => 0 | x + 2 => x ``` You can write {leanCommand}`#print sub2` to see how the function was compiled to recursors. (Lean will tell you that {leanRef}`sub2` has been defined in terms of an internal auxiliary function, {lean}`sub2.match_1`, but you can print that out too.) Lean uses these auxiliary functions to compile {kw}`match` expressions. Actually, the definition above is expanded to ::: ```lean def sub2 : Nat → Nat := fun x => match x with | 0 => 0 | 1 => 0 | x + 2 => x ``` Here are some more examples of nested pattern matching: ```lean set_option linter.unusedVariables false -------- example (p q : α → Prop) : (∃ x, p x ∨ q x) → (∃ x, p x) ∨ (∃ x, q x) | Exists.intro x (Or.inl px) => Or.inl (Exists.intro x px) | Exists.intro x (Or.inr qx) => Or.inr (Exists.intro x qx) def foo : Nat × Nat → Nat | (0, n) => 0 | (m+1, 0) => 1 | (m+1, n+1) => 2 ``` The equation compiler can process multiple arguments sequentially. For example, it would be more natural to define the previous example as a function of two arguments: ```lean set_option linter.unusedVariables false -------- def foo : Nat → Nat → Nat | 0, n => 0 | m + 1, 0 => 1 | m + 1, n + 1 => 2 ``` Here is another example: ```lean set_option linter.unusedVariables false -------- def bar : List Nat → List Nat → Nat | [], [] => 0 | a :: as, [] => a | [], b :: bs => b | a :: as, b :: bs => a + b ``` Note that the patterns are separated by commas. In each of the following examples, splitting occurs on only the first argument, even though the others are included among the list of patterns. ```lean set_option linter.unusedVariables false namespace Hidden ------ def and : Bool → Bool → Bool | true, a => a | false, _ => false def or : Bool → Bool → Bool | true, _ => true | false, a => a def cond : Bool → α → α → α | true, x, y => x | false, x, y => y ------ end Hidden ``` Notice also that, when the value of an argument is not needed in the definition, you can use an underscore instead. This underscore is known as a _wildcard pattern_, or an _anonymous variable_. In contrast to usage outside the equation compiler, here the underscore does _not_ indicate an implicit argument. The use of underscores for wildcards is common in functional programming languages, and so Lean adopts that notation. The section on {ref "wildcards-and-overlapping-patterns"}[wildcards and overlapping patterns] expands on the notion of a wildcard, and the description of {ref "inaccessible-patterns"}[inaccessible patterns] explains how you can use implicit arguments in patterns as well. ::::setup ``` set_option linter.unusedVariables false -------- def tail : List α → List α | [] => [] | a :: as => as ``` :::leanFirst As described in {ref "inductive-types"}[Inductive Types], inductive data types can depend on parameters. The following example defines the {name}`tail` function using pattern matching. The argument {leanRef}`α : Type u` is a parameter and occurs before the colon to indicate it does not participate in the pattern matching. Lean also allows parameters to occur after the {leanRef}`:`, but pattern matching on them requires an explicit {leanRef}`match`. ```lean set_option linter.unusedVariables false -------- def tail1 {α : Type u} : List α → List α | [] => [] | a :: as => as def tail2 : {α : Type u} → List α → List α | α, [] => [] | α, a :: as => as ``` ::: :::: Despite the different placement of the parameter {leanRef}`α` in these two examples, in both cases it is treated in the same way, in that it does not participate in a case split. Lean can also handle more complex forms of pattern matching, in which arguments to dependent types pose additional constraints on the various cases. Such examples of _dependent pattern matching_ are considered in the section on {ref "dependent-pattern-matching"}[dependent pattern matching]. # Wildcards and Overlapping Patterns %%% tag := "wildcards-and-overlapping-patterns" %%% Consider one of the examples from the last section: ```lean set_option linter.unusedVariables false -------- def foo : Nat → Nat → Nat | 0, n => 0 | m + 1, 0 => 1 | m + 1, n + 1 => 2 ``` An alternative presentation is: ```lean set_option linter.unusedVariables false -------- def foo : Nat → Nat → Nat | 0, n => 0 | m, 0 => 1 | m, n => 2 ``` In the second presentation, the patterns overlap; for example, the pair of arguments {lit}`0, 0` matches all three cases. But Lean handles the ambiguity by using the first applicable equation, so in this example the net result is the same. In particular, the following equations hold definitionally: ```lean def foo : Nat → Nat → Nat | 0, n => 0 | m, 0 => 1 | m, n => 2 ------ example : foo 0 0 = 0 := rfl example : foo 0 (n + 1) = 0 := rfl example : foo (m + 1) 0 = 1 := rfl example : foo (m + 1) (n + 1) = 2 := rfl ``` Since the values of {leanRef (in:="m, n")}`m` and {leanRef (in:="m, n")}`n` are not needed, we can just as well use wildcard patterns instead. ```lean def foo : Nat → Nat → Nat | 0, _ => 0 | _, 0 => 1 | _, _ => 2 ``` You can check that this definition of {leanRef}`foo` satisfies the same definitional identities as before. :::setup ``` variable (α : Type u) (a : α) ``` Some functional programming languages support _incomplete patterns_. In these languages, the interpreter produces an exception or returns an arbitrary value for incomplete cases. We can simulate the arbitrary value approach using the {lean}`Inhabited` type class. Roughly, an element of {lean}`Inhabited α` is a witness to the fact that there is an element of {lean}`α`; in {ref "type-classes"}[the chapter on type classes] we will see that Lean can be instructed that suitable base types are inhabited, and can automatically infer that other constructed types are inhabited. On this basis, the standard library provides a default element, {lean}`default`, of any inhabited type. We can also use the type {lean}`Option α` to simulate incomplete patterns. The idea is to return {lean}`some a` for the provided patterns, and use {lean (type:="Option α")}`none` for the incomplete cases. The following example demonstrates both approaches. ::: ```lean def f1 : Nat → Nat → Nat | 0, _ => 1 | _, 0 => 2 | _, _ => default -- the "incomplete" case example : f1 0 0 = 1 := rfl example : f1 0 (a+1) = 1 := rfl example : f1 (a+1) 0 = 2 := rfl example : f1 (a+1) (b+1) = default := rfl def f2 : Nat → Nat → Option Nat | 0, _ => some 1 | _, 0 => some 2 | _, _ => none -- the "incomplete" case example : f2 0 0 = some 1 := rfl example : f2 0 (a+1) = some 1 := rfl example : f2 (a+1) 0 = some 2 := rfl example : f2 (a+1) (b+1) = none := rfl ``` The equation compiler is clever. If you leave out any of the cases in the following definition, the error message will let you know what has not been covered. ```lean def bar : Nat → List Nat → Bool → Nat | 0, _, false => 0 | 0, b :: _, _ => b | 0, [], true => 7 | a+1, [], false => a | a+1, [], true => a + 1 | a+1, b :: _, _ => a + b ``` It will also use an {kw}`if`{lit}` ... `{kw}`then`{lit}` ... `{kw}`else` instead of a {lit}`casesOn` in appropriate situations. ```lean set_option pp.proofs true ------- def foo : Char → Nat | 'A' => 1 | 'B' => 2 | _ => 3 #print foo.match_1 ``` # Structural Recursion and Induction %%% tag := "structural-recursion-and-induction" %%% What makes the equation compiler powerful is that it also supports recursive definitions. In the next three sections, we will describe, respectively: - structurally recursive definitions - well-founded recursive definitions - mutually recursive definitions Generally speaking, the equation compiler processes input of the following form: ``` def foo (a : α) : (b : β) → γ | [patterns₁] => t₁ ... | [patternsₙ] => tₙ ``` Here {lit}`(a : α)` is a sequence of parameters, {lit}`(b : β)` is the sequence of arguments on which pattern matching takes place, and {lit}`γ` is any type, which can depend on {lit}`a` and {lit}`b`. Each line should contain the same number of patterns, one for each element of {lit}`β`. As we have seen, a pattern is either a variable, a constructor applied to other patterns, or an expression that normalizes to something of that form (where the non-constructors are marked with the {attr}`[match_pattern]` attribute). The appearances of constructors prompt case splits, with the arguments to the constructors represented by the given variables. In the section on {ref "dependent-pattern-matching"}[dependent pattern matching], we will see that some explicit terms in patterns are forced into a particular form in order to make an expression type check, though they do not play a role in pattern matching. These are called “{deftech}[inaccessible patterns]” for that reason. But we will not need to use such inaccessible patterns before covering {ref "dependent-pattern-matching"}[dependent pattern matching]. As we saw in the last section, the terms {lit}`t₁, ..., tₙ` can make use of any of the parameters {lit}`a`, as well as any of the variables that are introduced in the corresponding patterns. What makes recursion and induction possible is that they can also involve recursive calls to {lit}`foo`. In this section, we will deal with _structural recursion_, in which the arguments to {lit}`foo` occurring on the right-hand side of the {lit}`=>` are subterms of the patterns on the left-hand side. The idea is that they are structurally smaller, and hence appear in the inductive type at an earlier stage. Here are some examples of structural recursion from the last chapter, now defined using the equation compiler: ```lean open Nat def add : Nat → Nat → Nat | m, zero => m | m, succ n => succ (add m n) theorem add_zero (m : Nat) : add m zero = m := rfl theorem add_succ (m n : Nat) : add m (succ n) = succ (add m n) := rfl theorem zero_add : ∀ n, add zero n = n | zero => rfl | succ n => congrArg succ (zero_add n) def mul : Nat → Nat → Nat | n, zero => zero | n, succ m => add (mul n m) n ``` The proof of {leanRef}`zero_add` makes it clear that proof by induction is really a form of recursion in Lean. The example above shows that the defining equations for {leanRef}`add` hold definitionally, and the same is true of {leanRef}`mul`. The equation compiler tries to ensure that this holds whenever possible, as is the case with straightforward structural induction. In other situations, however, reductions hold only _propositionally_, which is to say, they are equational theorems that must be applied explicitly. The equation compiler generates such theorems internally. They are not meant to be used directly by the user; rather, the {tactic}`simp` tactic is configured to use them when necessary. The following proof of {leanRef}`zero_add` works this way: ```lean open Nat def add : Nat → Nat → Nat | m, zero => m | m, succ n => succ (add m n) ----- theorem zero_add : ∀ n, add zero n = n | zero => by simp [add] | succ n => by simp [add, zero_add] ``` As with definition by pattern matching, parameters to a structural recursion or induction may appear before the colon. Such parameters are simply added to the local context before the definition is processed. For example, the definition of addition may also be written as follows: ```lean open Nat def add (m : Nat) : Nat → Nat | zero => m | succ n => succ (add m n) ``` You can also write the example above using {kw}`match`. ```lean open Nat def add (m n : Nat) : Nat := match n with | zero => m | succ n => succ (add m n) ``` :::leanFirst A more interesting example of structural recursion is given by the Fibonacci function {leanRef}`fib`. ```lean def fib : Nat → Nat | 0 => 1 | 1 => 1 | n+2 => fib (n+1) + fib n example : fib 0 = 1 := rfl example : fib 1 = 1 := rfl example : fib (n + 2) = fib (n + 1) + fib n := rfl example : fib 7 = 21 := rfl ``` ::: :::setup ``` variable (n : Nat) open Nat ``` Here, the value of the {leanRef}`fib` function at {leanRef}`n + 2` (which is definitionally equal to {lean}`succ (succ n)`) is defined in terms of the values at {leanRef}`n + 1` (which is definitionally equivalent to {lean}`succ n`) and the value at {leanRef}`n`. This is a notoriously inefficient way of computing the Fibonacci function, however, with an execution time that is exponential in {lean}`n`. Here is a better way: ::: ```lean def fibFast (n : Nat) : Nat := (loop n).2 where loop : Nat → Nat × Nat | 0 => (0, 1) | n+1 => let p := loop n; (p.2, p.1 + p.2) #eval fibFast 100 -- 573147844013817084101 ``` Here is the same definition using a {kw}`let rec` instead of a {kw}`where`. ```lean def fibFast (n : Nat) : Nat := let rec loop : Nat → Nat × Nat | 0 => (0, 1) | n+1 => let p := loop n; (p.2, p.1 + p.2) (loop n).2 ``` In both cases, Lean generates the auxiliary function {lit}`fibFast.loop`. :::leanFirst To handle structural recursion, the equation compiler uses _course-of-values_ recursion, using constants {lit}`below` and {lit}`brecOn` that are automatically generated with each inductively defined type. You can get a sense of how it works by looking at the types of {leanRef}`Nat.below` and {leanRef}`Nat.brecOn`: ```lean variable (C : Nat → Type u) #check (@Nat.below C : Nat → Type u) #reduce @Nat.below C (3 : Nat) #check (@Nat.brecOn C : (n : Nat) → ((n : Nat) → @Nat.below C n → C n) → C n) ``` ::: :::setup ``` variable (C : Nat → Type u) (n : Nat) ``` The type {lean}`@Nat.below C (3 : Nat)` is a data structure that stores elements of {lean}`C 0`, {lean}`C 1`, and {lean}`C 2`. The course-of-values recursion is implemented by {name}`Nat.brecOn`. It enables us to define the value of a dependent function of type {lean}`(n : Nat) → C n` at a particular input {lean}`n` in terms of all the previous values of the function, presented as an element of {lean}`@Nat.below C n`. ::: :::leanFirst The use of course-of-values recursion is one of the techniques the equation compiler uses to justify to the Lean kernel that a function terminates. It does not affect the code generator which compiles recursive functions as other functional programming language compilers. Recall that {kw}`#eval`{lit}` ` {leanRef}`fib`{lit}` ` is exponential in {lit}``. On the other hand, {kw}`#reduce`{lit}` `{leanRef}`fib`{lit}` ` is efficient because it uses the definition sent to the kernel that is based on the {lit}`brecOn` construction. ```lean def fib : Nat → Nat | 0 => 1 | 1 => 1 | n+2 => fib (n+1) + fib n -- Slow: -- #eval fib 50 -- Fast: #reduce fib 50 #print fib ``` ::: :::leanFirst Another good example of a recursive definition is the list {leanRef}`append` function. ```lean def append : List α → List α → List α | [], bs => bs | a::as, bs => a :: append as bs example : append [1, 2, 3] [4, 5] = [1, 2, 3, 4, 5] := rfl ``` ::: Here is another: it adds elements of the first list to elements of the second list, until one of the two lists runs out. ```lean def listAdd [Add α] : List α → List α → List α | [], _ => [] | _, [] => [] | a :: as, b :: bs => (a + b) :: listAdd as bs #eval listAdd [1, 2, 3] [4, 5, 6, 6, 9, 10] -- [5, 7, 9] ``` You are encouraged to experiment with similar examples in the exercises below. # Local recursive declarations %%% tag := "local-recursive-declarations" %%% You can define local recursive declarations using the {kw}`let rec` keyword. ```lean def replicate (n : Nat) (a : α) : List α := let rec loop : Nat → List α → List α | 0, as => as | n+1, as => loop n (a::as) loop n [] #check @replicate.loop -- @replicate.loop : {α : Type u_1} → α → Nat → List α → List α ``` Lean creates an auxiliary declaration for each {leanRef}`let rec`. In the example above, it created the declaration {leanRef}`replicate.loop` for the {leanRef}`let rec loop` occurring at {leanRef}`replicate`. Note that, Lean “closes” the declaration by adding any local variable occurring in the {leanRef}`let rec` declaration as additional parameters. For example, the local variable {leanRef}`a` occurs at {leanRef}`let rec loop`. You can also use {leanRef}`let rec` in tactic mode and for creating proofs by induction. ```lean def replicate (n : Nat) (a : α) : List α := let rec loop : Nat → List α → List α | 0, as => as | n+1, as => loop n (a::as) loop n [] ------ theorem length_replicate (n : Nat) (a : α) : (replicate n a).length = n := by let rec aux (n : Nat) (as : List α) : (replicate.loop a n as).length = n + as.length := by match n with | 0 => simp [replicate.loop] | n+1 => simp +arith [replicate.loop, aux n] exact aux n [] ``` You can also introduce auxiliary recursive declarations using {kw}`where` clause after your definition. Lean converts them into a {kw}`let rec`. ```lean def replicate (n : Nat) (a : α) : List α := loop n [] where loop : Nat → List α → List α | 0, as => as | n+1, as => loop n (a::as) theorem length_replicate (n : Nat) (a : α) : (replicate n a).length = n := by exact aux n [] where aux (n : Nat) (as : List α) : (replicate.loop a n as).length = n + as.length := by match n with | 0 => simp [replicate.loop] | n+1 => simp +arith [replicate.loop, aux n] ``` # Well-Founded Recursion and Induction %%% tag := "well-founded-recursion-and-induction" %%% When structural recursion cannot be used, we can prove termination using well-founded recursion. We need a well-founded relation and a proof that each recursive application is decreasing with respect to this relation. Dependent type theory is powerful enough to encode and justify well-founded recursion. Let us start with the logical background that is needed to understand how it works. :::setup ``` variable (α : Type u) (a : α) (r : α → α → Prop) ``` Lean's standard library defines two predicates, {lean}`Acc r a` and {lean}`WellFounded r`, where {lean}`r` is a binary relation on a type {lean}`α`, and {lean}`a` is an element of type {lean}`α`. ::: ```lean variable (α : Sort u) variable (r : α → α → Prop) #check (Acc r : α → Prop) #check (WellFounded r : Prop) ``` ```lean (show := false) variable {α : Sort u} (x y : α) variable {r : α → α → Prop} example : Acc r x = ∀ y, r y x → Acc r y := by simp only [eq_iff_iff] constructor . intro ⟨_, hAcc⟩ assumption . intro h constructor assumption def r' : α → α → Prop := fun x y => True infix:50 " ≺ " => r' example : y ≺ x := True.intro example := WellFounded r ``` The first, {leanRef}`Acc`, is an inductively defined predicate. According to its definition, {leanRef}`Acc r x` is equivalent to {leanRef}`∀ y, r y x → Acc r y`. If you think of {leanRef}`r y x` as denoting a kind of order relation {leanRef}`y ≺ x`, then {leanRef}`Acc r x` says that {leanRef}`x` is accessible from below, in the sense that all its predecessors are accessible. In particular, if {leanRef}`x` has no predecessors, it is accessible. Given any type {leanRef}`α`, we should be able to assign a value to each accessible element of {leanRef}`α`, recursively, by assigning values to all its predecessors first. The statement that {leanRef}`r` is well-founded, denoted {leanRef}`WellFounded r`, is exactly the statement that every element of the type is accessible. By the above considerations, if {leanRef}`r` is a well-founded relation on a type {leanRef}`α`, we should have a principle of well-founded recursion on {leanRef}`α`, with respect to the relation {leanRef}`r`. And, indeed, we do: the standard library defines {name}`WellFounded.fix`, which serves exactly that purpose. ```lean noncomputable def f {α : Sort u} (r : α → α → Prop) (h : WellFounded r) (C : α → Sort v) (F : (x : α) → ((y : α) → r y x → C y) → C x) : (x : α) → C x := WellFounded.fix h F ``` There is a long cast of characters here, but the first block we have already seen: the type, {leanRef}`α`, the relation, {leanRef}`r`, and the assumption, {leanRef}`h`, that {leanRef}`r` is well-founded. The variable {leanRef}`C` represents the motive of the recursive definition: for each element {leanRef}`x : α`, we would like to construct an element of {leanRef}`C x`. The function {leanRef}`F` provides the inductive recipe for doing that: it tells us how to construct an element {leanRef}`C x`, given elements of {leanRef}`C y` for each predecessor {leanRef}`y` of {leanRef}`x`. :::setup ``` variable {x y : α} (C : α → Sort v) (r : α → α → Prop) ``` Note that {name}`WellFounded.fix` works equally well as an induction principle. It says that if {leanRef}`≺` is well-founded and you want to prove {lean}`∀ x, C x`, it suffices to show that for an arbitrary {lean}`x`, if we have {lean}`∀ y, r y x → C y`, then we have {lean}`C x`. ::: In the example above we use the modifier {leanRef}`noncomputable` because the code generator currently does not support {name}`WellFounded.fix`. The function {name}`WellFounded.fix` is another tool Lean uses to justify that a function terminates. Lean knows that the usual order {lit}`<` on the natural numbers is well founded. It also knows a number of ways of constructing new well founded orders from others, for example, using lexicographic order. Here is essentially the definition of division on the natural numbers that is found in the standard library. ```lean ------ open Nat theorem div_lemma {x y : Nat} : 0 < y ∧ y ≤ x → x - y < x := fun h => sub_lt (Nat.lt_of_lt_of_le h.left h.right) h.left def div.F (x : Nat) (f : (x₁ : Nat) → x₁ < x → Nat → Nat) (y : Nat) : Nat := if h : 0 < y ∧ y ≤ x then f (x - y) (div_lemma h) y + 1 else zero noncomputable def div := WellFounded.fix (measure id).wf div.F #reduce div 8 2 -- 4 ``` :::TODO Missing HL for example ::: The definition is somewhat inscrutable. Here the recursion is on {leanRef (in:="def div.F (x")}`x`, and {lit}`div.F x f : Nat → Nat` returns the “divide by {leanRef}`y`” function for that fixed {leanRef (in:="def div.F (x")}`x`. You have to remember that the second argument to {leanRef}`div.F`, the recipe for the recursion, is a function that is supposed to return the divide by {leanRef}`y` function for all values {leanRef}`x₁` smaller than {leanRef}`x`. The elaborator is designed to make definitions like this more convenient. It accepts the following: ```lean def div (x y : Nat) : Nat := if h : 0 < y ∧ y ≤ x then have : x - y < x := Nat.sub_lt (Nat.lt_of_lt_of_le h.1 h.2) h.1 div (x - y) y + 1 else 0 ``` When Lean encounters a recursive definition, it first tries structural recursion, and only when that fails, does it fall back on well-founded recursion. Lean uses the tactic {tactic}`decreasing_tactic` to show that the recursive applications are smaller. The auxiliary proposition {leanRef}`x - y < x` in the example above should be viewed as a hint for this tactic. The defining equation for {leanRef}`div` does _not_ hold definitionally, but we can unfold {leanRef}`div` using the {tactic}`unfold` tactic. We use {ref "conv"}[{tactic}`conv`] to select which {leanRef}`div` application we want to unfold. ```lean def div (x y : Nat) : Nat := if h : 0 < y ∧ y ≤ x then have : x - y < x := Nat.sub_lt (Nat.lt_of_lt_of_le h.1 h.2) h.1 div (x - y) y + 1 else 0 ------ example (x y : Nat) : div x y = if 0 < y ∧ y ≤ x then div (x - y) y + 1 else 0 := by -- unfold occurrence in the left-hand-side of the equation: conv => lhs; unfold div rfl example (x y : Nat) (h : 0 < y ∧ y ≤ x) : div x y = div (x - y) y + 1 := by conv => lhs; unfold div simp [h] ``` :::leanFirst The following example is similar: it converts any natural number to a binary expression, represented as a list of 0's and 1's. We have to provide evidence that the recursive call is decreasing, which we do here with a {leanRef}`sorry`. The {leanRef}`sorry` does not prevent the interpreter from evaluating the function successfully, but {leanRef}`#eval!` must be used instead of {kw}`#eval` when a term contains {leanRef}`sorry`. ```lean def natToBin : Nat → List Nat | 0 => [0] | 1 => [1] | n + 2 => have : (n + 2) / 2 < n + 2 := sorry natToBin ((n + 2) / 2) ++ [n % 2] #eval! natToBin 1234567 ``` ::: :::leanFirst As a final example, we observe that Ackermann's function can be defined directly, because it is justified by the well-foundedness of the lexicographic order on the natural numbers. The {leanRef}`termination_by` clause instructs Lean to use a lexicographic order. This clause is actually mapping the function arguments to elements of type {lean}`Nat × Nat`. Then, Lean uses typeclass resolution to synthesize an element of type {lean}`WellFoundedRelation (Nat × Nat)`. ```lean def ack : Nat → Nat → Nat | 0, y => y+1 | x+1, 0 => ack x 1 | x+1, y+1 => ack x (ack (x+1) y) termination_by x y => (x, y) ``` ::: In many cases, Lean can automatically determine an appropriate lexicographical order. Ackermann's function is one such case, so the {leanRef}`termination_by` clause is optional: ```lean def ack : Nat → Nat → Nat | 0, y => y+1 | x+1, 0 => ack x 1 | x+1, y+1 => ack x (ack (x+1) y) ``` :::setup ``` variable {α : Type u} {β : Type v} ``` Note that a lexicographic order is used in the example above because the instance {lean}`WellFoundedRelation (α × β)` uses a lexicographic order. Lean also defines the instance ```lean instance (priority := low) [SizeOf α] : WellFoundedRelation α := sizeOfWFRel ``` ::: :::leanFirst In the following example, we prove termination by showing that {leanRef}`as.size - i` is decreasing in the recursive application. ```lean def takeWhile (p : α → Bool) (as : Array α) : Array α := go 0 #[] where go (i : Nat) (r : Array α) : Array α := if h : i < as.size then let a := as[i] if p a then go (i+1) (r.push a) else r else r termination_by as.size - i ``` ::: Note that, auxiliary function {leanRef}`go` is recursive in this example, but {leanRef}`takeWhile` is not. Once again, Lean can automatically recognize this pattern, so the {leanRef}`termination_by` clause is unnecessary: ```lean def takeWhile (p : α → Bool) (as : Array α) : Array α := go 0 #[] where go (i : Nat) (r : Array α) : Array α := if h : i < as.size then let a := as[i] if p a then go (i+1) (r.push a) else r else r ``` :::leanFirst By default, Lean uses the tactic {tactic}`decreasing_tactic` to prove recursive applications are decreasing. The modifier {leanRef}`decreasing_by` allows us to provide our own tactic. Here is an example. ```lean theorem div_lemma {x y : Nat} : 0 < y ∧ y ≤ x → x - y < x := fun ⟨ypos, ylex⟩ => Nat.sub_lt (Nat.lt_of_lt_of_le ypos ylex) ypos def div (x y : Nat) : Nat := if h : 0 < y ∧ y ≤ x then div (x - y) y + 1 else 0 decreasing_by apply div_lemma; assumption ``` ::: Note that {leanRef}`decreasing_by` is not replacement for {leanRef}`termination_by`, they complement each other. {leanRef}`termination_by` is used to specify a well-founded relation, and {leanRef}`decreasing_by` for providing our own tactic for showing recursive applications are decreasing. In the following example, we use both of them. ```lean def ack : Nat → Nat → Nat | 0, y => y+1 | x+1, 0 => ack x 1 | x+1, y+1 => ack x (ack (x+1) y) termination_by x y => (x, y) decreasing_by -- unfolds well-founded recursion auxiliary definitions: all_goals simp_wf · apply Prod.Lex.left; simp +arith · apply Prod.Lex.right; simp +arith · apply Prod.Lex.left; simp +arith ``` :::leanFirst We can use {leanRef}`decreasing_by sorry` to instruct Lean to “trust” us that the function terminates. ```lean def natToBin : Nat → List Nat | 0 => [0] | 1 => [1] | n + 2 => natToBin ((n + 2) / 2) ++ [n % 2] decreasing_by sorry #eval! natToBin 1234567 ``` ::: :::leanFirst Recall that using {leanRef}`sorry` is equivalent to using a new axiom, and should be avoided. In the following example, we used the {leanRef}`sorry` to prove {leanRef}`False`. The command {leanRef}`#print axioms unsound` shows that {leanRef}`unsound` depends on the unsound axiom {lean}`sorryAx` used to implement {leanRef}`sorry`. ```lean def unsound (x : Nat) : False := unsound (x + 1) decreasing_by sorry #check unsound 0 -- `unsound 0` is a proof of `False` #print axioms unsound -- 'unsound' depends on axioms: [sorryAx] ``` ::: :::setup ``` variable {α : Type w} {β : Type u} {γ : Type v} {G : Prop} ``` Summary: - If there is no {leanRef}`termination_by`, a well-founded relation is derived (if possible) by selecting an argument and then using typeclass resolution to synthesize a well-founded relation for this argument's type. - If {leanRef}`termination_by` is specified, it maps the arguments of the function to a type {lean}`α` and type class resolution is again used. Recall that, the default instance for {lean}`β × γ` is a lexicographic order based on the well-founded relations for {lean}`β` and {lean}`γ`. - The default well-founded relation instance for {lean}`Nat` is {lean (type := "Nat → Nat → Prop")}`(· < ·)`. - By default, the tactic {tactic}`decreasing_tactic` is used to show that recursive applications are smaller with respect to the selected well-founded relation. If {tactic}`decreasing_tactic` fails, the error message includes the remaining goal {lit}`... |- G`. Note that, the {tactic}`decreasing_tactic` uses {tactic}`assumption`. So, you can include a {kw}`have`-expression to prove goal {lean}`G`. You can also provide your own tactic using {kw}`decreasing_by`. ::: # Functional Induction %%% tag := "functional-induction" %%% Lean generates bespoke induction principles for recursive functions. These induction principles follow the recursive structure of the function's definition, rather than the structure of the datatype. Proofs about functions typically follow the recursive structure of the function itself, so these induction principles allow statements about the function to be proved more conveniently. :::leanFirst For example, using the functional induction principle for {leanRef}`ack` to prove that the result is always greater than {leanRef}`0` requires one case for each arm of the pattern match in {leanRef}`ack`: ```lean def ack : Nat → Nat → Nat | 0, y => y+1 | x+1, 0 => ack x 1 | x+1, y+1 => ack x (ack (x+1) y) theorem ack_gt_zero : ack n m > 0 := by fun_induction ack with | case1 y => -- ^ PROOF_STATE: case1 simp | case2 x ih => -- ^ PROOF_STATE: case2 exact ih | case3 x y ih1 ih2 => -- ^ PROOF_STATE: case3 simp [ack, *] ``` ::: In {goal case1}`case1`, the goal is: ```proofState case1 case case1 y : Nat ⊢ y + 1 > 0 ``` The {leanRef}`y + 1` in the goal corresponds to the value returned in the first case of {leanRef}`ack`. In {goal case2}`case2`, the goal is: ```proofState case2 case case2 x : Nat ih : ack x 1 > 0 ⊢ ack x 1 > 0 ``` The {leanRef}`ack x 1` in the goal corresponds to the value of {leanRef}`ack` applied to the pattern variables {leanRef}`x + 1` and {leanRef}`0` returned in the second case of {leanRef}`ack`. This term is automatically simplified to the right-hand side. Happily, the inductive hypothesis {leanRef}`ih : ack x 1 > 0` corresponds to the recursive call, which is exactly the answer returned in this case. In {goal case3}`case3`, the goal is: ```proofState case3 case case3 x : Nat y : Nat ih1 : ack (x + 1) y > 0 ih2 : ack x (ack (x + 1) y) > 0 ⊢ ack x (ack (x + 1) y) > 0 ``` The {leanRef}`ack x (ack (x + 1) y)` in the goal corresponds to the value returned in the third case of {leanRef}`ack`, when {leanRef}`ack` applied to {leanRef}`x + 1` and {leanRef}`y + 1` has been reduced. The inductive hypotheses {leanRef}`ih1 : ack (x + 1) y > 0` and {leanRef}`ih2 : ack x (ack (x + 1) y) > 0` correspond to the recursive calls, with {leanRef}`ih1` matching the nested recursive call. Once again, the induction hypothesis is suitable. Using {leanRef}`fun_induction ack` results in goals and induction hypotheses that match the recursive structure of {leanRef}`ack`. As a result, the proof can be a single line: ```lean def ack : Nat → Nat → Nat | 0, y => y+1 | x+1, 0 => ack x 1 | x+1, y+1 => ack x (ack (x+1) y) ------------- theorem ack_gt_zero : ack n m > 0 := by fun_induction ack <;> simp [*, ack] ``` :::leanFirst There is also a {leanRef}`fun_cases` tactic which is analogous to the {tactic}`cases` tactic. It generates a case for each branch in a function's control flow. Both it and {leanRef}`fun_induction` additionally provide assumptions that rule out the paths that were not taken. This function {leanRef}`f` represents a five-way Boolean disjunction: ```lean def f : Bool → Bool → Bool → Bool → Bool → Bool | true, _, _, _ , _ => true | _, true, _, _ , _ => true | _, _, true, _ , _ => true | _, _, _, true, _ => true | _, _, _, _, x => x ``` To prove that it is disjunction, the last case requires knowledge that none of the arguments are {leanRef}`true`. This knowledge is provided by the tactic: ```lean def f : Bool → Bool → Bool → Bool → Bool → Bool | true, _, _, _ , _ => true | _, true, _, _ , _ => true | _, _, true, _ , _ => true | _, _, _, true, _ => true | _, _, _, _, x => x ------ theorem f_or : f b1 b2 b3 b4 b5 = (b1 || b2 || b3 || b4 || b5) := by fun_cases f -- ^ PROOF_STATE: fOrAll all_goals sorry ``` ::: Each case includes an assumption that rules out the prior cases: ```proofState fOrAll case case1 b2 : Bool b3 : Bool b4 : Bool b5 : Bool ⊢ true = (true || b2 || b3 || b4 || b5) case case2 b1 : Bool b3 : Bool b4 : Bool b5 : Bool x✝ : b1 = true → False ⊢ true = (b1 || true || b3 || b4 || b5) case case3 b1 : Bool b2 : Bool b4 : Bool b5 : Bool x✝¹ : b1 = true → False x✝ : b2 = true → False ⊢ true = (b1 || b2 || true || b4 || b5) case case4 b1 : Bool b2 : Bool b3 : Bool b5 : Bool x✝² : b1 = true → False x✝¹ : b2 = true → False x✝ : b3 = true → False ⊢ true = (b1 || b2 || b3 || true || b5) case case5 b1 : Bool b2 : Bool b3 : Bool b4 : Bool b5 : Bool x✝³ : b1 = true → False x✝² : b2 = true → False x✝¹ : b3 = true → False x✝ : b4 = true → False ⊢ b5 = (b1 || b2 || b3 || b4 || b5) ``` :::leanFirst The {leanRef}`simp_all` tactic, which simplifies all the assumptions and the goal together, can dispatch all cases: ```lean def f : Bool → Bool → Bool → Bool → Bool → Bool | true, _, _, _ , _ => true | _, true, _, _ , _ => true | _, _, true, _ , _ => true | _, _, _, true, _ => true | _, _, _, _, x => x ------ theorem f_or : f b1 b2 b3 b4 b5 = (b1 || b2 || b3 || b4 || b5) := by fun_cases f <;> simp_all ``` ::: # Mutual Recursion %%% tag := "mutual-recursion" %%% Lean also supports mutual recursive definitions. The syntax is similar to that for mutual inductive types. Here is an example: ```lean mutual def even : Nat → Bool | 0 => true | n+1 => odd n def odd : Nat → Bool | 0 => false | n+1 => even n end example : even (a + 1) = odd a := by simp [even] example : odd (a + 1) = even a := by simp [odd] theorem even_eq_not_odd : ∀ a, even a = not (odd a) := by intro a; induction a . simp [even, odd] . simp [even, odd, *] ``` What makes this a mutual definition is that {leanRef}`even` is defined recursively in terms of {leanRef}`odd`, while {leanRef}`odd` is defined recursively in terms of {leanRef}`even`. Under the hood, this is compiled as a single recursive definition. The internally defined function takes, as argument, an element of a sum type, either an input to {leanRef}`even`, or an input to {leanRef}`odd`. It then returns an output appropriate to the input. To define that function, Lean uses a suitable well-founded measure. The internals are meant to be hidden from users; the canonical way to make use of such definitions is to use {leanRef}`simp` (or {tactic}`unfold`), as we did above. :::leanFirst Mutual recursive definitions also provide natural ways of working with mutual and nested inductive types. Recall the definition of {leanRef}`Even` and {leanRef}`Odd` as mutual inductive predicates as presented before. ```lean mutual inductive Even : Nat → Prop where | even_zero : Even 0 | even_succ : ∀ n, Odd n → Even (n + 1) inductive Odd : Nat → Prop where | odd_succ : ∀ n, Even n → Odd (n + 1) end ``` ::: :::leanFirst The constructors, {leanRef}`even_zero`, {leanRef}`even_succ`, and {leanRef}`odd_succ` provide positive means for showing that a number is even or odd. We need to use the fact that the inductive type is generated by these constructors to know that zero is not odd, and that the latter two implications reverse. As usual, the constructors are kept in a namespace that is named after the type being defined, and the command {leanRef}`open Even Odd` allows us to access them more conveniently. ```lean mutual inductive Even : Nat → Prop where | even_zero : Even 0 | even_succ : ∀ n, Odd n → Even (n + 1) inductive Odd : Nat → Prop where | odd_succ : ∀ n, Even n → Odd (n + 1) end ------ open Even Odd theorem not_odd_zero : ¬ Odd 0 := fun h => nomatch h theorem even_of_odd_succ : ∀ n, Odd (n + 1) → Even n | _, odd_succ n h => h theorem odd_of_even_succ : ∀ n, Even (n + 1) → Odd n | _, even_succ n h => h ``` ::: For another example, suppose we use a nested inductive type to define a set of terms inductively, so that a term is either a constant (with a name given by a string), or the result of applying a constant to a list of constants. ```lean inductive Term where | const : String → Term | app : String → List Term → Term ``` We can then use a mutual recursive definition to count the number of constants occurring in a term, as well as the number occurring in a list of terms. ```lean inductive Term where | const : String → Term | app : String → List Term → Term ------ namespace Term mutual def numConsts : Term → Nat | const _ => 1 | app _ cs => numConstsLst cs def numConstsLst : List Term → Nat | [] => 0 | c :: cs => numConsts c + numConstsLst cs end def sample := app "f" [app "g" [const "x"], const "y"] #eval numConsts sample end Term ``` :::leanFirst As a final example, we define a function {leanRef}`replaceConst a b e` that replaces a constant {leanRef (in := "replaceConst a b e")}`a` with {leanRef (in := "replaceConst a b e")}`b` in a term {leanRef (in := "replaceConst a b e")}`e`, and then prove the number of constants is the same. Note that, our proof uses mutual recursion (aka induction). ```lean inductive Term where | const : String → Term | app : String → List Term → Term namespace Term mutual def numConsts : Term → Nat | const _ => 1 | app _ cs => numConstsLst cs def numConstsLst : List Term → Nat | [] => 0 | c :: cs => numConsts c + numConstsLst cs end ------ mutual def replaceConst (a b : String) : Term → Term | const c => if a == c then const b else const c | app f cs => app f (replaceConstLst a b cs) def replaceConstLst (a b : String) : List Term → List Term | [] => [] | c :: cs => replaceConst a b c :: replaceConstLst a b cs end mutual theorem numConsts_replaceConst (a b : String) (e : Term) : numConsts (replaceConst a b e) = numConsts e := by match e with | const c => simp [replaceConst]; split <;> simp [numConsts] | app f cs => simp [replaceConst, numConsts, numConsts_replaceConstLst a b cs] theorem numConsts_replaceConstLst (a b : String) (es : List Term) : numConstsLst (replaceConstLst a b es) = numConstsLst es := by match es with | [] => simp [replaceConstLst, numConstsLst] | c :: cs => simp [replaceConstLst, numConstsLst, numConsts_replaceConst a b c, numConsts_replaceConstLst a b cs] end ``` ::: # Dependent Pattern Matching %%% tag := "dependent-pattern-matching" %%% ::::setup ``` inductive Vect (α : Type u) : Nat → Type u | nil : Vect α 0 | cons : α → {n : Nat} → Vect α n → Vect α (n+1) def map (f : α → β) : Vect α n → Vect β n | .nil => .nil | .cons x xs => .cons (f x) (map f xs) def zip : Vect α n → Vect β n → Vect (α × β) n | .nil, .nil => .nil | .cons x xs, .cons y ys => .cons (x, y) (zip xs ys) def unzip : Vect (α × β) n → (Vect α n × Vect β n) | .nil => (.nil, .nil) | .cons (x, y) xys => let (xs, ys) := unzip xys (.cons x xs, .cons y ys) def tail : Vect α (n + 1) → Vect α n | .cons x xs => xs variable {v : Vect α (n + 1)} open Vect ``` :::leanFirst All the examples of pattern matching we considered in the section on {ref "pattern-matching"}[pattern matching] can easily be written using {lit}`casesOn` and {lit}`recOn`. However, this is often not the case with indexed inductive families such as {leanRef}`Vect α n`, since case splits impose constraints on the values of the indices. Without the equation compiler, we would need a lot of boilerplate code to define very simple functions such as {lean}`map`, {lean}`zip`, and {lean}`unzip` using recursors. To understand the difficulty, consider what it would take to define a function {lean}`tail` which takes a vector {lean}`v : Vect α (n + 1)` and deletes the first element. ```lean inductive Vect (α : Type u) : Nat → Type u | nil : Vect α 0 | cons : α → {n : Nat} → Vect α n → Vect α (n + 1) ``` ::: A first thought might be to use the {name}`Vect.casesOn` function: ```signature Vect.casesOn.{u, v} {α : Type v} {motive : (a : Nat) → Vect α a → Sort u} {a : Nat} (t : Vect α a) (nil : motive 0 nil) (cons : (a : α) → {n : Nat} → (a_1 : Vect α n) → motive (n + 1) (cons a a_1)) : motive a t ``` But what value should we return in the {name}`nil` case? Something funny is going on: if {lean}`v` has type {lean}`Vect α (n + 1)`, it _can't_ be {name}`nil`, but it is not clear how to tell that to {name}`Vect.casesOn`. :::: One solution is to define an auxiliary function: ```lean set_option linter.unusedVariables false inductive Vect (α : Type u) : Nat → Type u | nil : Vect α 0 | cons : α → {n : Nat} → Vect α n → Vect α (n+1) namespace Vect ------ def tailAux (v : Vect α m) : m = n + 1 → Vect α n := Vect.casesOn (motive := fun x _ => x = n + 1 → Vect α n) v (fun h : 0 = n + 1 => Nat.noConfusion h) (fun (a : α) (m : Nat) (as : Vect α m) => fun (h : m + 1 = n + 1) => Nat.noConfusion h (fun h1 : m = n => h1 ▸ as)) def tail (v : Vect α (n+1)) : Vect α n := tailAux v rfl ----- end Vect ``` In the {leanRef}`nil` case, {leanRef (in := "m = n + 1")}`m` is instantiated to {leanRef}`0`, and {leanRef}`Nat.noConfusion` makes use of the fact that {leanRef}`0 = n + 1` cannot occur. Otherwise, {leanRef}`v` is of the form {lit}`cons `{leanRef}`a`{lit}` `{leanRef}`as`, and we can simply return {leanRef}`as`, after casting it from a vector of length {leanRef (in := "m + 1 = n + 1")}`m` to a vector of length {leanRef (in := "m + 1= n + 1")}`n`. The difficulty in defining {leanRef}`tail` is to maintain the relationships between the indices. The hypothesis {leanRef}`m = n + 1` in {leanRef}`tailAux` is used to communicate the relationship between {leanRef (in:="m = n + 1")}`n` and the index associated with the minor premise. Moreover, the {leanRef}`0 = n + 1` case is unreachable, and the canonical way to discard such a case is to use {leanRef}`Nat.noConfusion`. :::leanFirst The {leanRef}`tail` function is, however, easy to define using recursive equations, and the equation compiler generates all the boilerplate code automatically for us. Here are a number of similar examples: ```lean set_option linter.unusedVariables false inductive Vect (α : Type u) : Nat → Type u | nil : Vect α 0 | cons : α → {n : Nat} → Vect α n → Vect α (n+1) namespace Vect ------ def head : {n : Nat} → Vect α (n+1) → α | n, cons a as => a def tail : {n : Nat} → Vect α (n+1) → Vect α n | n, cons a as => as theorem eta : ∀ {n : Nat} (v : Vect α (n+1)), cons (head v) (tail v) = v | n, cons a as => rfl def map (f : α → β → γ) : {n : Nat} → Vect α n → Vect β n → Vect γ n | 0, nil, nil => nil | n+1, cons a as, cons b bs => cons (f a b) (map f as bs) def zip : {n : Nat} → Vect α n → Vect β n → Vect (α × β) n | 0, nil, nil => nil | n+1, cons a as, cons b bs => cons (a, b) (zip as bs) ------ end Vect ``` ::: Note that we can omit recursive equations for “unreachable” cases such as {leanRef}`head`{lit}` `{leanRef}`nil`. The automatically generated definitions for indexed families are far from straightforward. For example: ```lean set_option linter.unusedVariables false inductive Vect (α : Type u) : Nat → Type u | nil : Vect α 0 | cons : α → {n : Nat} → Vect α n → Vect α (n+1) namespace Vect ------- def zipWith (f : α → β → γ) : {n : Nat} → Vect α n → Vect β n → Vect γ n | 0, nil, nil => nil | n+1, cons a as, cons b bs => cons (f a b) (zipWith f as bs) #print zipWith #print zipWith.match_1 ------ end Vect ``` :::setup ``` inductive Vect (α : Type u) : Nat → Type u | nil : Vect α 0 | cons : α → {n : Nat} → Vect α n → Vect α (n+1) ``` The {leanRef}`zipWith` function is even more tedious to define by hand than the {leanRef}`tail` function. We encourage you to try it, using {name}`Vect.recOn`, {name}`Vect.casesOn` and {name}`Vect.noConfusion`. ::: # Inaccessible Patterns %%% tag := "inaccessible-patterns" %%% Sometimes an argument in a dependent matching pattern is not essential to the definition, but nonetheless has to be included to specialize the type of the expression appropriately. Lean allows users to mark such subterms as _inaccessible_ for pattern matching. These annotations are essential, for example, when a term occurring in the left-hand side is neither a variable nor a constructor application, because these are not suitable targets for pattern matching. We can view such inaccessible patterns as “don't care” components of the patterns. You can declare a subterm inaccessible by writing {lit}`.(t)`. If the inaccessible pattern can be inferred, you can also write {lit}`_`. :::leanFirst The following example, we declare an inductive type that defines the property of “being in the image of {leanRef (in := "(f :")}`f`”. You can view an element of the type {leanRef}`ImageOf f b` as evidence that {leanRef (in := "ImageOf f b")}`b` is in the image of {leanRef (in := "ImageOf f b")}`f`, whereby the constructor {leanRef}`imf` is used to build such evidence. We can then define any function {leanRef (in := "inverse {f")}`f` with an “inverse” which takes anything in the image of {leanRef (in := "inverse {f")}`f` to an element that is mapped to it. The typing rules forces us to write {leanRef (in := ".(f a)")}`f a` for the first argument, but this term is neither a variable nor a constructor application, and plays no role in the pattern-matching definition. To define the function {leanRef}`inverse` below, we _have to_ mark {leanRef (in := ".(f a)")}`f a` inaccessible. ```lean inductive ImageOf {α β : Type u} (f : α → β) : β → Type u where | imf : (a : α) → ImageOf f (f a) open ImageOf def inverse {f : α → β} : (b : β) → ImageOf f b → α | .(f a), imf a => a def inverse' {f : α → β} : (b : β) → ImageOf f b → α | _, imf a => a ``` ::: In the example above, the inaccessible annotation makes it clear that {leanRef (in := ".(f a)")}`f` is _not_ a pattern matching variable. :::leanFirst Inaccessible patterns can be used to clarify and control definitions that make use of dependent pattern matching. Consider the following definition of the function {leanRef}`Vect.add`, which adds two vectors of elements of a type, assuming that type has an associated addition function: ```lean inductive Vect (α : Type u) : Nat → Type u | nil : Vect α 0 | cons : α → {n : Nat} → Vect α n → Vect α (n+1) def Vect.add [Add α] : {n : Nat} → Vect α n → Vect α n → Vect α n | 0, nil, nil => nil | n+1, cons a as, cons b bs => cons (a + b) (add as bs) ``` ::: The argument {leanRef}`{n : Nat}` appear after the colon, because it cannot be held fixed throughout the definition. When implementing this definition, the equation compiler starts with a case distinction as to whether the first argument is {leanRef}`0` or of the form {leanRef}`n+1`. This is followed by nested case splits on the next two arguments, and in each case the equation compiler rules out the cases are not compatible with the first pattern. But, in fact, a case split is not required on the first argument; the {lit}`casesOn` eliminator for {leanRef}`Vect` automatically abstracts this argument and replaces it by {leanRef}`0` and {leanRef}`n + 1` when we do a case split on the second argument. Using inaccessible patterns, we can prompt the equation compiler to avoid the case split on {leanRef}`n`. ```lean inductive Vect (α : Type u) : Nat → Type u | nil : Vect α 0 | cons : α → {n : Nat} → Vect α n → Vect α (n+1) namespace Vect ------ def add [Add α] : {n : Nat} → Vect α n → Vect α n → Vect α n | .(_), nil, nil => nil | .(_), cons a as, cons b bs => cons (a + b) (add as bs) ------- end Vect ``` Marking the position as an inaccessible pattern tells the equation compiler first, that the form of the argument should be inferred from the constraints posed by the other arguments, and, second, that the first argument should _not_ participate in pattern matching. The inaccessible pattern {leanRef}`.(_)` can be written as {lit}`_` for convenience. ```lean inductive Vect (α : Type u) : Nat → Type u | nil : Vect α 0 | cons : α → {n : Nat} → Vect α n → Vect α (n+1) namespace Vect ------ def add [Add α] : {n : Nat} → Vect α n → Vect α n → Vect α n | _, nil, nil => nil | _, cons a as, cons b bs => cons (a + b) (add as bs) ------- end Vect ``` As we mentioned above, the argument {leanRef}`{n : Nat}` is part of the pattern matching, because it cannot be held fixed throughout the definition. Rather than requiring that these discriminants be provided explicitly, Lean implicitly includes these extra discriminants automatically for us. ```lean inductive Vect (α : Type u) : Nat → Type u | nil : Vect α 0 | cons : α → {n : Nat} → Vect α n → Vect α (n+1) namespace Vect ------ def add [Add α] {n : Nat} : Vect α n → Vect α n → Vect α n | nil, nil => nil | cons a as, cons b bs => cons (a + b) (add as bs) ------- end Vect ``` When combined with the _auto bound implicits_ feature, you can simplify the declare further and write: ```lean inductive Vect (α : Type u) : Nat → Type u | nil : Vect α 0 | cons : α → {n : Nat} → Vect α n → Vect α (n+1) namespace Vect ------ def add [Add α] : Vect α n → Vect α n → Vect α n | nil, nil => nil | cons a as, cons b bs => cons (a + b) (add as bs) ------- end Vect ``` Using these new features, you can write the other vector functions defined in the previous sections more compactly as follows: ```lean set_option linter.unusedVariables false inductive Vect (α : Type u) : Nat → Type u | nil : Vect α 0 | cons : α → {n : Nat} → Vect α n → Vect α (n+1) namespace Vect ------ def head : Vect α (n+1) → α | cons a as => a def tail : Vect α (n+1) → Vect α n | cons a as => as theorem eta : (v : Vect α (n+1)) → cons (head v) (tail v) = v | cons a as => rfl def map (f : α → β → γ) : Vect α n → Vect β n → Vect γ n | nil, nil => nil | cons a as, cons b bs => cons (f a b) (map f as bs) def zip : Vect α n → Vect β n → Vect (α × β) n | nil, nil => nil | cons a as, cons b bs => cons (a, b) (zip as bs) ------- end Vect ``` # Match Expressions %%% tag := "match-expressions" %%% Lean also provides a compiler for {kw}`match`-{kw}`with` expressions found in many functional languages: ```lean set_option linter.unusedVariables false ------ def isNotZero (m : Nat) : Bool := match m with | 0 => false | n + 1 => true ``` This does not look very different from an ordinary pattern matching definition, but the point is that a {kw}`match` can be used anywhere in an expression, and with arbitrary arguments. ```lean set_option linter.unusedVariables false ------- def isNotZero (m : Nat) : Bool := match m with | 0 => false | n + 1 => true def filter (p : α → Bool) : List α → List α | [] => [] | a :: as => match p a with | true => a :: filter p as | false => filter p as example : filter isNotZero [1, 0, 0, 3, 0] = [1, 3] := rfl ``` Here is another example: ```lean def foo (n : Nat) (b c : Bool) := 5 + match n - 5, b && c with | 0, true => 0 | m + 1, true => m + 7 | 0, false => 5 | m + 1, false => m + 3 #eval foo 7 true false example : foo 7 true false = 9 := rfl ``` Lean uses the {kw}`match` construct internally to implement pattern-matching in all parts of the system. Thus, all four of these definitions have the same net effect: ```lean def bar₁ : Nat × Nat → Nat | (m, n) => m + n def bar₂ (p : Nat × Nat) : Nat := match p with | (m, n) => m + n def bar₃ : Nat × Nat → Nat := fun (m, n) => m + n def bar₄ (p : Nat × Nat) : Nat := let (m, n) := p; m + n ``` These variations are equally useful for destructing propositions: ```lean variable (p q : Nat → Prop) example : (∃ x, p x) → (∃ y, q y) → ∃ x y, p x ∧ q y | ⟨x, px⟩, ⟨y, qy⟩ => ⟨x, y, px, qy⟩ example (h₀ : ∃ x, p x) (h₁ : ∃ y, q y) : ∃ x y, p x ∧ q y := match h₀, h₁ with | ⟨x, px⟩, ⟨y, qy⟩ => ⟨x, y, px, qy⟩ example : (∃ x, p x) → (∃ y, q y) → ∃ x y, p x ∧ q y := fun ⟨x, px⟩ ⟨y, qy⟩ => ⟨x, y, px, qy⟩ example (h₀ : ∃ x, p x) (h₁ : ∃ y, q y) : ∃ x y, p x ∧ q y := let ⟨x, px⟩ := h₀ let ⟨y, qy⟩ := h₁ ⟨x, y, px, qy⟩ ``` # Exercises %%% tag := none %%% ```setup open List variable {xs : List α} {n : Nat} ``` 1. Open a namespace {lit}`Hidden` to avoid naming conflicts, and use the equation compiler to define addition, multiplication, and exponentiation on the natural numbers. Then use the equation compiler to derive some of their basic properties. 2. Similarly, use the equation compiler to define some basic operations on lists (like the {lean}`reverse` function) and prove theorems about lists by induction (such as the fact that {lean}`reverse (reverse xs) = xs` for any list {lean}`xs`). 3. Define your own function to carry out course-of-value recursion on the natural numbers. Similarly, see if you can figure out how to define {name}`WellFounded.fix` on your own. 4. Following the examples in the section on {ref "dependent-pattern-matching"}[dependent pattern matching], define a function that will append two vectors. This is tricky; you will have to define an auxiliary function. 5. :::leanFirst Consider the following type of arithmetic expressions. The idea is that {leanRef}`var`{lit}` `{lean}`n` is a variable, {lit}`vₙ`, and {leanRef}`const`{lit}` `{lean}`n` is the constant whose value is {lean}`n`. ```lean inductive Expr where | const : Nat → Expr | var : Nat → Expr | plus : Expr → Expr → Expr | times : Expr → Expr → Expr deriving Repr open Expr def sampleExpr : Expr := plus (times (var 0) (const 7)) (times (const 2) (var 1)) ``` ::: Here {leanRef}`sampleExpr` represents {lit}`(v₀ * 7) + (2 * v₁)`. :::leanFirst Write a function that evaluates such an expression, evaluating each {leanRef}`var n` to {leanRef}`v n`. ```lean inductive Expr where | const : Nat → Expr | var : Nat → Expr | plus : Expr → Expr → Expr | times : Expr → Expr → Expr deriving Repr open Expr def sampleExpr : Expr := plus (times (var 0) (const 7)) (times (const 2) (var 1)) ------ def eval (v : Nat → Nat) : Expr → Nat | const n => sorry | var n => v n | plus e₁ e₂ => sorry | times e₁ e₂ => sorry def sampleVal : Nat → Nat | 0 => 5 | 1 => 6 | _ => 0 -- Try it out. You should get 47 here. -- #eval eval sampleVal sampleExpr ``` ::: :::leanFirst Implement “constant fusion,” a procedure that simplifies subterms like {lean}`5 + 7` to {lean}`12`. Using the auxiliary function {leanRef}`simpConst`, define a function “fuse”: to simplify a plus or a times, first simplify the arguments recursively, and then apply {leanRef}`simpConst` to try to simplify the result. ```lean inductive Expr where | const : Nat → Expr | var : Nat → Expr | plus : Expr → Expr → Expr | times : Expr → Expr → Expr deriving Repr open Expr def eval (v : Nat → Nat) : Expr → Nat | const n => sorry | var n => v n | plus e₁ e₂ => sorry | times e₁ e₂ => sorry ------ def simpConst : Expr → Expr | plus (const n₁) (const n₂) => const (n₁ + n₂) | times (const n₁) (const n₂) => const (n₁ * n₂) | e => e def fuse : Expr → Expr := sorry theorem simpConst_eq (v : Nat → Nat) : ∀ e : Expr, eval v (simpConst e) = eval v e := sorry theorem fuse_eq (v : Nat → Nat) : ∀ e : Expr, eval v (fuse e) = eval v e := sorry ``` ::: The last two theorems show that the definitions preserve the value. ================================================ FILE: book/TPiL/InductiveTypes.lean ================================================ import VersoManual import TPiL.Examples open Verso.Genre open Verso.Genre.Manual hiding tactic open TPiL #doc (Manual) "Inductive Types" => %%% tag := "inductive-types" %%% :::setup ``` variable {α : Sort u} {β : Sort v} ``` We have seen that Lean's formal foundation includes basic types, {lean}`Prop`, {lean}`Type 0`, {lean}`Type 1`, {lean}`Type 2`, ..., and allows for the formation of dependent function types, {lean}`(x : α) → β`. In the examples, we have also made use of additional types like {lean}`Bool`, {lean}`Nat`, and {lean}`Int`, and type constructors, like {lean}`List`, and product, {lit}`×`. In fact, in Lean's library, every concrete type other than the universes and every type constructor other than dependent arrows is an instance of a general family of type constructions known as _inductive types_. It is remarkable that it is possible to construct a substantial edifice of mathematics based on nothing more than the type universes, dependent arrow types, and inductive types; everything else follows from those. ::: Intuitively, an inductive type is built up from a specified list of constructors. In Lean, the syntax for specifying such a type is as follows: :::setup ``` variable {α β ω : Type} inductive Foo where | constructor₁ : α → Foo | constructor₂ : β → Foo | constructorₙ : ω → Foo ``` ``` inductive Foo where | constructor₁ : ... → Foo | constructor₂ : ... → Foo ... | constructorₙ : ... → Foo ``` The intuition is that each constructor specifies a way of building new objects of {lean}`Foo`, possibly from previously constructed values. The type {lean}`Foo` consists of nothing more than the objects that are constructed in this way. We will see below that the arguments of the constructors can include objects of type {lean}`Foo`, subject to a certain “positivity” constraint, which guarantees that elements of {lean}`Foo` are built from the bottom up. Roughly speaking, each {lit}`...` can be any arrow type constructed from {lean}`Foo` and previously defined types, in which {lean}`Foo` appears, if at all, only as the “target” of the dependent arrow type. ::: We will provide a number of examples of inductive types. We will also consider slight generalizations of the scheme above, to mutually defined inductive types, and so-called _inductive families_. As with the logical connectives, every inductive type comes with introduction rules, which show how to construct an element of the type, and elimination rules, which show how to “use” an element of the type in another construction. The analogy to the logical connectives should not come as a surprise; as we will see below, they, too, are examples of inductive type constructions. You have already seen the introduction rules for an inductive type: they are just the constructors that are specified in the definition of the type. The elimination rules provide for a principle of recursion on the type, which includes, as a special case, a principle of induction as well. In the next chapter, we will describe Lean's function definition package, which provides even more convenient ways to define functions on inductive types and carry out inductive proofs. But because the notion of an inductive type is so fundamental, we feel it is important to start with a low-level, hands-on understanding. We will start with some basic examples of inductive types, and work our way up to more elaborate and complex examples. # Enumerated Types %%% tag := "enumerated-types" %%% The simplest kind of inductive type is a type with a finite, enumerated list of elements. ```lean inductive Weekday where | sunday : Weekday | monday : Weekday | tuesday : Weekday | wednesday : Weekday | thursday : Weekday | friday : Weekday | saturday : Weekday ``` The {kw}`inductive` command creates a new type, {leanRef}`Weekday`. The constructors all live in the {lit}`Weekday` namespace. ```lean inductive Weekday where | sunday : Weekday | monday : Weekday | tuesday : Weekday | wednesday : Weekday | thursday : Weekday | friday : Weekday | saturday : Weekday ------ #check Weekday.sunday #check Weekday.monday open Weekday #check sunday #check monday ``` You can omit {leanRef}`: Weekday` when declaring the {leanRef}`Weekday` inductive type. ```lean inductive Weekday where | sunday | monday | tuesday | wednesday | thursday | friday | saturday ``` :::setup ``` inductive Weekday where | sunday | monday | tuesday | wednesday | thursday | friday | saturday ``` Think of {leanRef}`sunday`, {leanRef}`monday`, ... , {leanRef}`saturday` as being distinct elements of {leanRef}`Weekday`, with no other distinguishing properties. The elimination principle, {name}`Weekday.rec`, is defined along with the type {leanRef}`Weekday` and its constructors. It is also known as a _recursor_, and it is what makes the type “inductive”: it allows us to define a function on {leanRef}`Weekday` by assigning values corresponding to each constructor. The intuition is that an inductive type is exhaustively generated by the constructors, and has no elements beyond those they construct. ```signature Weekday.rec.{u} {motive : Weekday → Sort u} (sunday : motive Weekday.sunday) (monday : motive Weekday.monday) (tuesday : motive Weekday.tuesday) (wednesday : motive Weekday.wednesday) (thursday : motive Weekday.thursday) (friday : motive Weekday.friday) (saturday : motive Weekday.saturday) (t : Weekday) : motive t ``` ::: :::leanFirst We will use the {kw}`match` expression to define a function from {leanRef}`Weekday` to the natural numbers: ```lean inductive Weekday where | sunday : Weekday | monday : Weekday | tuesday : Weekday | wednesday : Weekday | thursday : Weekday | friday : Weekday | saturday : Weekday ------ open Weekday def numberOfDay (d : Weekday) : Nat := match d with | sunday => 1 | monday => 2 | tuesday => 3 | wednesday => 4 | thursday => 5 | friday => 6 | saturday => 7 #eval numberOfDay Weekday.sunday -- 1 #eval numberOfDay Weekday.monday -- 2 #eval numberOfDay Weekday.tuesday -- 3 ``` When using Lean's logic, the {kw}`match` expression is compiled using the _recursor_ {leanRef}`Weekday.rec` generated when you declare the inductive type. This ensures that the resulting term is well-defined in the type theory. For compiled code, {kw}`match` is compiled as in other functional programming languages. ::: ```lean inductive Weekday where | sunday : Weekday | monday : Weekday | tuesday : Weekday | wednesday : Weekday | thursday : Weekday | friday : Weekday | saturday : Weekday ------ open Weekday def numberOfDay (d : Weekday) : Nat := match d with | sunday => 1 | monday => 2 | tuesday => 3 | wednesday => 4 | thursday => 5 | friday => 6 | saturday => 7 set_option pp.all true #print numberOfDay #print numberOfDay.match_1 #print Weekday.casesOn #check @Weekday.rec ``` :::leanFirst When declaring an inductive datatype, you can use {leanRef}`deriving Repr` to instruct Lean to generate a function that converts {leanRef}`Weekday` objects into text. This function is used by the {kw}`#eval` command to display {leanRef}`Weekday` objects. If no {lean}`Repr` exists, {kw}`#eval` attempts to derive one on the spot. ```lean inductive Weekday where | sunday | monday | tuesday | wednesday | thursday | friday | saturday deriving Repr open Weekday #eval tuesday -- Weekday.tuesday ``` ::: It is often useful to group definitions and theorems related to a structure in a namespace with the same name. For example, we can put the {leanRef}`numberOfDay` function in the {lit}`Weekday` namespace. We are then allowed to use the shorter name when we open the namespace. :::leanFirst We can define functions from {leanRef}`Weekday` to {leanRef}`Weekday`: ```lean inductive Weekday where | sunday : Weekday | monday : Weekday | tuesday : Weekday | wednesday : Weekday | thursday : Weekday | friday : Weekday | saturday : Weekday deriving Repr ------ namespace Weekday def next (d : Weekday) : Weekday := match d with | sunday => monday | monday => tuesday | tuesday => wednesday | wednesday => thursday | thursday => friday | friday => saturday | saturday => sunday def previous (d : Weekday) : Weekday := match d with | sunday => saturday | monday => sunday | tuesday => monday | wednesday => tuesday | thursday => wednesday | friday => thursday | saturday => friday #eval next (next tuesday) -- Weekday.thursday #eval next (previous tuesday) -- Weekday.tuesday example : next (previous tuesday) = tuesday := rfl end Weekday ``` ::: :::leanFirst How can we prove the general theorem that {leanRef}`next (previous d) = d` for any Weekday {leanRef}`d`? You can use {kw}`match` to provide a proof of the claim for each constructor: ```lean inductive Weekday where | sunday : Weekday | monday : Weekday | tuesday : Weekday | wednesday : Weekday | thursday : Weekday | friday : Weekday | saturday : Weekday deriving Repr namespace Weekday def next (d : Weekday) : Weekday := match d with | sunday => monday | monday => tuesday | tuesday => wednesday | wednesday => thursday | thursday => friday | friday => saturday | saturday => sunday def previous (d : Weekday) : Weekday := match d with | sunday => saturday | monday => sunday | tuesday => monday | wednesday => tuesday | thursday => wednesday | friday => thursday | saturday => friday ------ theorem next_previous (d : Weekday) : next (previous d) = d := match d with | sunday => rfl | monday => rfl | tuesday => rfl | wednesday => rfl | thursday => rfl | friday => rfl | saturday => rfl ``` ::: Using a tactic proof, we can be even more concise: ```lean inductive Weekday where | sunday : Weekday | monday : Weekday | tuesday : Weekday | wednesday : Weekday | thursday : Weekday | friday : Weekday | saturday : Weekday deriving Repr namespace Weekday def next (d : Weekday) : Weekday := match d with | sunday => monday | monday => tuesday | tuesday => wednesday | wednesday => thursday | thursday => friday | friday => saturday | saturday => sunday def previous (d : Weekday) : Weekday := match d with | sunday => saturday | monday => sunday | tuesday => monday | wednesday => tuesday | thursday => wednesday | friday => thursday | saturday => friday ------ theorem next_previous (d : Weekday) : next (previous d) = d := by cases d <;> rfl ``` {ref "tactics-for-inductive-types"}[Tactics for Inductive Types] below will introduce additional tactics that are specifically designed to make use of inductive types. Notice that, under the {tech}[propositions-as-types] correspondence, we can use {kw}`match` to prove theorems as well as define functions. In other words, under the {tech}[propositions-as-types] correspondence, the proof by cases is a kind of definition by cases, where what is being “defined” is a proof instead of a piece of data. The {lean}`Bool` type in the Lean library is an instance of enumerated type. ```lean namespace Hidden ------ inductive Bool where | false : Bool | true : Bool ------ end Hidden ``` (To run these examples, we put them in a namespace called {lit}`Hidden`, so that a name like {leanRef}`Bool` does not conflict with the {lean}`Bool` in the standard library. This is necessary because these types are part of the Lean “prelude” that is automatically imported when the system is started.) As an exercise, you should think about what the introduction and elimination rules for these types do. As a further exercise, we suggest defining boolean operations {lean}`and`, {lean}`or`, {lean}`not` on the {leanRef}`Bool` type, and verifying common identities. Note that you can define a binary operation like {leanRef}`and` using {kw}`match`: ```lean namespace Hidden ------ def and (a b : Bool) : Bool := match a with | true => b | false => false ------- end Hidden ``` Similarly, most identities can be proved by introducing suitable {kw}`match`, and then using {lean}`rfl`. # Constructors with Arguments %%% tag := "constructors-with-arguments" %%% :::setup ``` variable (α : Type u) (β : Type v) (a : α) (b : β) ``` Enumerated types are a very special case of inductive types, in which the constructors take no arguments at all. In general, a “construction” can depend on data, which is then represented in the constructed argument. Consider the definitions of the product type and sum type in the library: ```lean namespace Hidden ------ inductive Prod (α : Type u) (β : Type v) | mk : α → β → Prod α β inductive Sum (α : Type u) (β : Type v) where | inl : α → Sum α β | inr : β → Sum α β ------- end Hidden ``` Consider what is going on in these examples. The product type has one constructor, {lean}`Prod.mk`, which takes two arguments. To define a function on {leanRef}`Prod α β`, we can assume the input is of the form {lean}`Prod.mk a b`, and we have to specify the output, in terms of {leanRef}`a` and {leanRef}`b`. We can use this to define the two projections for {leanRef}`Prod`. Remember that the standard library defines notation {lean}`α × β` for {leanRef}`Prod α β` and {lean}`(a, b)` for {lean}`Prod.mk a b`. ```lean namespace Hidden inductive Prod (α : Type u) (β : Type v) | mk : α → β → Prod α β ------ def fst {α : Type u} {β : Type v} (p : Prod α β) : α := match p with | Prod.mk a b => a def snd {α : Type u} {β : Type v} (p : Prod α β) : β := match p with | Prod.mk a b => b -------- end Hidden ``` The function {leanRef}`fst` takes a pair, {leanRef}`p`. The {kw}`match` interprets {leanRef}`p` as a pair, {leanRef}`Prod.mk a b`. Recall also from {ref "dependent-type-theory"}[Dependent Type Theory] that to give these definitions the greatest generality possible, we allow the types {leanRef}`α` and {leanRef}`β` to belong to any universe. ::: :::setup ``` universe u_2 u_3 u_1 variable (b : Bool) {α : Type u} {t1 t2 : α} ``` Here is another example where we use the recursor {lean (type := "{α : Type u_2} → {β : Type u_3} → {motive : α × β → Sort u_1} → (t : α × β) → ((fst : α) → (snd : β) → motive (fst, snd)) → motive t")}`Prod.casesOn` instead of {kw}`match`. ```lean def prod_example (p : Bool × Nat) : Nat := Prod.casesOn (motive := fun _ => Nat) p (fun b n => cond b (2 * n) (2 * n + 1)) #eval prod_example (true, 3) #eval prod_example (false, 3) ``` The argument {leanRef}`motive` is used to specify the type of the object you want to construct, and it is a function because it may depend on the pair. The {leanRef}`cond` function is a boolean conditional: {lean}`cond b t1 t2` returns {lean}`t1` if {lean}`b` is true, and {lean}`t2` otherwise. The function {leanRef}`prod_example` takes a pair consisting of a boolean, {leanRef}`b`, and a number, {leanRef}`n`, and returns either {leanRef}`2 * n` or {leanRef}`2 * n + 1` according to whether {leanRef}`b` is true or false. ::: :::setup ``` open Sum variable {α : Type u} {β : Type v} (a : α) (b : β) ``` In contrast, the sum type has _two_ constructors, {lean}`inl` and {lean}`inr` (for “insert left” and “insert right”), each of which takes _one_ (explicit) argument. To define a function on {lean}`Sum α β`, we have to handle two cases: either the input is of the form {lean}`inl a`, in which case we have to specify an output value in terms of {leanRef}`a`, or the input is of the form {lean}`inr b`, in which case we have to specify an output value in terms of {leanRef}`b`. ```lean def sum_example (s : Sum Nat Nat) : Nat := Sum.casesOn (motive := fun _ => Nat) s (fun n => 2 * n) (fun n => 2 * n + 1) #eval sum_example (Sum.inl 3) #eval sum_example (Sum.inr 3) ``` ::: :::setup ``` open Sum variable (n : Nat) ``` This example is similar to the previous one, but now an input to {leanRef}`sum_example` is implicitly either of the form {lean}`inl n` or {lean}`inr n`. In the first case, the function returns {lean}`2 * n`, and the second case, it returns {lean}`2 * n + 1`. ::: :::setup ``` variable {α β : Type} {a : α} {b : β} open Sum ``` Notice that the product type depends on parameters {lean}`α β : Type` which are arguments to the constructors as well as {lean}`Prod`. Lean detects when these arguments can be inferred from later arguments to a constructor or the return type, and makes them implicit in that case. In {ref "defining-the-natural-numbers"}[Defining the Natural Numbers] we will see what happens when the constructor of an inductive type takes arguments from the inductive type itself. What characterizes the examples we consider in this section is that each constructor relies only on previously specified types. Notice that a type with multiple constructors is disjunctive: an element of {lean}`Sum α β` is either of the form {lean}`inl a` _or_ of the form {lean}`inl b`. A constructor with multiple arguments introduces conjunctive information: from an element {lean}`Prod.mk a b` of {lean}`Prod α β` we can extract {leanRef}`a` _and_ {leanRef}`b`. An arbitrary inductive type can include both features, by having any number of constructors, each of which takes any number of arguments. ::: As with function definitions, Lean's inductive definition syntax will let you put named arguments to the constructors before the colon: ```lean namespace Hidden ------ inductive Prod (α : Type u) (β : Type v) where | mk (fst : α) (snd : β) : Prod α β inductive Sum (α : Type u) (β : Type v) where | inl (a : α) : Sum α β | inr (b : β) : Sum α β ------- end Hidden ``` The results of these definitions are essentially the same as the ones given earlier in this section. A type, like {leanRef}`Prod`, that has only one constructor is purely conjunctive: the constructor simply packs the list of arguments into a single piece of data, essentially a tuple where the type of subsequent arguments can depend on the type of the initial argument. We can also think of such a type as a “record” or a “structure”. In Lean, the keyword {kw}`structure` can be used to define such an inductive type as well as its projections, at the same time. ```lean namespace Hidden ------ structure Prod (α : Type u) (β : Type v) where mk :: fst : α snd : β ------- end Hidden ``` This example simultaneously introduces the inductive type, {leanRef}`Prod`, its constructor, {leanRef}`mk`, the usual eliminators ({lit}`rec` and {lit}`recOn`), as well as the projections, {leanRef}`fst` and {leanRef}`snd`, as defined above. If you do not name the constructor, Lean uses {lit}`mk` as a default. For example, the following defines a record to store a color as a triple of RGB values: ```lean structure Color where red : Nat green : Nat blue : Nat deriving Repr def yellow := Color.mk 255 255 0 #eval Color.red yellow ``` The definition of {leanRef}`yellow` forms the record with the three values shown, and the projection {leanRef}`Color.red` returns the red component. The {kw}`structure` command is especially useful for defining algebraic structures, and Lean provides substantial infrastructure to support working with them. Here, for example, is the definition of a semigroup: ```lean structure Semigroup where carrier : Type u mul : carrier → carrier → carrier mul_assoc : ∀ a b c, mul (mul a b) c = mul a (mul b c) ``` We will see more examples in the chapter on {ref "structures-and-records"}[structures and records]. :::leanFirst We have already discussed the dependent product type {leanRef}`Sigma`: ```lean namespace Hidden ------ inductive Sigma {α : Type u} (β : α → Type v) where | mk : (a : α) → β a → Sigma β ------- end Hidden ``` ::: Two more examples of inductive types in the library are the following: ```lean namespace Hidden ------ inductive Option (α : Type u) where | none : Option α | some : α → Option α inductive Inhabited (α : Type u) where | mk : α → Inhabited α ------- end Hidden ``` :::setup ``` variable {α : Type u} {β : Type v} {γ : Type u'} (b : β) (f : α → Option β) (a : α) ``` In the semantics of dependent type theory, there is no built-in notion of a partial function. Every element of a function type {lean}`α → β` or a dependent function type {lean}`(a : α) → β` is assumed to have a value at every input. The {lean}`Option` type provides a way of representing partial functions. An element of {lean}`Option β` is either {lean}`none` or of the form {lean}`some b`, for some value {lean}`b : β`. Thus we can think of an element {lean}`f` of the type {lean}`α → Option β` as being a partial function from {lean}`α` to {lean}`β`: for every {lean}`a : α`, {lean}`f a` either returns {lean (type := "Option β")}`none`, indicating {lean}`f a` is “undefined”, or {lean}`some b`. An element of {lean}`Inhabited α` is simply a witness to the fact that there is an element of {lean}`α`. Later, we will see that {lean}`Inhabited` is an example of a _type class_ in Lean: Lean can be instructed that suitable base types are inhabited, and can automatically infer that other constructed types are inhabited on that basis. As exercises, we encourage you to develop a notion of composition for partial functions from {lean}`α` to {lean}`β` and {lean}`β` to {lean}`γ`, and show that it behaves as expected. We also encourage you to show that {lean}`Bool` and {lean}`Nat` are inhabited, that the product of two inhabited types is inhabited, and that the type of functions to an inhabited type is inhabited. ::: # Inductively Defined Propositions %%% tag := "inductively-defined-propositions" %%% Inductively defined types can live in any type universe, including the bottom-most one, {lean}`Prop`. In fact, this is exactly how the logical connectives are defined. ```lean namespace Hidden ------ inductive False : Prop inductive True : Prop where | intro : True inductive And (a b : Prop) : Prop where | intro : a → b → And a b inductive Or (a b : Prop) : Prop where | inl : a → Or a b | inr : b → Or a b ------- end Hidden ``` :::setup ``` variable (p : Prop) (hp : p) (α : Type u) (β : Type v) ``` You should think about how these give rise to the introduction and elimination rules that you have already seen. There are rules that govern what the eliminator of an inductive type can eliminate _to_, that is, what kinds of types can be the target of a recursor. Roughly speaking, what characterizes inductive types in {lean}`Prop` is that one can only eliminate to other types in {lean}`Prop`. This is consistent with the understanding that if {lean}`p : Prop`, an element {lean}`hp : p` carries no data. There is a small exception to this rule, however, which we will discuss below, in {ref "inductive-families"}[Inductive Families]. Even the existential quantifier is inductively defined: ```lean namespace Hidden ------ inductive Exists {α : Sort u} (p : α → Prop) : Prop where | intro (w : α) (h : p w) : Exists p ------- end Hidden ``` Keep in mind that the notation {lean}`∃ x : α, p` is syntactic sugar for {lean}`Exists (fun x : α => p)`. The definitions of {lean}`False`, {lean}`True`, {lean}`And`, and {lean}`Or` are perfectly analogous to the definitions of {lean}`Empty`, {lean}`Unit`, {lean}`Prod`, and {lean}`Sum`. The difference is that the first group yields elements of {lean}`Prop`, and the second yields elements of {lean}`Type u` for some {leanRef}`u`. In a similar way, {leanRef}`∃ x : α, p` is a {lean}`Prop`-valued variant of {lean}`Σ x : α, β`. ::: ::::setup ``` variable (α : Type u) (β : Type v) (p : Prop) ``` This is a good place to mention another inductive type, denoted {lean}`{x : α // p}`, which is sort of a hybrid between {lean}`∃ x : α, p` and {lean}`Σ x : α, β`. ```lean namespace Hidden ------ inductive Subtype {α : Type u} (p : α → Prop) where | mk : (x : α) → p x → Subtype p ------- end Hidden ``` :::: ::::setup ``` variable {α : Type u} {p : α → Prop} ``` :::leanFirst In fact, in Lean, {leanRef}`Subtype` is defined using the structure command: ```lean namespace Hidden ------ structure Subtype {α : Sort u} (p : α → Prop) where val : α property : p val ------- end Hidden ``` The notation {lean}`{x : α // p x}` is syntactic sugar for {lean}`Subtype (fun x : α => p x)`. It is modeled after subset notation in set theory: the idea is that {leanRef}`{x : α // p x}` denotes the collection of elements of {leanRef}`α` that have property {leanRef}`p`. ::: :::: # Defining the Natural Numbers %%% tag := "defining-the-natural-numbers" %%% The inductively defined types we have seen so far are “flat”: constructors wrap data and insert it into a type, and the corresponding recursor unpacks the data and acts on it. Things get much more interesting when the constructors act on elements of the very type being defined. A canonical example is the type {lean}`Nat` of natural numbers: ```lean namespace Hidden ------ inductive Nat where | zero : Nat | succ : Nat → Nat ------- end Hidden ``` :::setup ``` open Nat variable {motive : Nat → Sort u} {f : (n : Nat) → motive n} {n : Nat} ``` There are two constructors. We start with {lean}`zero : Nat`; it takes no arguments, so we have it from the start. In contrast, the constructor {lean}`succ` can only be applied to a previously constructed {lean}`Nat`. Applying it to {lean}`zero` yields {lean}`succ zero : Nat`. Applying it again yields {lean}`succ (succ zero) : Nat`, and so on. Intuitively, {lean}`Nat` is the “smallest” type with these constructors, meaning that it is exhaustively (and freely) generated by starting with {lean}`zero` and applying {lean}`succ` repeatedly. As before, the recursor for {lean}`Nat` is designed to define a dependent function {lean}`f` from {lean}`Nat` to any domain, that is, an element {lean}`f` of {lean}`(n : Nat) → motive n` for some {lean}`motive : Nat → Sort u`. It has to handle two cases: the case where the input is {lean}`zero`, and the case where the input is of the form {lean}`succ n` for some {lean}`n : Nat`. In the first case, we simply specify a target value with the appropriate type, as before. In the second case, however, the recursor can assume that a value of {lean}`f` at {lean}`n` has already been computed. As a result, the next argument to the recursor specifies a value for {lean}`f (succ n)` in terms of {lean}`n` and {lean}`f n`. If we check the type of the recursor, you find the following: ::: ```signature Nat.rec.{u} : {motive : Nat → Sort u} → (zero : motive Nat.zero) → (succ : (n : Nat) → motive n → motive (Nat.succ n)) → (t : Nat) → motive t ``` The implicit argument, {leanRef}`motive`, is the codomain of the function being defined. In type theory it is common to say {leanRef}`motive` is the _motive_ for the elimination/recursion, since it describes the kind of object we wish to construct. The next two arguments specify how to compute the zero and successor cases, as described above. They are also known as the _minor premises_. Finally, the {leanRef}`t : Nat` is the input to the function. It is also known as the _major premise_. The {name}`Nat.recOn` is similar to {name}`Nat.rec` but the major premise occurs before the minor premises. ```signature Nat.recOn.{u} : {motive : Nat → Sort u} → (t : Nat) → (zero : motive Nat.zero) → (succ : ((n : Nat) → motive n → motive (Nat.succ n))) → motive t ``` :::setup ``` def add (m n : Nat) : Nat := match n with | Nat.zero => m | Nat.succ n => Nat.succ (add m n) variable {n m : Nat} open Nat ``` Consider, for example, the addition function {lean}`add m n` on the natural numbers. Fixing {lean}`m`, we can define addition by recursion on {lean}`n`. In the base case, we set {lean}`add m zero` to {lean}`m`. In the successor step, assuming the value {lean}`add m n` is already determined, we define {lean}`add m (succ n)` to be {lean}`succ (add m n)`. ::: ```lean namespace Hidden ------ inductive Nat where | zero : Nat | succ : Nat → Nat deriving Repr def add (m n : Nat) : Nat := match n with | Nat.zero => m | Nat.succ n => Nat.succ (add m n) open Nat #eval add (succ (succ zero)) (succ zero) ------- end Hidden ``` It is useful to put such definitions into a namespace, {lean}`Nat`. We can then go on to define familiar notation in that namespace. The two defining equations for addition now hold definitionally: ```lean namespace Hidden inductive Nat where | zero : Nat | succ : Nat → Nat deriving Repr ------ namespace Nat def add (m n : Nat) : Nat := match n with | Nat.zero => m | Nat.succ n => Nat.succ (add m n) instance : Add Nat where add := add theorem add_zero (m : Nat) : m + zero = m := rfl theorem add_succ (m n : Nat) : m + succ n = succ (m + n) := rfl end Nat ------- end Hidden ``` We will explain how the {kw}`instance` command works in the {ref "type-classes"}[Type Classes] chapter. In the examples below, we will use Lean's version of the natural numbers. ::::leanFirst :::setup ``` variable {n : Nat} {motive : Nat → Sort u} {ih : motive n} ``` Proving a fact like {lean}`0 + n = n`, however, requires a proof by induction. As observed above, the induction principle is just a special case of the recursion principle, when the codomain {lean}`motive n` is an element of {lean}`Prop`. It represents the familiar pattern of an inductive proof: to prove {lean}`∀ n, motive n`, first prove {lean}`motive 0`, and then, for arbitrary {lean}`n`, assume {lean}`ih : motive n` and prove {lean}`motive (n + 1)`. ::: ```lean namespace Hidden ------ open Nat theorem zero_add (n : Nat) : 0 + n = n := Nat.recOn (motive := fun x => 0 + x = x) n (show 0 + 0 = 0 from rfl) (fun (n : Nat) (ih : 0 + n = n) => show 0 + (n + 1) = n + 1 from calc 0 + (n + 1) _ = (0 + n) + 1 := rfl _ = n + 1 := by rw [ih]) ------- end Hidden ``` :::: Notice that, once again, when {name}`Nat.recOn` is used in the context of a proof, it is really the induction principle in disguise. The {tactic}`rw` and {tactic}`simp` tactics tend to be very effective in proofs like these. In this case, each can be used to reduce the proof to: ```lean namespace Hidden ------ open Nat theorem zero_add (n : Nat) : 0 + n = n := Nat.recOn (motive := fun x => 0 + x = x) n rfl (fun n ih => by simp [ih]) ------- end Hidden ``` :::setup ``` variable (m n k : Nat) ``` As another example, let us prove the associativity of addition, {lean}`∀ m n k, m + n + k = m + (n + k)`. (The notation {leanRef}`+`, as we have defined it, associates to the left, so {leanRef}`m + n + k` is really {lean}`(m + n) + k`.) The hardest part is figuring out which variable to do the induction on. Since addition is defined by recursion on the second argument, {leanRef (in := "n k,")}`k` is a good guess, and once we make that choice the proof almost writes itself: ::: ```lean namespace Hidden ------ open Nat theorem add_assoc (m n k : Nat) : m + n + k = m + (n + k) := Nat.recOn (motive := fun k => m + n + k = m + (n + k)) k (show m + n + 0 = m + (n + 0) from rfl) (fun k (ih : m + n + k = m + (n + k)) => show m + n + (k + 1) = m + (n + (k + 1)) from calc m + n + (k + 1) _ = (m + n + k) + 1 := rfl _ = (m + (n + k)) + 1 := by rw [ih] _ = m + ((n + k) + 1) := rfl _ = m + (n + (k + 1)) := rfl) ------- end Hidden ``` Once again, you can reduce the proof to: ```lean open Nat theorem add_assoc (m n k : Nat) : m + n + k = m + (n + k) := Nat.recOn (motive := fun k => m + n + k = m + (n + k)) k rfl (fun k ih => by simp [add_succ (m + n) k, ih]; rfl) ``` Suppose we try to prove the commutativity of addition. Choosing induction on the second argument, we might begin as follows: ```lean open Nat theorem add_comm (m n : Nat) : m + n = n + m := Nat.recOn (motive := fun x => m + x = x + m) n (show m + 0 = 0 + m by rw [Nat.zero_add, Nat.add_zero]) (fun (n : Nat) (ih : m + n = n + m) => show m + succ n = succ n + m from calc m + succ n _ = succ (m + n) := rfl _ = succ (n + m) := by rw [ih] _ = succ n + m := sorry) ``` At this point, we see that we need another supporting fact, namely, that {leanRef}`succ (n + m)`{lit}` = `{leanRef}`succ n + m`. You can prove this by induction on {leanRef}`m`: ```lean open Nat theorem succ_add (n m : Nat) : succ n + m = succ (n + m) := Nat.recOn (motive := fun x => succ n + x = succ (n + x)) m (show succ n + 0 = succ (n + 0) from rfl) (fun (m : Nat) (ih : succ n + m = succ (n + m)) => show succ n + succ m = succ (n + succ m) from calc succ n + succ m _ = succ (succ n + m) := rfl _ = succ (succ (n + m)) := by rw [ih] _ = succ (n + succ m) := rfl) ``` You can then replace the {leanRef}`sorry` in the previous proof with {leanRef}`succ_add`. Yet again, the proofs can be compressed: ```lean namespace Hidden inductive Nat where | zero : Nat | succ : Nat → Nat deriving Repr def add (m n : Nat) : Nat := match n with | Nat.zero => m | Nat.succ n => Nat.succ (add m n) instance : Add Nat where add := add namespace Nat theorem add_zero (m : Nat) : m + zero = m := rfl theorem add_succ (m n : Nat) : m + succ n = succ (m + n) := rfl theorem zero_add (n : Nat) : zero + n = n := Nat.recOn (motive := fun x => zero + x = x) n rfl (fun n ih => by simpa [add_zero, add_succ]) end Nat ------ open Nat theorem succ_add (n m : Nat) : succ n + m = succ (n + m) := Nat.recOn (motive := fun x => succ n + x = succ (n + x)) m rfl (fun m ih => by simpa [add_succ (succ n)]) theorem add_comm (m n : Nat) : m + n = n + m := Nat.recOn (motive := fun x => m + x = x + m) n (by simp [add_zero, zero_add]) (fun m ih => by simp_all [succ_add, add_succ]) ------- end Hidden ``` # Other Recursive Data Types %%% tag := "other-recursive-data-types" %%% :::leanFirst Let us consider some more examples of inductively defined types. For any type, {leanRef}`α`, the type {leanRef}`List α` of lists of elements of {leanRef}`α` is defined in the library. ```lean namespace Hidden ------ inductive List (α : Type u) where | nil : List α | cons (h : α) (t : List α) : List α namespace List def append (as bs : List α) : List α := match as with | nil => bs | cons a as => cons a (append as bs) theorem nil_append (as : List α) : append nil as = as := rfl theorem cons_append (a : α) (as bs : List α) : append (cons a as) bs = cons a (append as bs) := rfl end List ------- end Hidden ``` A list of elements of type {leanRef}`α` is either the empty list, {leanRef}`nil`, or an element {leanRef}`h : α` followed by a list {leanRef}`t : List α`. The first element, {leanRef}`h`, is commonly known as the “head” of the list, and the remainder, {leanRef}`t`, is known as the “tail.” ::: As an exercise, prove the following: ```lean namespace Hidden inductive List (α : Type u) where | nil : List α | cons : α → List α → List α namespace List def append (as bs : List α) : List α := match as with | nil => bs | cons a as => cons a (append as bs) theorem nil_append (as : List α) : append nil as = as := rfl theorem cons_append (a : α) (as bs : List α) : append (cons a as) bs = cons a (append as bs) := rfl ------ theorem append_nil (as : List α) : append as nil = as := sorry theorem append_assoc (as bs cs : List α) : append (append as bs) cs = append as (append bs cs) := sorry ------- end List end Hidden ``` :::setup ``` universe u def length : {α : Type u} → List α → Nat := List.length def append : {α : Type u} → List α → List α → List α := List.append variable (as bs : List α) ``` Try also defining the function {lean}`length : {α : Type u} → List α → Nat` that returns the length of a list, and prove that it behaves as expected (for example, {lean}`length (append as bs) = length as + length bs`). ::: For another example, we can define the type of binary trees: ```lean inductive BinaryTree where | leaf : BinaryTree | node : BinaryTree → BinaryTree → BinaryTree ``` In fact, we can even define the type of countably branching trees: ```lean inductive CBTree where | leaf : CBTree | sup : (Nat → CBTree) → CBTree namespace CBTree def succ (t : CBTree) : CBTree := sup (fun _ => t) def toCBTree : Nat → CBTree | 0 => leaf | n+1 => succ (toCBTree n) def omega : CBTree := sup toCBTree end CBTree ``` # Tactics for Inductive Types %%% tag := "tactics-for-inductive-types" %%% Given the fundamental importance of inductive types in Lean, it should not be surprising that there are a number of tactics designed to work with them effectively. We describe some of them here. :::setup ``` variable {x : InductiveType} ``` The {tactic}`cases` tactic works on elements of an inductively defined type, and does what the name suggests: it decomposes the element according to each of the possible constructors. In its most basic form, it is applied to an element {lean}`x` in the local context. It then reduces the goal to cases in which {lean}`x` is replaced by each of the constructions. ::: ```lean example (p : Nat → Prop) (hz : p 0) (hs : ∀ n, p (Nat.succ n)) : ∀ n, p n := by intro n cases n . exact hz --^ PROOF_STATE: A . apply hs --^ PROOF_STATE: B ``` In the first branch, the proof state is: ```proofState A case zero p : Nat → Prop hz : p 0 hs : ∀ (n : Nat), p n.succ ⊢ p 0 ``` In the second branch, it is: ```proofState B case succ p : Nat → Prop hz : p 0 hs : ∀ (n : Nat), p n.succ n✝ : Nat ⊢ p (n✝ + 1) ``` :::leanFirst There are extra bells and whistles. For one thing, {leanRef}`cases` allows you to choose the names for each alternative using a {leanRef}`with` clause. In the next example, for example, we choose the name {leanRef}`m` for the argument to {leanRef}`succ`, so that the second case refers to {leanRef}`succ m`. More importantly, the cases tactic will detect any items in the local context that depend on the target variable. It reverts these elements, does the split, and reintroduces them. In the example below, notice that the hypothesis {leanRef}`h : n ≠ 0` becomes {leanRef}`h : 0 ≠ 0` in the first branch, and {leanRef}`h : m + 1 ≠ 0` in the second. ```lean (showProofStates := "C D") open Nat example (n : Nat) (h : n ≠ 0) : succ (pred n) = n := by cases n with | zero => -- ^ PROOF_STATE: C apply absurd rfl h | succ m => -- ^ PROOF_STATE: D rfl ``` ::: Notice that {leanRef}`cases` can be used to produce data as well as prove propositions. ```lean def f (n : Nat) : Nat := by cases n; exact 3; exact 7 example : f 0 = 3 := rfl example : f 5 = 7 := rfl ``` Once again, cases will revert, split, and then reintroduce dependencies in the context. ```lean def Tuple (α : Type) (n : Nat) := { as : List α // as.length = n } def f {n : Nat} (t : Tuple α n) : Nat := by cases n; exact 3; exact 7 def myTuple : Tuple Nat 3 := ⟨[0, 1, 2], rfl⟩ example : f myTuple = 7 := rfl ``` Here is an example of multiple constructors with arguments. ```lean inductive Foo where | bar1 : Nat → Nat → Foo | bar2 : Nat → Nat → Nat → Foo def silly (x : Foo) : Nat := by cases x with | bar1 a b => exact b | bar2 c d e => exact e ``` The alternatives for each constructor don't need to be solved in the order the constructors were declared. ```lean inductive Foo where | bar1 : Nat → Nat → Foo | bar2 : Nat → Nat → Nat → Foo ------ def silly (x : Foo) : Nat := by cases x with | bar2 c d e => exact e | bar1 a b => exact b ``` :::leanFirst The syntax of the {leanRef}`with` is convenient for writing structured proofs. Lean also provides a complementary {leanRef}`case` tactic, which allows you to focus on goal assign variable names. ```lean inductive Foo where | bar1 : Nat → Nat → Foo | bar2 : Nat → Nat → Nat → Foo ------ def silly (x : Foo) : Nat := by cases x case bar1 a b => exact b case bar2 c d e => exact e ``` ::: The {leanRef}`case` tactic is clever, in that it will match the constructor to the appropriate goal. For example, we can fill the goals above in the opposite order: ```lean inductive Foo where | bar1 : Nat → Nat → Foo | bar2 : Nat → Nat → Nat → Foo ------ def silly (x : Foo) : Nat := by cases x case bar2 c d e => exact e case bar1 a b => exact b ``` You can also use {leanRef}`cases` with an arbitrary expression. Assuming that expression occurs in the goal, the cases tactic will generalize over the expression, introduce the resulting universally quantified variable, and case on that. ```lean open Nat example (p : Nat → Prop) (hz : p 0) (hs : ∀ n, p (succ n)) (m k : Nat) : p (m + 3 * k) := by cases m + 3 * k exact hz -- goal is p 0 apply hs -- goal is a : Nat ⊢ p (succ a) ``` Think of this as saying “split on cases as to whether {leanRef}`m + 3 * k` is zero or the successor of some number.” The result is functionally equivalent to the following: ```lean (showProofStates := "Z S") open Nat example (p : Nat → Prop) (hz : p 0) (hs : ∀ n, p (succ n)) (m k : Nat) : p (m + 3 * k) := by generalize m + 3 * k = n cases n -- ^ PROOF_STATE: Z exact hz -- ^ PROOF_STATE: S apply hs ``` Notice that the expression {leanRef}`m + 3 * k` is erased by {leanRef}`generalize`; all that matters is whether it is of the form {leanRef}`0` or {leanRef}`n✝ + 1`. This form of {leanRef}`cases` will _not_ revert any hypotheses that also mention the expression in the equation (in this case, {leanRef}`m + 3 * k`). If such a term appears in a hypothesis and you want to generalize over that as well, you need to {tactic}`revert` it explicitly. If the expression you case on does not appear in the goal, the {tactic}`cases` tactic uses {tactic}`have` to put the type of the expression into the context. Here is an example: ```lean example (p : Prop) (m n : Nat) (h₁ : m < n → p) (h₂ : m ≥ n → p) : p := by cases Nat.lt_or_ge m n case inl hlt => exact h₁ hlt -- ^ PROOF_STATE: one case inr hge => exact h₂ hge -- ^ PROOF_STATE: two ``` The theorem {leanRef}`Nat.lt_or_ge m n` says {leanRef}`m < n`{lit}` ∨ `{leanRef}`m ≥ n`, and it is natural to think of the proof above as splitting on these two cases. In the first branch, we have the hypothesis {leanRef}`hlt : m < n`, and in the second we have the hypothesis {leanRef}`hge : m ≥ n`. The proof above is functionally equivalent to the following: ```lean example (p : Prop) (m n : Nat) (h₁ : m < n → p) (h₂ : m ≥ n → p) : p := by have h : m < n ∨ m ≥ n := Nat.lt_or_ge m n cases h case inl hlt => exact h₁ hlt case inr hge => exact h₂ hge ``` After the first two lines, we have {leanRef}`h : m < n ∨ m ≥ n` as a hypothesis, and we simply do cases on that. :::leanFirst Here is another example, where we use the decidability of equality on the natural numbers to split on the cases {leanRef}`m = n` and {leanRef}`m ≠ n`. ```lean #check Nat.sub_self example (m n : Nat) : m - n = 0 ∨ m ≠ n := by cases Decidable.em (m = n) with | inl heq => rw [heq]; apply Or.inl; exact Nat.sub_self n | inr hne => apply Or.inr; exact hne ``` ::: Remember that if you {kw}`open `{lit}`Classical`, you can use the law of the excluded middle for any proposition at all. But using type class inference (see {ref "type-classes"}[Type Classes]), Lean can actually find the relevant decision procedure, which means that you can use the case split in a computable function. :::leanFirst Just as the {leanRef}`cases` tactic can be used to carry out proof by cases, the {leanRef}`induction` tactic can be used to carry out proofs by induction. The syntax is similar to that of {leanRef}`cases`, except that the argument can only be a term in the local context. Here is an example: ```lean namespace Hidden ------ theorem zero_add (n : Nat) : 0 + n = n := by induction n with | zero => rfl | succ n ih => rw [Nat.add_succ, ih] ------- end Hidden ``` ::: :::leanFirst As with {leanRef}`cases`, we can use the {leanRef}`case` tactic instead of {leanRef}`with`. ```lean namespace Hidden ------ theorem zero_add (n : Nat) : 0 + n = n := by induction n case zero => rfl case succ n ih => rw [Nat.add_succ, ih] ------- end Hidden ``` ::: Here are some additional examples: :::TODO FIXME ::: ```lean namespace Hidden inductive Nat where | zero | succ : Nat → Nat def Nat.toNat : Nat → _root_.Nat | .zero => .zero | .succ n => .succ n.toNat def Nat.ofNat : _root_.Nat → Nat | .zero => .zero | .succ n => .succ (.ofNat n) def add (m n : Nat) : Nat := match n with | Nat.zero => m | Nat.succ n => Nat.succ (add m n) instance : Add Nat where add := add instance : OfNat Nat n where ofNat := .ofNat n @[simp] theorem zero_zero : (.zero : Nat) = 0 := rfl theorem add_zero (n : Nat) : n + 0 = n := rfl theorem add_succ (n k : Nat) : n + k.succ = (n + k).succ := rfl ------ open Nat theorem zero_add (n : Nat) : 0 + n = n := by induction n <;> simp [*, add_zero, add_succ] theorem succ_add (m n : Nat) : succ m + n = succ (m + n) := by induction n <;> simp [*, add_zero, add_succ] theorem add_comm (m n : Nat) : m + n = n + m := by induction n <;> simp [*, add_zero, add_succ, succ_add, zero_add] theorem add_assoc (m n k : Nat) : m + n + k = m + (n + k) := by induction k <;> simp [*, add_zero, add_succ] ------- end Hidden ``` The {leanRef}`induction` tactic also supports user-defined induction principles with multiple targets (aka major premises). This example uses {name}`Nat.mod.inductionOn`, which has the following signature: ```signature Nat.mod.inductionOn {motive : Nat → Nat → Sort u} (x y : Nat) (ind : ∀ x y, 0 < y ∧ y ≤ x → motive (x - y) y → motive x y) (base : ∀ x y, ¬(0 < y ∧ y ≤ x) → motive x y) : motive x y ``` ```lean example (x : Nat) {y : Nat} (h : y > 0) : x % y < y := by induction x, y using Nat.mod.inductionOn with | ind x y h₁ ih => rw [Nat.mod_eq_sub_mod h₁.2] exact ih h | base x y h₁ => have : ¬ 0 < y ∨ ¬ y ≤ x := Iff.mp (Decidable.not_and_iff_or_not ..) h₁ match this with | Or.inl h₁ => exact absurd h h₁ | Or.inr h₁ => have hgt : y > x := Nat.gt_of_not_le h₁ rw [← Nat.mod_eq_of_lt hgt] at hgt assumption ``` You can use the {kw}`match` notation in tactics too: ```lean example : p ∨ q → q ∨ p := by intro h match h with | Or.inl _ => apply Or.inr; assumption | Or.inr h2 => apply Or.inl; exact h2 ``` :::leanFirst As a convenience, pattern-matching has been integrated into tactics such as {leanRef}`intro` and {leanRef}`funext`. ```lean example : s ∧ q ∧ r → p ∧ r → q ∧ p := by intro ⟨_, ⟨hq, _⟩⟩ ⟨hp, _⟩ exact ⟨hq, hp⟩ example : (fun (x : Nat × Nat) (y : Nat × Nat) => x.1 + y.2) = (fun (x : Nat × Nat) (z : Nat × Nat) => z.2 + x.1) := by funext (a, b) (c, d) show a + d = d + a rw [Nat.add_comm] ``` ::: :::leanFirst We close this section with one last tactic that is designed to facilitate working with inductive types, namely, the {leanRef}`injection` tactic. By design, the elements of an inductive type are freely generated, which is to say, the constructors are injective and have disjoint ranges. The {leanRef}`injection` tactic is designed to make use of this fact: ```lean open Nat example (m n k : Nat) (h : succ (succ m) = succ (succ n)) : n + k = m + k := by injection h with h' injection h' with h'' rw [h''] ``` ::: The first instance of the tactic adds {leanRef}`h' : m.succ = n.succ` to the context, and the second adds {leanRef}`h'' : m = n`. The {leanRef}`injection` tactic also detects contradictions that arise when different constructors are set equal to one another, and uses them to close the goal. ```lean open Nat example (m n : Nat) (h : succ m = 0) : n = n + 7 := by injection h example (m n : Nat) (h : succ m = 0) : n = n + 7 := by contradiction example (h : 7 = 4) : False := by contradiction ``` As the second example shows, the {leanRef}`contradiction` tactic also detects contradictions of this form. # Inductive Families %%% tag := "inductive-families" %%% We are almost done describing the full range of inductive definitions accepted by Lean. So far, you have seen that Lean allows you to introduce inductive types with any number of recursive constructors. In fact, a single inductive definition can introduce an indexed _family_ of inductive types, in a manner we now describe. An inductive family is an indexed family of types defined by a simultaneous induction of the following form: ``` inductive foo : ... → Sort u where | constructor₁ : ... → foo ... | constructor₂ : ... → foo ... ... | constructorₙ : ... → foo ... ``` ::::setup ``` universe u ``` :::leanFirst In contrast to an ordinary inductive definition, which constructs an element of some {leanRef}`Sort u`, the more general version constructs a function {lit}`... → `{lean}`Sort u`, where “{lit}`...`” denotes a sequence of argument types, also known as _indices_. Each constructor then constructs an element of some member of the family. One example is the definition of {leanRef}`Vect α n`, the type of vectors of elements of {leanRef}`α` of length {leanRef}`n`: ```lean inductive Vect (α : Type u) : Nat → Type u where | nil : Vect α 0 | cons : α → {n : Nat} → Vect α n → Vect α (n + 1) ``` ::: :::: Notice that the {leanRef}`cons` constructor takes an element of {leanRef}`Vect α n` and returns an element of {leanRef}`Vect α (n + 1)`, thereby using an element of one member of the family to build an element of another. A more exotic example is given by the definition of the equality type in Lean: ```lean namespace Hidden ------ inductive Eq {α : Sort u} (a : α) : α → Prop where | refl : Eq a a ------- end Hidden ``` :::setup ``` variable (α : Sort u) (a : α) (x : α) ``` For each fixed {leanRef}`α : Sort u` and {leanRef}`a : α`, this definition constructs a family of types {lean}`Eq a x`, indexed by {lean}`x : α`. Notably, however, there is only one constructor, {leanRef}`refl`, which is an element of {leanRef}`Eq a a`. Intuitively, the only way to construct a proof of {lean}`Eq a x` is to use reflexivity, in the case where {lean}`x` is {lean}`a`. Note that {lean}`Eq a a` is the only inhabited type in the family of types {lean}`Eq a x`. The elimination principle generated by Lean is as follows: ::: ```lean set_option pp.proofs true -------- universe u v #check (@Eq.rec : {α : Sort u} → {a : α} → {motive : (x : α) → a = x → Sort v} → motive a rfl → {b : α} → (h : a = b) → motive b h) ``` It is a remarkable fact that all the basic axioms for equality follow from the constructor, {leanRef}`refl`, and the eliminator, {leanRef}`Eq.rec`. The definition of equality is atypical, however; see the discussion in {ref "axiomatic-details"}[Axiomatic Details]. The recursor {leanRef}`Eq.rec` is also used to define substitution: ```lean namespace Hidden ------ theorem subst {α : Type u} {a b : α} {p : α → Prop} (h₁ : Eq a b) (h₂ : p a) : p b := Eq.rec (motive := fun x _ => p x) h₂ h₁ ------- end Hidden ``` You can also define {leanRef}`subst` using {kw}`match`. ```lean namespace Hidden ------ theorem subst {α : Type u} {a b : α} {p : α → Prop} (h₁ : Eq a b) (h₂ : p a) : p b := match h₁ with | rfl => h₂ ------- end Hidden ``` Actually, Lean compiles the {kw}`match` expressions using a definition based on generated helpers such as {name}`Eq.casesOn` and {name}`Eq.ndrec`, which are themselves defined using {leanRef}`Eq.rec`. ```lean namespace Hidden ------ theorem subst {α : Type u} {a b : α} {p : α → Prop} (h₁ : a = b) (h₂ : p a) : p b := match h₁ with | rfl => h₂ set_option pp.all true #print subst #print subst.match_1_1 #print Eq.casesOn #print Eq.ndrec ------- end Hidden ``` Using the recursor or {kw}`match` with {leanRef}`h₁ : a = b`, we may assume {leanRef}`a` and {leanRef}`b` are the same, in which case, {leanRef}`p b` and {leanRef}`p a` are the same. :::leanFirst It is not hard to prove that {leanRef}`Eq` is symmetric and transitive. In the following example, we prove {leanRef}`symm` and leave as exercises the theorems {leanRef}`trans` and {leanRef}`congr` (congruence). ```lean namespace Hidden ------ variable {α β : Type u} {a b c : α} theorem symm (h : Eq a b) : Eq b a := match h with | rfl => rfl theorem trans (h₁ : Eq a b) (h₂ : Eq b c) : Eq a c := sorry theorem congr (f : α → β) (h : Eq a b) : Eq (f a) (f b) := sorry ------- end Hidden ``` ::: In the type theory literature, there are further generalizations of inductive definitions, for example, the principles of _induction-recursion_ and _induction-induction_. These are not supported by Lean. # Axiomatic Details %%% tag := "axiomatic-details" %%% We have described inductive types and their syntax through examples. This section provides additional information for those interested in the axiomatic foundations. We have seen that the constructor to an inductive type takes _parameters_—intuitively, the arguments that remain fixed throughout the inductive construction—and _indices_, the arguments parameterizing the family of types that is simultaneously under construction. Each constructor should have a type, where the argument types are built up from previously defined types, the parameter and index types, and the inductive family currently being defined. The requirement is that if the latter is present at all, it occurs only _strictly positively_. This means simply that any argument to the constructor in which it occurs is a dependent arrow type in which the inductive type under definition occurs only as the resulting type, where the indices are given in terms of constants and previous arguments. Since an inductive type lives in {leanRef}`Sort u` for some {leanRef}`u`, it is reasonable to ask _which_ universe levels {leanRef}`u` can be instantiated to. Each constructor {lit}`c` in the definition of a family {lit}`C` of inductive types is of the form ``` c : (a : α) → (b : β[a]) → C a p[a,b] ``` where {lit}`a` is a sequence of data type parameters, {lit}`b` is the sequence of arguments to the constructors, and {lit}`p[a, b]` are the indices, which determine which element of the inductive family the construction inhabits. (Note that this description is somewhat misleading, in that the arguments to the constructor can appear in any order as long as the dependencies make sense.) The constraints on the universe level of {lit}`C` fall into two cases, depending on whether or not the inductive type is specified to land in {lean}`Prop` (that is, {lean}`Sort 0`). Let us first consider the case where the inductive type is _not_ specified to land in {lean}`Prop`. Then the universe level {leanRef}`u` is constrained to satisfy the following: > For each constructor {lit}`c` as above, and each {lit}`βk[a]` in the sequence {lit}`β[a]`, if {lit}`βk[a] : Sort v`, we have {leanRef}`u` ≥ {leanRef}`v`. In other words, the universe level {leanRef}`u` is required to be at least as large as the universe level of each type that represents an argument to a constructor. When the inductive type is specified to land in {lean}`Prop`, there are no constraints on the universe levels of the constructor arguments. But these universe levels do have a bearing on the elimination rule. Generally speaking, for an inductive type in {lean}`Prop`, the motive of the elimination rule is required to be in {lean}`Prop`. There is an exception to this last rule: we are allowed to eliminate from an inductively defined {lean}`Prop` to an arbitrary {leanRef}`Sort` when there is only one constructor and each constructor argument is either in {lean}`Prop` or an index. The intuition is that in this case the elimination does not make use of any information that is not already given by the mere fact that the type of argument is inhabited. This special case is known as _singleton elimination_. We have already seen singleton elimination at play in applications of {name}`Eq.rec`, the eliminator for the inductively defined equality type. We can use an element {leanRef}`h : Eq a b` to cast an element {leanRef}`h₂ : p a` to {leanRef}`p b` even when {leanRef}`p a` and {leanRef}`p b` are arbitrary types, because the cast does not produce new data; it only reinterprets the data we already have. Singleton elimination is also used with heterogeneous equality and well-founded recursion, which will be discussed in a the chapter on {ref "well-founded-recursion-and-induction"}[induction and recursion]. # Mutual and Nested Inductive Types %%% tag := "mutual-and-nested-inductive-types" %%% We now consider two generalizations of inductive types that are often useful, which Lean supports by “compiling” them down to the more primitive kinds of inductive types described above. In other words, Lean parses the more general definitions, defines auxiliary inductive types based on them, and then uses the auxiliary types to define the ones we really want. Lean's equation compiler, described in the next chapter, is needed to make use of these types effectively. Nonetheless, it makes sense to describe the declarations here, because they are straightforward variations on ordinary inductive definitions. First, Lean supports _mutually defined_ inductive types. The idea is that we can define two (or more) inductive types at the same time, where each one refers to the other(s). ```lean mutual inductive Even : Nat → Prop where | even_zero : Even 0 | even_succ : (n : Nat) → Odd n → Even (n + 1) inductive Odd : Nat → Prop where | odd_succ : (n : Nat) → Even n → Odd (n + 1) end ``` In this example, two types are defined simultaneously: a natural number {leanRef}`n` is {leanRef}`Even` if it is {lean}`0` or one more than an {leanRef}`Odd` number, and {leanRef}`Odd` if it is one more than an {leanRef}`Even` number. In the exercises below, you are asked to spell out the details. :::leanFirst A mutual inductive definition can also be used to define the notation of a finite tree with nodes labelled by elements of {leanRef (in:="Tree (α")}`α`: ```lean mutual inductive Tree (α : Type u) where | node : α → TreeList α → Tree α inductive TreeList (α : Type u) where | nil : TreeList α | cons : Tree α → TreeList α → TreeList α end ``` ::: With this definition, one can construct an element of {leanRef}`Tree α` by giving an element of {leanRef}`α` together with a list of subtrees, possibly empty. The list of subtrees is represented by the type {leanRef}`TreeList α`, which is defined to be either the empty list, {leanRef}`nil`, or the {leanRef}`cons` of a tree and an element of {leanRef}`TreeList α`. :::leanFirst This definition is inconvenient to work with, however. It would be much nicer if the list of subtrees were given by the type {leanRef}`List (Tree α)`, especially since Lean's library contains a number of functions and theorems for working with lists. One can show that the type {leanRef}`TreeList α` is _isomorphic_ to {leanRef}`List (Tree α)`, but translating results back and forth along this isomorphism is tedious. In fact, Lean allows us to define the inductive type we really want: ```lean inductive Tree (α : Type u) where | mk : α → List (Tree α) → Tree α ``` ::: This is known as a _nested_ inductive type. It falls outside the strict specification of an inductive type given in the last section because {leanRef}`Tree` does not occur strictly positively among the arguments to {leanRef}`mk`, but, rather, nested inside the {leanRef}`List` type constructor. Lean then automatically builds the isomorphism between {leanRef}`TreeList α` and {leanRef}`List (Tree α)` in its kernel, and defines the constructors for {leanRef}`Tree` in terms of the isomorphism. # Exercises %%% tag := none %%% ```setup open Nat variable {n m : Nat} def length : List α → Nat | [] => 0 | _ :: xs => length xs + 1 def reverse : List α → List α := go [] where go (acc : List α) : List α → List α | [] => acc | x :: xs => go (x :: acc) xs variable {xs ys : List α} inductive Term where | const (n : Nat) | var (n : Nat) | plus (s t : Term) | times (s t : Term) open Term variable {s t : Term} ``` 1. Try defining other operations on the natural numbers, such as multiplication, the predecessor function (with {lean}`pred 0 = 0`), truncated subtraction (with {lean}`n - m = 0` when {lean}`m` is greater than or equal to {lean}`n`), and exponentiation. Then try proving some of their basic properties, building on the theorems we have already proved. Since many of these are already defined in Lean's core library, you should work within a namespace named {lit}`Hidden`, or something like that, in order to avoid name clashes. 2. Define some operations on lists, like a {lean}`length` function or the {lean}`reverse` function. Prove some properties, such as the following: a. {lean}`length (xs ++ ys) = length xs + length ys` b. {lean}`length (reverse xs) = length xs` c. {lean}`reverse (reverse xs) = xs` 3. Define an inductive data type consisting of terms built up from the following constructors: - {lean}`const n`, a constant denoting the natural number {lean}`n` - {lean}`var n`, a variable, numbered {lean}`n` - {lean}`plus s t`, denoting the sum of {leanRef}`s` and {leanRef}`t` - {lean}`times s t`, denoting the product of {leanRef}`s` and {leanRef}`t` Recursively define a function that evaluates any such term with respect to an assignment of values to the variables. 4. Similarly, define the type of propositional formulas, as well as functions on the type of such formulas: an evaluation function, functions that measure the complexity of a formula, and a function that substitutes another formula for a given variable. ================================================ FILE: book/TPiL/InteractingWithLean.lean ================================================ import VersoManual import TPiL.Examples open Verso.Genre Manual open TPiL #doc (Manual) "Interacting with Lean" => You are now familiar with the fundamentals of dependent type theory, both as a language for defining mathematical objects and a language for constructing proofs. The one thing you are missing is a mechanism for defining new data types. We will fill this gap in the next chapter, which introduces the notion of an _inductive data type_. But first, in this chapter, we take a break from the mechanics of type theory to explore some pragmatic aspects of interacting with Lean. Not all of the information found here will be useful to you right away. We recommend skimming this section to get a sense of Lean's features, and then returning to it as necessary. # Messages %%% tag := "messages" %%% Lean produces three kinds of messages: : Errors Errors are produced when an inconsistency in the code means that it can't be processed. Examples include syntax errors (e.g. a missing {lit}`)`) and type errors such as attempting to add a natural number to a function. : Warnings Warnings describe potential problems with the code, such as the presence of {lean}`sorry`. Unlike with errors, the code is not meaningless; however, warnings deserve careful attention. : Information Information doesn't indicate any problem with the code, and includes output from commands such as {kw}`#check` and {kw}`#eval`. Lean can check that a command produces the expected messages. If the messages match, then any errors are disregarded; this can be used to ensure that the right errors occur. If they don't, an error is produced. You can use the {kw}`#guard_msgs` command to indicate which messages are expected. Here is an example: ```lean /-- error: Type mismatch "Not a number" has type String but is expected to have type Nat -/ #guard_msgs in def x : Nat := "Not a number" ``` :::leanFirst Including a message category in parentheses after {leanRef}`#guard_msgs` causes it to check only the specified category, letting others through. In this example, {leanRef}`#eval` issues an error due to the presence of {lean}`sorry`, but the warning that is always issued for {lean}`sorry` is displayed as usual: ```lean /-- error: aborting evaluation since the expression depends on the 'sorry' axiom, which can lead to runtime instability and crashes. To attempt to evaluate anyway despite the risks, use the '#eval!' command. -/ #guard_msgs(error) in #eval (sorry : Nat) ``` ::: Without the configuration, both messages are captured: ```lean /-- error: aborting evaluation since the expression depends on the 'sorry' axiom, which can lead to runtime instability and crashes. To attempt to evaluate anyway despite the risks, use the '#eval!' command. --- warning: declaration uses 'sorry' -/ #guard_msgs in #eval (sorry : Nat) ``` Some examples in this book use {leanRef}`#guard_msgs` to indicate expected errors. # Importing Files %%% tag := "importing-files" %%% The goal of Lean's front end is to interpret user input, construct formal expressions, and check that they are well-formed and type-correct. Lean also supports the use of various editors, which provide continuous checking and feedback. More information can be found on the Lean [documentation pages](https://lean-lang.org/documentation/). The definitions and theorems in Lean's standard library are spread across multiple files. Users may also wish to make use of additional libraries, or develop their own projects across multiple files. When Lean starts, it automatically imports the contents of the library {lit}`Init` folder, which includes a number of fundamental definitions and constructions. As a result, most of the examples we present here work “out of the box.” If you want to use additional files, however, they need to be imported manually, via an {kw}`import` statement at the beginning of a file. The command > {kw}`import`{lit}` Bar.Baz.Blah` imports the file {lit}`Bar/Baz/Blah.olean`, where the descriptions are interpreted relative to the Lean _search path_. Information as to how the search path is determined can be found on the [documentation pages](https://lean-lang.org/documentation/). By default, it includes the standard library directory, and (in some contexts) the root of the user's local project. Importing is transitive. In other words, if you import {lit}`Foo` and {lit}`Foo` imports {lit}`Bar`, then you also have access to the contents of {lit}`Bar`, and do not need to import it explicitly. # More on Sections %%% tag := "more-on-sections" %%% Lean provides various sectioning mechanisms to help structure a theory. You saw in {ref "variables-and-sections"}[Variables and Sections] that the {kw}`section` command makes it possible not only to group together elements of a theory that go together, but also to declare variables that are inserted as arguments to theorems and definitions, as necessary. Remember that the point of the {kw}`variable` command is to declare variables for use in theorems, as in the following example: ```lean section variable (x y : Nat) def double := x + x #check double y #check double (2 * x) attribute [local simp] Nat.add_assoc Nat.add_comm Nat.add_left_comm theorem t1 : double (x + y) = double x + double y := by simp [double] #check t1 y #check t1 (2 * x) theorem t2 : double (x * y) = double x * y := by simp [double, Nat.add_mul] end ``` The definition of {leanRef}`double` does not have to declare {leanRef}`x` as an argument; Lean detects the dependence and inserts it automatically. Similarly, Lean detects the occurrence of {leanRef}`x` in {leanRef}`t1` and {leanRef}`t2`, and inserts it automatically there, too. Note that {leanRef}`double` does _not_ have {leanRef}`y` as argument. Variables are only included in declarations where they are actually used. # More on Namespaces %%% tag := "more-on-namespaces" %%% In Lean, identifiers are given by hierarchical _names_ like {lit}`Foo.Bar.baz`. We saw in {ref "namespaces"}[Namespaces] that Lean provides mechanisms for working with hierarchical names. The command {kw}`namespace`{lit}` Foo` causes {lit}`Foo` to be prepended to the name of each definition and theorem until {kw}`end`{lit}` Foo` is encountered. The command {kw}`open`{lit}` Foo` then creates temporary _aliases_ to definitions and theorems that begin with prefix {lit}`Foo`. ```lean namespace Foo def bar : Nat := 1 end Foo open Foo #check bar #check Foo.bar ``` The following definition ```lean def Foo.bar : Nat := 1 ``` is treated as a macro, and expands to ```lean namespace Foo def bar : Nat := 1 end Foo ``` Although the names of theorems and definitions have to be unique, the aliases that identify them do not. When we open a namespace, an identifier may be ambiguous. Lean tries to use type information to disambiguate the meaning in context, but you can always disambiguate by giving the full name. To that end, the string {lit}`_root_` is an explicit description of the empty prefix. ```lean def String.add (a b : String) : String := a ++ b def Bool.add (a b : Bool) : Bool := a != b def add (α β : Type) : Type := Sum α β open Bool open String -- This reference is ambiguous: -- #check add #check String.add -- String.add (a b : String) : String #check Bool.add -- Bool.add (a b : Bool) : Bool #check _root_.add -- _root_.add (α β : Type) : Type #check add "hello" "world" -- "hello".add "world" : String #check add true false -- true.add false : Bool #check add Nat Nat -- _root_.add Nat Nat : Type ``` We can prevent the shorter alias from being created by using the {kw}`protected` keyword: ```lean protected def Foo.bar : Nat := 1 open Foo /-- error: Unknown identifier `bar` -/ #guard_msgs in #check bar -- error #check Foo.bar ``` This is often used for names like {name}`Nat.rec` and {name}`Nat.recOn`, to prevent overloading of common names. The {leanRef}`open` command admits variations. The command ```lean open Nat (succ zero gcd) #check zero -- Nat.zero : Nat #eval gcd 15 6 -- 3 ``` creates aliases for only the identifiers listed. The command ```lean open Nat hiding succ gcd #check zero -- Nat.zero : Nat /-- error: Unknown identifier `gcd` -/ #guard_msgs in #eval gcd 15 6 -- error #eval Nat.gcd 15 6 -- 3 ``` creates aliases for everything in the {lit}`Nat` namespace _except_ the identifiers listed. ```lean open Nat renaming mul → times, add → plus #eval plus (times 2 2) 3 -- 7 ``` creates aliases renaming {lean}`Nat.mul` to {leanRef}`times` and {lean}`Nat.add` to {leanRef}`plus`. It is sometimes useful to {kw}`export` aliases from one namespace to another, or to the top level. The command ```lean export Nat (succ add sub) ``` creates aliases for {leanRef}`succ`, {leanRef}`add`, and {leanRef}`sub` in the current namespace, so that whenever the namespace is open, these aliases are available. If this command is used outside a namespace, the aliases are exported to the top level. # Attributes %%% tag := "attributes" %%% The main function of Lean is to translate user input to formal expressions that are checked by the kernel for correctness and then stored in the environment for later use. But some commands have other effects on the environment, either assigning attributes to objects in the environment, defining notation, or declaring instances of type classes, as described in the chapter on {ref "type-classes"}[type classes]. Most of these commands have global effects, which is to say, they remain in effect not only in the current file, but also in any file that imports it. However, such commands often support the {kw}`local` modifier, which indicates that they only have effect until the current {kw}`section` or {leanRef}`namespace` is closed, or until the end of the current file. In {ref "using-the-simplifier"}[Using the Simplifier], we saw that theorems can be annotated with the {attr}`[simp]` attribute, which makes them available for use by the simplifier. The following example defines the prefix relation on lists, proves that this relation is reflexive, and assigns the {attr}`[simp]` attribute to that theorem. ```lean def isPrefix (l₁ : List α) (l₂ : List α) : Prop := ∃ t, l₁ ++ t = l₂ @[simp] theorem List.isPrefix_self (as : List α) : isPrefix as as := ⟨[], by simp⟩ example : isPrefix [1, 2, 3] [1, 2, 3] := by simp ``` The simplifier then proves {leanRef}`isPrefix [1, 2, 3] [1, 2, 3]` by rewriting it to {lean}`True`. One can also assign the attribute any time after the definition takes place: ```lean def isPrefix (l₁ : List α) (l₂ : List α) : Prop := ∃ t, l₁ ++ t = l₂ ------ theorem List.isPrefix_self (as : List α) : isPrefix as as := ⟨[], by simp⟩ attribute [simp] List.isPrefix_self ``` In all these cases, the attribute remains in effect in any file that imports the one in which the declaration occurs. Adding the {kw}`local` modifier restricts the scope: ```lean def isPrefix (l₁ : List α) (l₂ : List α) : Prop := ∃ t, l₁ ++ t = l₂ ------ section theorem List.isPrefix_self (as : List α) : isPrefix as as := ⟨[], by simp⟩ attribute [local simp] List.isPrefix_self example : isPrefix [1, 2, 3] [1, 2, 3] := by simp end /-- error: `simp` made no progress -/ #guard_msgs in example : isPrefix [1, 2, 3] [1, 2, 3] := by simp ``` :::leanFirst For another example, we can use the {kw}`instance` command to assign the notation {lit}`≤` to the {leanRef}`isPrefix` relation. That command, which will be explained in the chapter on {ref "type-classes"}[type classes], works by assigning an {attr}`[instance]` attribute to the associated definition. ```lean def isPrefix (l₁ : List α) (l₂ : List α) : Prop := ∃ t, l₁ ++ t = l₂ instance : LE (List α) where le := isPrefix theorem List.isPrefix_self (as : List α) : as ≤ as := ⟨[], by simp⟩ ``` ::: That assignment can also be made local: ```lean def isPrefix (l₁ : List α) (l₂ : List α) : Prop := ∃ t, l₁ ++ t = l₂ ------ def instLe : LE (List α) := { le := isPrefix } section attribute [local instance] instLe example (as : List α) : as ≤ as := ⟨[], by simp⟩ end /-- error: failed to synthesize LE (List α) Hint: Additional diagnostic information may be available using the `set_option diagnostics true` command. -/ #guard_msgs in example (as : List α) : as ≤ as := ⟨[], by simp⟩ ``` In {ref "notation"}[Notation] below, we will discuss Lean's mechanisms for defining notation, and see that they also support the {kw}`local` modifier. However, in {ref "setting-options"}[Setting Options], we will discuss Lean's mechanisms for setting options, which does _not_ follow this pattern: options can _only_ be set locally, which is to say, their scope is always restricted to the current section or current file. # More on Implicit Arguments %%% tag := "more-on-implicit-arguments" %%% :::setup ``` variable (α : Type u) (β : α → Type v) (t : {x : α} → β x) ``` In {ref "implicit-arguments"}[Implicit Arguments], we saw that if Lean displays the type of a term {lean}`t` as {lean}`{x : α} → β x`, then the curly brackets indicate that {leanRef}`x` has been marked as an _implicit argument_ to {lean}`t`. This means that whenever you write {lean}`t`, a placeholder, or “hole,” is inserted, so that {lean}`t` is replaced by {lean}`@t _`. If you don't want that to happen, you have to write {lean}`@t` instead. ::: :::setup ``` def f (x : Nat) {y : Nat} (z : Nat) : Nat := x + y + z -- Equivalent: example := f 7 example := @f 7 _ ``` Notice that implicit arguments are inserted eagerly. Suppose we define a function {lean}`f : (x : Nat) → {y : Nat} → (z : Nat) → Nat`. Then, when we write the expression {lean}`f 7` without further arguments, it is parsed as {lean}`@f 7 _`. ::: :::setup ``` def f (x : Nat) {{y : Nat}} (z : Nat) : Nat := x + y + z -- Just f 7 example := f 7 -- These are equivalent: example := @f 7 _ 3 example := f 7 3 -- Alternative syntax: def f' (x : Nat) ⦃y : Nat⦄ (z : Nat) : Nat := x + y + z ``` Lean offers a weaker annotation which specifies that a placeholder should only be added _before_ a subsequent explicit argument. It can be written with double braces, so the type of {lean}`f` would be {lean}`f : (x : Nat) → {{y : Nat}} → (z : Nat) → Nat`. With this annotation, the expression {lean}`f 7` would be parsed as is, whereas {lean}`f 7 3` would be parsed as {lean}`@f 7 _ 3`, just as it would be with the strong annotation. This annotation can also be written as {lit}`⦃y : Nat⦄`, where the Unicode brackets are entered as {kbd}`\{{` and {kbd}`\}}`, respectively. ::: To illustrate the difference, consider the following example, which shows that a reflexive euclidean relation is both symmetric and transitive. ```lean def reflexive {α : Type u} (r : α → α → Prop) : Prop := ∀ (a : α), r a a def symmetric {α : Type u} (r : α → α → Prop) : Prop := ∀ {a b : α}, r a b → r b a def transitive {α : Type u} (r : α → α → Prop) : Prop := ∀ {a b c : α}, r a b → r b c → r a c def Euclidean {α : Type u} (r : α → α → Prop) : Prop := ∀ {a b c : α}, r a b → r a c → r b c theorem th1 {α : Type u} {r : α → α → Prop} (reflr : reflexive r) (euclr : Euclidean r) : symmetric r := fun {a b : α} => fun (h : r a b) => show r b a from euclr h (reflr _) theorem th2 {α : Type u} {r : α → α → Prop} (symmr : symmetric r) (euclr : Euclidean r) : transitive r := fun {a b c : α} => fun (rab : r a b) (rbc : r b c) => euclr (symmr rab) rbc theorem th3 {α : Type u} {r : α → α → Prop} (reflr : reflexive r) (euclr : Euclidean r) : transitive r := th2 (th1 reflr @euclr) @euclr variable (r : α → α → Prop) variable (euclr : Euclidean r) #check euclr ``` The results are broken down into small steps: {leanRef}`th1` shows that a relation that is reflexive and euclidean is symmetric, and {leanRef}`th2` shows that a relation that is symmetric and euclidean is transitive. Then {leanRef}`th3` combines the two results. But notice that we have to manually disable the implicit arguments in {leanRef}`euclr`, because otherwise too many implicit arguments are inserted. The problem goes away if we use weak implicit arguments: ```lean def reflexive {α : Type u} (r : α → α → Prop) : Prop := ∀ (a : α), r a a def symmetric {α : Type u} (r : α → α → Prop) : Prop := ∀ {{a b : α}}, r a b → r b a def transitive {α : Type u} (r : α → α → Prop) : Prop := ∀ {{a b c : α}}, r a b → r b c → r a c def Euclidean {α : Type u} (r : α → α → Prop) : Prop := ∀ {{a b c : α}}, r a b → r a c → r b c theorem th1 {α : Type u} {r : α → α → Prop} (reflr : reflexive r) (euclr : Euclidean r) : symmetric r := fun {a b : α} => fun (h : r a b) => show r b a from euclr h (reflr _) theorem th2 {α : Type u} {r : α → α → Prop} (symmr : symmetric r) (euclr : Euclidean r) : transitive r := fun {a b c : α} => fun (rab : r a b) (rbc : r b c) => euclr (symmr rab) rbc theorem th3 {α : Type u} {r : α → α → Prop} (reflr : reflexive r) (euclr : Euclidean r) : transitive r := th2 (th1 reflr euclr) euclr variable (r : α → α → Prop) variable (euclr : Euclidean r) #check euclr -- euclr : Euclidean r ``` There is a third kind of implicit argument that is denoted with square brackets, {lit}`[` and {lit}`]`. These are used for type classes, as explained in the chapter on {ref "type-classes"}[type classes]. # Notation %%% tag := "notation" %%% Identifiers in Lean can include any alphanumeric characters, including Greek characters (other than ∀ , Σ , and λ , which, as we have seen, have a special meaning in the dependent type theory). They can also include subscripts, which can be entered by typing {kbd}`\_` followed by the desired subscripted character. Lean's parser is extensible, which is to say, we can define new notation. Lean's syntax can be extended and customized by users at every level, ranging from basic “mixfix” notations to custom elaborators. In fact, all builtin syntax is parsed and processed using the same mechanisms and APIs open to users. In this section, we will describe and explain the various extension points. While introducing new notations is a relatively rare feature in programming languages and sometimes even frowned upon because of its potential to obscure code, it is an invaluable tool in formalization for expressing established conventions and notations of the respective field succinctly in code. Going beyond basic notations, Lean's ability to factor out common boilerplate code into (well-behaved) macros and to embed entire custom domain specific languages (DSLs) to textually encode subproblems efficiently and readably can be of great benefit to both programmers and proof engineers alike. ## Notations and Precedence %%% tag := "notations-and-precedence" %%% The most basic syntax extension commands allow introducing new (or overloading existing) prefix, infix, and postfix operators. ```lean infixl:65 " + " => HAdd.hAdd -- left-associative infix:50 " = " => Eq -- non-associative infixr:80 " ^ " => HPow.hPow -- right-associative prefix:100 "-" => Neg.neg postfix:max "⁻¹" => Inv.inv ``` After the initial command name describing the operator kind (its “{deftech}[fixity]”), we give the _parsing precedence_ of the operator preceded by a colon {lit}`:`, then a new or existing token surrounded by double quotes (the whitespace is used for pretty printing), then the function this operator should be translated to after the arrow {lit}`=>`. The precedence is a natural number describing how “tightly” an operator binds to its arguments, encoding the order of operations. We can make this more precise by looking at the commands the above unfold to: ```lean notation:65 lhs:65 " + " rhs:66 => HAdd.hAdd lhs rhs notation:50 lhs:51 " = " rhs:51 => Eq lhs rhs notation:80 lhs:81 " ^ " rhs:80 => HPow.hPow lhs rhs notation:100 "-" arg:100 => Neg.neg arg -- `max` is a shorthand for precedence 1024: notation:1024 arg:1024 "⁻¹" => Inv.inv arg ``` :::setup ``` variable {p : Nat} {a b c : α} [Add α] [Pow α α] ``` It turns out that all commands from the first code block are in fact command _macros_ translating to the more general {leanRef}`notation` command. We will learn about writing such macros below. Instead of a single token, the {leanRef}`notation` command accepts a mixed sequence of tokens and named term placeholders with precedences, which can be referenced on the right-hand side of {lit}`=>` and will be replaced by the respective term parsed at that position. A placeholder with precedence {lean}`p` accepts only notations with precedence at least {lean}`p` in that place. Thus the string {lean}`a + b + c` cannot be parsed as the equivalent of {lean}`a + (b + c)` because the right-hand side operand of an {leanRef}`infixl` notation has precedence one greater than the notation itself. In contrast, {leanRef}`infixr` reuses the notation's precedence for the right-hand side operand, so {lean}`a ^ b ^ c` _can_ be parsed as {lean}`a ^ (b ^ c)`. Note that if we used {leanRef}`notation` directly to introduce an infix notation like ::: ```lean def wobble : α → β → γ := sorry ------ notation:65 lhs:65 " ~ " rhs:65 => wobble lhs rhs ``` :::setup ``` variable (a : α) (b : β) (c : γ) def wobble : α → β → γ := sorry notation:65 lhs:65 " ~ " rhs:65 => wobble lhs rhs ``` where the precedences do not sufficiently determine associativity, Lean's parser will default to right associativity. More precisely, Lean's parser follows a local _longest parse_ rule in the presence of ambiguous grammars: when parsing the right-hand side of {lit}`a ~` in {lean}`a ~ b ~ c`, it will continue parsing as long as possible (as the current precedence allows), not stopping after {leanRef}`b` but parsing {leanRef}`~ c` as well. Thus the term is equivalent to {lean}`a ~ (b ~ c)`. ::: As mentioned above, the {leanRef}`notation` command allows us to define arbitrary _mixfix_ syntax freely mixing tokens and placeholders. ```lean set_option quotPrecheck false ------ notation:max "(" e ")" => e notation:10 Γ " ⊢ " e " : " τ => Typing Γ e τ ``` Placeholders without precedence default to {lit}`0`, i.e. they accept notations of any precedence in their place. If two notations overlap, we again apply the longest parse rule: ```lean notation:65 a " + " b:66 " + " c:66 => a + b - c #eval 1 + 2 + 3 -- 0 ``` The new notation is preferred to the binary notation since the latter, before chaining, would stop parsing after {leanRef}`1 + 2`. If there are multiple notations accepting the same longest parse, the choice will be delayed until elaboration, which will fail unless exactly one overload is type-correct. # Coercions %%% tag := "coercions" %%% In Lean, the type of natural numbers, {lean}`Nat`, is different from the type of integers, {lean}`Int`. But there is a function {lean}`Int.ofNat` that embeds the natural numbers in the integers, meaning that we can view any natural number as an integer, when needed. Lean has mechanisms to detect and insert _coercions_ of this sort. Coercions can be explicitly requested using the overloaded {lit}`↑` operator. ```lean variable (m n : Nat) variable (i j : Int) #check i + m -- i + ↑m : Int #check i + m + j -- i + ↑m + j : Int #check i + m + n -- i + ↑m + ↑n : Int ``` # Displaying Information %%% tag := "displaying-information" %%% There are a number of ways in which you can query Lean for information about its current state and the objects and theorems that are available in the current context. You have already seen two of the most common ones, {kw}`#check` and {kw}`#eval`. Remember that {kw}`#check` is often used in conjunction with the {lit}`@` operator, which makes all of the arguments to a theorem or definition explicit. In addition, you can use the {kw}`#print` command to get information about any identifier. If the identifier denotes a definition or theorem, Lean prints the type of the symbol, and its definition. If it is a constant or an axiom, Lean indicates that fact, and shows the type. ```lean -- examples with equality #check Eq #check @Eq #check Eq.symm #check @Eq.symm #print Eq.symm -- examples with And #check And #check And.intro #check @And.intro -- a user-defined function def foo {α : Type u} (x : α) : α := x #check foo #check @foo #print foo ``` # Setting Options %%% tag := "setting-options" %%% Lean maintains a number of internal variables that can be set by users to control its behavior. The syntax for doing so is as follows: {kw}`set_option`{lit}` ` One very useful family of options controls the way Lean's _pretty printer_ displays terms. The following options take an input of true or false: ``` pp.explicit : display implicit arguments pp.universes : display hidden universe parameters pp.notation : display output using defined notations ``` As an example, the following settings yield much longer output: ```lean set_option pp.explicit true set_option pp.universes true set_option pp.notation false #check 2 + 2 = 4 #reduce (fun x => x + 2) = (fun x => x + 3) #check (fun x => x + 1) 1 ``` The command {leanCommand}`set_option pp.all true` carries out these settings all at once, whereas {leanCommand}`set_option pp.all false` reverts to the previous values. Pretty printing additional information is often very useful when you are debugging a proof, or trying to understand a cryptic error message. Too much information can be overwhelming, though, and Lean's defaults are generally sufficient for ordinary interactions. :::comment ``` ``` ::: # Using the Library %%% tag := "using-the-library" %%% To use Lean effectively you will inevitably need to make use of definitions and theorems in the library. Recall that the {kw}`import` command at the beginning of a file imports previously compiled results from other files, and that importing is transitive; if you import {lit}`Foo` and {lit}`Foo` imports {lit}`Bar`, then the definitions and theorems from {lit}`Bar` are available to you as well. But the act of opening a namespace, which provides shorter names, does not carry over. In each file, you need to open the namespaces you wish to use. In general, it is important for you to be familiar with the library and its contents, so you know what theorems, definitions, notations, and resources are available to you. Below we will see that Lean's editor modes can also help you find things you need, but studying the contents of the library directly is often unavoidable. Lean's standard library can be found online, on GitHub: - [https://github.com/leanprover/lean4/tree/master/src/Init](https://github.com/leanprover/lean4/tree/master/src/Init) - [https://github.com/leanprover/lean4/tree/master/src/Std](https://github.com/leanprover/lean4/tree/master/src/Std) You can see the contents of these directories and files using GitHub's browser interface. If you have installed Lean on your own computer, you can find the library in the {lit}`lean` folder, and explore it with your file manager. Comment headers at the top of each file provide additional information. Lean's library developers follow general naming guidelines to make it easier to guess the name of a theorem you need, or to find it using tab completion in editors with a Lean mode that supports this, which is discussed in the next section. Identifiers are generally {lit}`camelCase`, and types are {lit}`CamelCase`. For theorem names, we rely on descriptive names where the different components are separated by {lit}`_`s. Often the name of theorem simply describes the conclusion: ```lean #check Nat.succ_ne_zero #check Nat.zero_add #check Nat.mul_one #check Nat.le_of_succ_le_succ ``` :::setup ``` open Nat ``` Remember that identifiers in Lean can be organized into hierarchical namespaces. For example, the theorem named {lean}`le_of_succ_le_succ` in the namespace {lit}`Nat` has full name {lean}`Nat.le_of_succ_le_succ`, but the shorter name is made available by the command {kw}`open`{lit}` Nat` (for names not marked as {kw}`protected`). We will see in the chapters on {ref "inductive-types"}[inductive types] and {ref "structures-and-records"}[structures and records] that defining structures and inductive data types in Lean generates associated operations, and these are stored in a namespace with the same name as the type under definition. For example, the product type comes with the following operations: ::: ```lean #check @Prod.mk #check @Prod.fst #check @Prod.snd #check @Prod.rec ``` The first is used to construct a pair, whereas the next two, {leanRef}`Prod.fst` and {leanRef}`Prod.snd`, project the two elements. The last, {leanRef}`Prod.rec`, provides another mechanism for defining functions on a product in terms of a function on the two components. Names like {leanRef}`Prod.rec` are _protected_, which means that one has to use the full name even when the {lit}`Prod` namespace is open. With the propositions as types correspondence, logical connectives are also instances of inductive types, and so we tend to use dot notation for them as well: ```lean #check @And.intro #check @And.casesOn #check @And.left #check @And.right #check @Or.inl #check @Or.inr #check @Or.elim #check @Exists.intro #check @Exists.elim #check @Eq.refl #check @Eq.subst ``` # Auto Bound Implicit Arguments %%% tag := "auto-bound-implicit-arguments" %%% :::leanFirst In the previous section, we have shown how implicit arguments make functions more convenient to use. However, functions such as {leanRef}`compose` are still quite verbose to define. Note that the universe polymorphic {leanRef}`compose` is even more verbose than the one previously defined. ```lean universe u v w def compose {α : Type u} {β : Type v} {γ : Type w} (g : β → γ) (f : α → β) (x : α) : γ := g (f x) ``` ::: :::leanFirst You can avoid the {kw}`universe` command by providing the universe parameters when defining {leanRef}`compose`. ```lean def compose.{u, v, w} {α : Type u} {β : Type v} {γ : Type w} (g : β → γ) (f : α → β) (x : α) : γ := g (f x) ``` ::: ::::leanFirst Lean 4 supports a new feature called _auto bound implicit arguments_. It makes functions such as {leanRef}`compose` much more convenient to write. When Lean processes the header of a declaration, any unbound identifier is automatically added as an implicit argument. With this feature we can write {leanRef}`compose` as :::TODO Update and check details ::: ```lean def compose (g : β → γ) (f : α → β) (x : α) : γ := g (f x) #check @compose -- @compose : {β : Sort u_1} → {γ : Sort u_2} → {α : Sort u_3} → (β → γ) → (α → β) → α → γ ``` Note that Lean inferred a more general type using {lean}`Sort` instead of {leanRef}`Type`. :::: Although we love this feature and use it extensively when implementing Lean, we realize some users may feel uncomfortable with it. Thus, you can disable it using the command {leanCommand}`set_option autoImplicit false`. ```lean set_option autoImplicit false /-- error: Unknown identifier `β` --- error: Unknown identifier `γ` --- error: Unknown identifier `α` --- error: Unknown identifier `β` --- error: Unknown identifier `α` --- error: Unknown identifier `γ` -/ #guard_msgs in def compose (g : β → γ) (f : α → β) (x : α) : γ := g (f x) ``` # Implicit Lambdas %%% tag := "implicit-lambdas" %%% :::TODO Update this text after archaeology ::: :::leanFirst When the expected type of an expression is a function that is awaiting implicit arguments, the elaborator automatically introduces the corresponding lambdas. For example, {leanRef}`pure`'s type states that the first argument is an implicit type {leanRef}`α`, but {leanRef}`ReaderT.pure`'s first argument is the reader monad's context type {leanRef}`ρ`. It is automatically surrounded with a {kw}`fun`{lit}` {α} => ...`, which allows the elaborator to correctly fill in the implicit arguments in the body. ```lean variable (ρ : Type) (m : Type → Type) [Monad m] ------ instance : Monad (ReaderT ρ m) where pure := ReaderT.pure bind := ReaderT.bind ``` ::: Users can disable the implicit lambda feature by using {lit}`@` or writing a lambda expression with {lit}`{}` or {lit}`[]` binder annotations. Here are few examples ```lean set_option linter.unusedVariables false namespace Ex2 ------ def id1 : {α : Type} → α → α := fun x => x def listId : List ({α : Type} → α → α) := (fun x => x) :: [] -- In this example, implicit lambda introduction has been disabled because -- we use `@` before {kw}`fun` def id2 : {α : Type} → α → α := @fun α (x : α) => id1 x def id3 : {α : Type} → α → α := @fun α x => id1 x def id4 : {α : Type} → α → α := fun x => id1 x -- In this example, implicit lambda introduction has been disabled -- because we used the binder annotation `{...}` def id5 : {α : Type} → α → α := fun {α} x => id1 x ------ end Ex2 ``` # Sugar for Simple Functions %%% tag := "sugar-for-simple-functions" %%% Lean includes a notation for describing simple functions using anonymous placeholders rather than {kw}`fun`. When {lit}`·` occurs as part of a term, the nearest enclosing parentheses become a function with the {lit}`·` as its argument. If the parentheses include multiple placeholders without other intervening parentheses, then they are made into arguments from left to right. Here are a few examples: ```lean namespace Ex3 ------ #check (· + 1) -- fun x => x + 1 : Nat → Nat #check (2 - ·) -- fun x => 2 - x : Nat → Nat #eval [1, 2, 3, 4, 5].foldl (· * ·) 1 -- 120 def f (x y z : Nat) := x + y + z #check (f · 1 ·) -- fun x1 x2 => f x1 1 x2 : Nat → Nat → Nat #eval [(1, 2), (3, 4), (5, 6)].map (·.1) -- [1, 3, 5] ------ end Ex3 ``` Nested parentheses introduce new functions. In the following example, two different lambda expressions are created: ```lean #check (Prod.mk · (· + 1)) -- fun x => (x, fun x => x + 1) : ?m.2 → ?m.2 × (Nat → Nat) ``` # Named Arguments %%% tag := "named-arguments" %%% Named arguments enable you to specify an argument for a parameter by matching the argument with its name rather than with its position in the parameter list. If you don't remember the order of the parameters but know their names, you can send the arguments in any order. You may also provide the value for an implicit parameter when Lean failed to infer it. Named arguments also improve the readability of your code by identifying what each argument represents. ```lean def sum (xs : List Nat) := xs.foldl (init := 0) (·+·) #eval sum [1, 2, 3, 4] -- 10 example {a b : Nat} {p : Nat → Nat → Nat → Prop} (h₁ : p a b b) (h₂ : b = a) : p a a b := Eq.subst (motive := fun x => p a x b) h₂ h₁ ``` In the following examples, we illustrate the interaction between named and default arguments. ```lean def f (x : Nat) (y : Nat := 1) (w : Nat := 2) (z : Nat) := x + y + w - z example (x z : Nat) : f (z := z) x = x + 1 + 2 - z := rfl example (x z : Nat) : f x (z := z) = x + 1 + 2 - z := rfl example (x y : Nat) : f x y = fun z => x + y + 2 - z := rfl example : f = (fun x z => x + 1 + 2 - z) := rfl example (x : Nat) : f x = fun z => x + 1 + 2 - z := rfl example (y : Nat) : f (y := 5) = fun x z => x + 5 + 2 - z := rfl def g {α} [Add α] (a : α) (b? : Option α := none) (c : α) : α := match b? with | none => a + c | some b => a + b + c variable {α} [Add α] example : g = fun (a c : α) => a + c := rfl example (x : α) : g (c := x) = fun (a : α) => a + x := rfl example (x : α) : g (b? := some x) = fun (a c : α) => a + x + c := rfl example (x : α) : g x = fun (c : α) => x + c := rfl example (x y : α) : g x y = fun (c : α) => x + y + c := rfl ``` You can use {lit}`..` to provide missing explicit arguments as {lit}`_`. This feature combined with named arguments is useful for writing patterns. Here is an example: ```lean inductive Term where | var (name : String) | num (val : Nat) | app (fn : Term) (arg : Term) | lambda (name : String) (type : Term) (body : Term) def getBinderName : Term → Option String | Term.lambda (name := n) .. => some n | _ => none def getBinderType : Term → Option Term | Term.lambda (type := t) .. => some t | _ => none ``` Ellipses are also useful when explicit arguments can be automatically inferred by Lean, and we want to avoid a sequence of {lit}`_`s. ```lean example (f : Nat → Nat) (a b c : Nat) : f (a + b + c) = f (a + (b + c)) := congrArg f (Nat.add_assoc ..) ``` ================================================ FILE: book/TPiL/Intro.lean ================================================ import VersoManual import TPiL.Examples open TPiL open Verso.Genre Manual open Verso Code External #doc (Manual) "Introduction" => %%% tag := "Intro" htmlSplit := .never %%% # Computers and Theorem Proving %%% tag := "computers-and-theorem-proving" %%% _Formal verification_ involves the use of logical and computational methods to establish claims that are expressed in precise mathematical terms. These can include ordinary mathematical theorems, as well as claims that pieces of hardware or software, network protocols, and mechanical and hybrid systems meet their specifications. In practice, there is not a sharp distinction between verifying a piece of mathematics and verifying the correctness of a system: formal verification requires describing hardware and software systems in mathematical terms, at which point establishing claims as to their correctness becomes a form of theorem proving. Conversely, the proof of a mathematical theorem may require a lengthy computation, in which case verifying the truth of the theorem requires verifying that the computation does what it is supposed to do. The gold standard for supporting a mathematical claim is to provide a proof, and twentieth-century developments in logic show most if not all conventional proof methods can be reduced to a small set of axioms and rules in any of a number of foundational systems. With this reduction, there are two ways that a computer can help establish a claim: it can help find a proof in the first place, and it can help verify that a purported proof is correct. _Automated theorem proving_ focuses on the “finding” aspect. Resolution theorem provers, tableau theorem provers, fast satisfiability solvers, and so on provide means of establishing the validity of formulas in propositional and first-order logic. Other systems provide search procedures and decision procedures for specific languages and domains, such as linear or nonlinear expressions over the integers or the real numbers. Architectures like SMT ("satisfiability modulo theories”) combine domain-general search methods with domain-specific procedures. Computer algebra systems and specialized mathematical software packages provide means of carrying out mathematical computations, establishing mathematical bounds, or finding mathematical objects. A calculation can be viewed as a proof as well, and these systems, too, help establish mathematical claims. Automated reasoning systems strive for power and efficiency, often at the expense of guaranteed soundness. Such systems can have bugs, and it can be difficult to ensure that the results they deliver are correct. In contrast, _interactive theorem proving_ focuses on the “verification” aspect of theorem proving, requiring that every claim is supported by a proof in a suitable axiomatic foundation. This sets a very high standard: every rule of inference and every step of a calculation has to be justified by appealing to prior definitions and theorems, all the way down to basic axioms and rules. In fact, most such systems provide fully elaborated “proof objects” that can be communicated to other systems and checked independently. Constructing such proofs typically requires much more input and interaction from users, but it allows you to obtain deeper and more complex proofs. The _Lean Theorem Prover_ aims to bridge the gap between interactive and automated theorem proving, by situating automated tools and methods in a framework that supports user interaction and the construction of fully specified axiomatic proofs. The goal is to support both mathematical reasoning and reasoning about complex systems, and to verify claims in both domains. Lean's underlying logic has a computational interpretation, and Lean can be viewed equally well as a programming language. More to the point, it can be viewed as a system for writing programs with a precise semantics, as well as reasoning about the functions that the programs compute. Lean also has mechanisms to serve as its own _metaprogramming language_, which means that you can implement automation and extend the functionality of Lean using Lean itself. These aspects of Lean are described in the free online book, [Functional Programming in Lean](https://lean-lang.org/functional_programming_in_lean/), though computational aspects of the system will make an appearance here. # About Lean %%% tag := "about-lean" %%% The _Lean_ project was launched by Leonardo de Moura at Microsoft Research Redmond in 2013. It is an ongoing, long-term effort, and much of the potential for automation will be realized only gradually over time. Lean is released under the [Apache 2.0 license](https://github.com/leanprover/lean4/blob/master/LICENSE), a permissive open source license that permits others to use and extend the code and mathematical libraries freely. To install Lean in your computer consider using the [Quickstart](https://lean-lang.org/install/) instructions. The Lean source code, and instructions for building Lean, are available at [https://github.com/leanprover/lean4/](https://github.com/leanprover/lean4/). This tutorial describes the current version of Lean, known as Lean 4. # About this Book %%% tag := "about-this-book" %%% This book is designed to teach you to develop and verify proofs in Lean. Much of the background information you will need in order to do this is not specific to Lean at all. To start with, you will learn the logical system that Lean is based on, a version of _dependent type theory_ that is powerful enough to prove almost any conventional mathematical theorem, and expressive enough to do it in a natural way. More specifically, Lean is based on a version of a system known as the Calculus of Constructions with inductive types. Lean can not only define mathematical objects and express mathematical assertions in dependent type theory, but it also can be used as a language for writing proofs. Because fully detailed axiomatic proofs are so complicated, the challenge of theorem proving is to have the computer fill in as many of the details as possible. You will learn various methods to support this in {ref "dependent-type-theory"}[dependent type theory]. For example, term rewriting, and Lean's automated methods for simplifying terms and expressions automatically. Similarly, methods of _elaboration_ and _type inference_, which can be used to support flexible forms of algebraic reasoning. Finally, you will learn about features that are specific to Lean, including the language you use to communicate with the system, and the mechanisms Lean offers for managing complex theories and data. Throughout the text you will find examples of Lean code like the one below: ```lean theorem and_commutative (p q : Prop) : p ∧ q → q ∧ p := fun hpq : p ∧ q => have hp : p := And.left hpq have hq : q := And.right hpq show q ∧ p from And.intro hq hp ``` Next to every code example in this book, you will see a button that reads “Copy to clipboard”. Pressing the button copies the example with enough surrounding context to make the code compile correctly. You can paste the example code into [VS Code](https://code.visualstudio.com/) and modify the examples, and Lean will check the results and provide feedback continuously as you type. We recommend running the examples and experimenting with the code on your own as you work through the chapters that follow. You can open this book in VS Code by using the command “Lean 4: Docs: Show Documentation Resources” and selecting “Theorem Proving in Lean 4” in the tab that opens. # Acknowledgments %%% tag := "acknowledgments" %%% This tutorial is an open access project maintained on Github. Many people have contributed to the effort, providing corrections, suggestions, examples, and text. We are grateful to Ulrik Buchholz, Kevin Buzzard, Mario Carneiro, Nathan Carter, Eduardo Cavazos, Amine Chaieb, Joe Corneli, William DeMeo, Marcus Klaas de Vries, Ben Dyer, Gabriel Ebner, Anthony Hart, Simon Hudon, Sean Leather, Assia Mahboubi, Gihan Marasingha, Patrick Massot, Christopher John Mazey, Sebastian Ullrich, Floris van Doorn, Daniel Velleman, Théo Zimmerman, Paul Chisholm, Chris Lovett, and Siddhartha Gadgil for their contributions. Please see [lean prover](https://github.com/leanprover/) and [lean community](https://github.com/leanprover-community/) for an up to date list of our amazing contributors. ================================================ FILE: book/TPiL/PropositionsAndProofs.lean ================================================ import VersoManual import TPiL.Examples open Verso.Genre Manual open TPiL set_option pp.rawOnError true #doc (Manual) "Propositions and Proofs" => %%% tag := "propositions-and-proofs" htmlSplit := .never %%% By now, you have seen some ways of defining objects and functions in Lean. In this chapter, we will begin to explain how to write mathematical assertions and proofs in the language of dependent type theory as well. # Propositions as Types %%% tag := "propositions-as-types" %%% One strategy for proving assertions about objects defined in the language of dependent type theory is to layer an assertion language and a proof language on top of the definition language. But there is no reason to multiply languages in this way: dependent type theory is flexible and expressive, and there is no reason we cannot represent assertions and proofs in the same general framework. For example, we could introduce a new type, {lean}`Prop`, to represent propositions, and introduce constructors to build new propositions from others. ```lean def Implies (p q : Prop) : Prop := p → q ------ #check And -- And (a b : Prop) : Prop #check Or -- Or (a b : Prop) : Prop #check Not -- Not (a : Prop) : Prop #check Implies -- Implies (p q : Prop) : Prop variable (p q r : Prop) #check And p q -- p ∧ q : Prop #check Or (And p q) r -- p ∧ q ∨ r : Prop #check Implies (And p q) (And q p) -- Implies (p ∧ q) (q ∧ p) : Prop ``` ```setup variable (p : Prop) structure Proof (p : Prop) : Type where proof : p variable (t : p) (q r : Prop) def Implies (p q : Prop) : Prop := p → q universe u variable (t1 t2 : p) {α : Type u} {β : Type v} ``` We could then introduce, for each element {lean}`p : Prop`, another type {lean}`Proof p`, for the type of proofs of {lean}`p`. An “axiom” would be a constant of such a type. ```lean def Implies (p q : Prop) : Prop := p → q structure Proof (p : Prop) : Type where proof : p ------ #check Proof -- Proof (p : Prop) : Type axiom and_commut (p q : Prop) : Proof (Implies (And p q) (And q p)) variable (p q : Prop) #check and_commut p q -- and_commut p q : Proof (Implies (p ∧ q) (q ∧ p)) ``` In addition to axioms, however, we would also need rules to build new proofs from old ones. For example, in many proof systems for propositional logic, we have the rule of _modus ponens_: > From a proof of {lean}`Implies p q` and a proof of {lean}`p`, we obtain a proof of {lean}`q`. We could represent this as follows: ```lean def Implies (p q : Prop) : Prop := p → q structure Proof (p : Prop) : Type where proof : p ------ axiom modus_ponens (p q : Prop) : Proof (Implies p q) → Proof p → Proof q ``` Systems of natural deduction for propositional logic also typically rely on the following rule: > Suppose that, assuming {lean}`p` as a hypothesis, we have a proof of {lean}`q`. Then we can “cancel” the hypothesis and obtain a proof of {lean}`Implies p q`. We could render this as follows: ```lean def Implies (p q : Prop) : Prop := p → q structure Proof (p : Prop) : Type where proof : p ------ axiom implies_intro (p q : Prop) : (Proof p → Proof q) → Proof (Implies p q) ``` This approach would provide us with a reasonable way of building assertions and proofs. Determining that an expression {lean}`t` is a correct proof of assertion {lean}`p` would then simply be a matter of checking that {lean}`t` has type {lean}`Proof p`. Some simplifications are possible, however. To start with, we can avoid writing the term {lean}`Proof` repeatedly by conflating {lean}`Proof p` with {lean}`p` itself. In other words, whenever we have {lean}`p : Prop`, we can interpret {lean}`p` as a type, namely, the type of its proofs. We can then read {lean}`t : p` as the assertion that {lean}`t` is a proof of {lean}`p`. Moreover, once we make this identification, the rules for implication show that we can pass back and forth between {lean}`Implies p q` and {lean}`p → q`. In other words, implication between propositions {lean}`p` and {lean}`q` corresponds to having a function that takes any element of {lean}`p` to an element of {lean}`q`. As a result, the introduction of the connective {lean}`Implies` is entirely redundant: we can use the usual function space constructor {lean}`p → q` from dependent type theory as our notion of implication. This is the approach followed in the Calculus of Constructions, and hence in Lean as well. The fact that the rules for implication in a proof system for natural deduction correspond exactly to the rules governing abstraction and application for functions is an instance of the {deftech}_Curry-Howard isomorphism_, sometimes known as the {deftech}_propositions-as-types_ paradigm. In fact, the type {lean}`Prop` is syntactic sugar for {lean}`Sort 0`, the very bottom of the type hierarchy described in the last chapter. Moreover, {lean}`Type u` is also just syntactic sugar for {lean}`Sort (u+1)`. {lean}`Prop` has some special features, but like the other type universes, it is closed under the arrow constructor: if we have {lean}`p q : Prop`, then {lean}`p → q : Prop`. There are at least two ways of thinking about propositions as types. To some who take a constructive view of logic and mathematics, this is a faithful rendering of what it means to be a proposition: a proposition {lean}`p` represents a sort of data type, namely, a specification of the type of data that constitutes a proof. A proof of {lean}`p` is then simply an object {lean}`t : p` of the right type. Those not inclined to this ideology can view it, rather, as a simple coding trick. To each proposition {lean}`p` we associate a type that is empty if {lean}`p` is false and has a single element, say {lit}`*`, if {lean}`p` is true. In the latter case, let us say that (the type associated with) {lean}`p` is _inhabited_. It just so happens that the rules for function application and abstraction can conveniently help us keep track of which elements of {lean}`Prop` are inhabited. So constructing an element {lean}`t : p` tells us that {lean}`p` is indeed true. You can think of the inhabitant of {lean}`p` as being the “fact that {lean}`p` is true.” A proof of {lean}`p → q` uses “the fact that {lean}`p` is true” to obtain “the fact that {lean}`q` is true.” Indeed, if {lean}`p : Prop` is any proposition, Lean's kernel treats any two elements {lean}`t1 t2 : p` as being definitionally equal, much the same way as it treats {lit}`(fun x => t) s` and {lit}`t[s/x]` as definitionally equal. This is known as {deftech}_proof irrelevance_, and is consistent with the interpretation in the last paragraph. It means that even though we can treat proofs {lean}`t : p` as ordinary objects in the language of dependent type theory, they carry no information beyond the fact that {lean}`p` is true. The two ways we have suggested thinking about the {tech}[propositions-as-types] paradigm differ in a fundamental way. From the constructive point of view, proofs are abstract mathematical objects that are _denoted_ by suitable expressions in dependent type theory. In contrast, if we think in terms of the coding trick described above, then the expressions themselves do not denote anything interesting. Rather, it is the fact that we can write them down and check that they are well-typed that ensures that the proposition in question is true. In other words, the expressions _themselves_ are the proofs. In the exposition below, we will slip back and forth between these two ways of talking, at times saying that an expression “constructs” or “produces” or “returns” a proof of a proposition, and at other times simply saying that it “is” such a proof. This is similar to the way that computer scientists occasionally blur the distinction between syntax and semantics by saying, at times, that a program “computes” a certain function, and at other times speaking as though the program “is” the function in question. In any case, all that really matters is the bottom line. To formally express a mathematical assertion in the language of dependent type theory, we need to exhibit a term {lean}`p : Prop`. To _prove_ that assertion, we need to exhibit a term {lean}`t : p`. Lean's task, as a proof assistant, is to help us to construct such a term, {lean}`t`, and to verify that it is well-formed and has the correct type. # Working with Propositions as Types %%% tag := "working-with-propositions-as-types" %%% In the {tech}[propositions-as-types] paradigm, theorems involving only {lit}`→` can be proved using lambda abstraction and application. In Lean, the {kw}`theorem` command introduces a new theorem: ```lean set_option linter.unusedVariables false --- variable {p : Prop} variable {q : Prop} theorem t1 : p → q → p := fun hp : p => fun hq : q => hp ``` Compare this proof to the expression {lean}`fun x : α => fun y : β => x` of type {lean}`α → β → α`, where {lean}`α` and {lean}`β` are data types. This describes the function that takes arguments {leanRef}`x` and {leanRef}`y` of type {lean}`α` and {lean}`β`, respectively, and returns {leanRef}`x`. The proof of {lean}`t1` has the same form, the only difference being that {lean}`p` and {lean}`q` are elements of {lean}`Prop` rather than {lean}`Type`. Intuitively, our proof of {lean}`p → q → p` assumes {lean}`p` and {lean}`q` are true, and uses the first hypothesis (trivially) to establish that the conclusion, {lean}`p`, is true. Note that the {kw}`theorem` command is really a version of the {kw}`def` command: under the propositions and types correspondence, proving the theorem {lean}`p → q → p` is really the same as defining an element of the associated type. To the kernel type checker, there is no difference between the two. There are a few pragmatic differences between definitions and theorems, however. In normal circumstances, it is never necessary to unfold the “definition” of a theorem; by {tech}[proof irrelevance], any two proofs of that theorem are definitionally equal. Once the proof of a theorem is complete, typically we only need to know that the proof exists; it doesn't matter what the proof is. In light of that fact, Lean tags proofs as _irreducible_, which serves as a hint to the parser (more precisely, the _elaborator_) that there is generally no need to unfold them when processing a file. In fact, Lean is generally able to process and check proofs in parallel, since assessing the correctness of one proof does not require knowing the details of another. Additionally, {ref "variables-and-sections"}[section variables] that are referred to in the body of a definition are automatically added as parameters, but only the variables referred to in a theorem's type are added. This is because the way in which a statement is proved should not influence the statement that is being proved. As with definitions, the {kw}`#print` command will show you the proof of a theorem: ```lean set_option linter.unusedVariables false variable {p : Prop} variable {q : Prop} ------ theorem t1 : p → q → p := fun hp : p => fun hq : q => hp #print t1 -- theorem t1 : ∀ {p q : Prop}, p → q → p := fun {p q} hp hq => hp ``` Notice that the lambda abstractions {leanRef}`hp : p` and {leanRef}`hq : q` can be viewed as temporary assumptions in the proof of {lean}`t1`. Lean also allows us to specify the type of the final term {leanRef}`hp`, explicitly, with a {kw}`show` statement: ```lean set_option linter.unusedVariables false variable {p : Prop} variable {q : Prop} ------ theorem t1 : p → q → p := fun hp : p => fun hq : q => show p from hp ``` Adding such extra information can improve the clarity of a proof and help detect errors when writing a proof. The {kw}`show` command does nothing more than annotate the type, and, internally, all the presentations of {leanRef}`t1` that we have seen produce the same term. As with ordinary definitions, we can move the lambda-abstracted variables to the left of the colon: ```lean set_option linter.unusedVariables false variable {p : Prop} variable {q : Prop} ------ theorem t1 (hp : p) (hq : q) : p := hp #print t1 -- theorem t1 : ∀ {p q : Prop}, p → q → p := fun {p q} hp hq => hp ``` We can use the theorem {leanRef}`t1` just as a function application: ```lean set_option linter.unusedVariables false variable {p : Prop} variable {q : Prop} ------ theorem t1 (hp : p) (hq : q) : p := hp axiom hp : p theorem t2 : q → p := t1 hp ``` The {kw}`axiom` declaration postulates the existence of an element of the given type and may compromise logical consistency. For example, we can use it to postulate that the empty type {lean}`False` has an element: ```lean axiom unsound : False -- Everything follows from false theorem ex : 1 = 0 := False.elim unsound ``` :::setup ``` variable {p q : Prop} (hp : p) {t1 : p → q → p} ``` Declaring an “axiom” {lean}`hp : p` is tantamount to declaring that {lean}`p` is true, as witnessed by {lean}`hp`. Applying the theorem {lean}`t1 : p → q → p` to the fact {lean}`hp : p` that {lean}`p` is true yields the theorem {lean}`t1 hp : q → p`. ::: Recall that we can also write theorem {leanRef}`t1` as follows: ```lean set_option linter.unusedVariables false ------ theorem t1 {p q : Prop} (hp : p) (hq : q) : p := hp #print t1 ``` The type of {leanRef}`t1` is now {lean}`∀ {p q : Prop}, p → q → p`. We can read this as the assertion “for every pair of propositions {lean}`p`{lit}` `{lean}`q`, we have {lean}`p → q → p`.” For example, we can move all parameters to the right of the colon: ```lean set_option linter.unusedVariables false ------ theorem t1 : ∀ {p q : Prop}, p → q → p := fun {p q : Prop} (hp : p) (hq : q) => hp ``` If {lean}`p` and {lean}`q` have been declared as {ref "variables-and-sections"}[variables], Lean will generalize them for us automatically: ```lean variable {p q : Prop} theorem t1 : p → q → p := fun (hp : p) (hq : q) => hp ``` When we generalize {leanRef}`t1` in such a way, we can then apply it to different pairs of propositions, to obtain different instances of the general theorem. ```lean set_option linter.unusedVariables false ------ theorem t1 (p q : Prop) (hp : p) (hq : q) : p := hp variable (p q r s : Prop) #check t1 p q -- t1 p q : p → q → p #check t1 r s -- t1 r s : r → s → r #check t1 (r → s) (s → r) -- t1 (r → s) (s → r) : (r → s) → (s → r) → r → s variable (h : r → s) #check t1 (r → s) (s → r) h -- t1 (r → s) (s → r) h : (s → r) → r → s ``` Once again, using the {tech}[propositions-as-types] correspondence, the variable {leanRef}`h` of type {leanRef}`r → s` can be viewed as the hypothesis, or premise, that {leanRef}`r → s` holds. As another example, let us consider the composition function discussed in the last chapter, now with propositions instead of types. ```lean variable (p q r s : Prop) theorem t2 (h₁ : q → r) (h₂ : p → q) : p → r := fun h₃ : p => show r from h₁ (h₂ h₃) ``` As a theorem of propositional logic, what does {leanRef}`t2` say? Note that it is often useful to use numeric Unicode subscripts, entered as {kbd}`\0`, {kbd}`\1`, {kbd}`\2`, ..., for hypotheses, as we did in this example. # Propositional Logic %%% tag := "propositional-logic" %%% Lean defines all the standard logical connectives and notation. The propositional connectives come with the following notation: :::table +header * * ASCII * Unicode * Editor shortcut * Definition * * {lean}`True` * {empty}[] * {empty}[] * {lean}`True` * * {lean}`False` * {empty}[] * {empty}[] * {lean}`False` * * {lean}`Not` * {lit}`¬` * {kbd}`\not`, {kbd}`\neg` * {lean}`Not` * * {lit}`/\` * {lit}`∧` * {kbd}`\and` * {lean}`And` * * {lit}`\/` * {lit}`∨` * {kbd}`\or` * {lean}`Or` * * {lit}`->` * {lit}`→` * {kbd}`\to`, {kbd}`\r`, {kbd}`\imp` * {empty}[] * * {lit}`<->` * {lit}`↔` * {kbd}`\iff`, {kbd}`\lr` * {lean}`Iff` ::: They all take values in {lean}`Prop`. ```lean variable (p q : Prop) #check p → q → p ∧ q #check ¬p → p ↔ False #check p ∨ q → q ∨ p ``` :::setup ``` variable (p q r a b c d e : Prop) ``` The order of operations is as follows: unary negation {lit}`¬` binds most strongly, then {lit}`∧`, then {lit}`∨`, then {lit}`→`, and finally {lit}`↔`. For example, {lean}`a ∧ b → c ∨ d ∧ e` means {lean}`(a ∧ b) → (c ∨ (d ∧ e))`. Remember that {lit}`→` associates to the right (nothing changes now that the arguments are elements of {lean}`Prop`, instead of some other {lean}`Type`), as do the other binary connectives. So if we have {lean}`p q r : Prop`, the expression {lean}`p → q → r` reads “if {lean}`p`, then if {lean}`q`, then {lean}`r`.” This is just the “curried” form of {lean}`p ∧ q → r`. ::: In the last chapter we observed that lambda abstraction can be viewed as an “introduction rule” for {lit}`→`. In the current setting, it shows how to “introduce” or establish an implication. Application can be viewed as an “elimination rule,” showing how to “eliminate” or use an implication in a proof. The other propositional connectives are defined in Lean's library, and are automatically imported. Each connective comes with its canonical introduction and elimination rules. ## Conjunction %%% tag := "conjunction" %%% :::setup ``` variable (p q : Prop) (h1 : p) (h2 : q) ``` The expression {lean}`And.intro h1 h2` builds a proof of {lean}`p ∧ q` using proofs {lean}`h1 : p` and {lean}`h2 : q`. It is common to describe {lean}`And.intro` as the _and-introduction_ rule. In the next example we use {lean}`And.intro` to create a proof of {lean}`p → q → p ∧ q`. ::: ```lean variable (p q : Prop) example (hp : p) (hq : q) : p ∧ q := And.intro hp hq #check fun (hp : p) (hq : q) => And.intro hp hq ``` The {kw}`example` command states a theorem without naming it or storing it in the permanent context. Essentially, it just checks that the given term has the indicated type. It is convenient for illustration, and we will use it often. :::setup ``` variable (p q : Prop) (h : p ∧ q) ``` The expression {lean}`And.left h` creates a proof of {lean}`p` from a proof {lean}`h : p ∧ q`. Similarly, {lean}`And.right h` is a proof of {lean}`q`. They are commonly known as the left and right _and-elimination_ rules. ::: ```lean variable (p q : Prop) example (h : p ∧ q) : p := And.left h example (h : p ∧ q) : q := And.right h ``` We can now prove {lean}`p ∧ q → q ∧ p` with the following proof term. ```lean variable (p q : Prop) example (h : p ∧ q) : q ∧ p := And.intro (And.right h) (And.left h) ``` :::setup ``` variable (p q : Prop) (hp : p) (hq : q) (α β : Type) (a : α) (b : β) ``` Notice that and-introduction and and-elimination are similar to the pairing and projection operations for the Cartesian product. The difference is that given {lean}`hp : p` and {lean}`hq : q`, {lean}`And.intro hp hq` has type {lean}`p ∧ q : Prop`, while given {lean}`a : α` and {lean}`b : β`, {lean}`Prod.mk a b` has type {lean}`α × β : Type`. {lean}`Prod` cannot be used with {lean}`Prop`s, and {lean}`And` cannot be used with {lean}`Type`s. The similarity between {lit}`∧` and {lit}`×` is another instance of the {tech}[Curry-Howard isomorphism], but in contrast to implication and the function space constructor, {lit}`∧` and {lit}`×` are treated separately in Lean. With the analogy, however, the proof we have just constructed is similar to a function that swaps the elements of a pair. We will see in {ref "structures-and-records"}[Structures and Records] that certain types in Lean are _structures_, which is to say, the type is defined with a single canonical _constructor_ which builds an element of the type from a sequence of suitable arguments. For every {lean}`p q : Prop`, {lean}`p ∧ q` is an example: the canonical way to construct an element is to apply {lean}`And.intro` to suitable arguments {lean}`hp : p` and {lean}`hq : q`. Lean allows us to use _anonymous constructor_ notation {lit}`⟨arg1, arg2, ...⟩` in situations like these, when the relevant type is an inductive type and can be inferred from the context. In particular, we can often write {lean (type := "p ∧ q")}`⟨hp, hq⟩` instead of {lean}`And.intro hp hq`: ::: ```lean variable (p q : Prop) variable (hp : p) (hq : q) #check (⟨hp, hq⟩ : p ∧ q) ``` These angle brackets are obtained by typing {kbd}`\<` and {kbd}`\>`, respectively. :::setup ``` inductive Foo where | mk inductive Bar where | mk : Foo → Bar variable (e : Foo) def Foo.bar (x : Foo) : Bar := .mk x ``` Lean provides another useful syntactic gadget. Given an expression {lean}`e` of an inductive type {lean}`Foo` (possibly applied to some arguments), the notation {lean}`e.bar` is shorthand for {lean}`Foo.bar e`. This provides a convenient way of accessing functions without opening a namespace. For example, the following two expressions mean the same thing: ::: ```lean variable (xs : List Nat) #check List.length xs #check xs.length ``` :::setup ``` variable (p q : Prop) (h : p ∧ q) ``` As a result, given {lean}`h : p ∧ q`, we can write {lean}`h.left` for {lean}`And.left h` and {lean}`h.right` for {lean}`And.right h`. We can therefore rewrite the sample proof above conveniently as follows: ::: ```lean variable (p q : Prop) example (h : p ∧ q) : q ∧ p := ⟨h.right, h.left⟩ ``` There is a fine line between brevity and obfuscation, and omitting information in this way can sometimes make a proof harder to read. But for straightforward constructions like the one above, when the type of {leanRef}`h` and the goal of the construction are salient, the notation is clean and effective. It is common to iterate constructions like “And.” Lean also allows you to flatten nested constructors that associate to the right, so that these two proofs are equivalent: ```lean variable (p q : Prop) example (h : p ∧ q) : q ∧ p ∧ q := ⟨h.right, ⟨h.left, h.right⟩⟩ example (h : p ∧ q) : q ∧ p ∧ q := ⟨h.right, h.left, h.right⟩ ``` This is often useful as well. ## Disjunction %%% tag := "disjunction" %%% :::setup ``` variable (p q : Prop) (hp : p) (hq : q) ``` The expression {lean}`Or.intro_left q hp` creates a proof of {lean}`p ∨ q` from a proof {lean}`hp : p`. Similarly, {lean}`Or.intro_right p hq` creates a proof for {lean}`p ∨ q` using a proof {lean}`hq : q`. These are the left and right _or-introduction_ rules. ::: ```lean variable (p q : Prop) example (hp : p) : p ∨ q := Or.intro_left q hp example (hq : q) : p ∨ q := Or.intro_right p hq ``` :::setup ``` variable (p q r : Prop) (hpq : p ∨ q) (hpr : p → r) (hqr : q → r) ``` The _or-elimination_ rule is slightly more complicated. The idea is that we can prove {lean}`r` from {lean}`p ∨ q`, by showing that {lean}`r` follows from {lean}`p` and that {lean}`r` follows from {lean}`q`. In other words, it is a proof by cases. In the expression {lean}`Or.elim hpq hpr hqr`, {lean}`Or.elim` takes three arguments, {lean}`hpq : p ∨ q`, {lean}`hpr : p → r` and {lean}`hqr : q → r`, and produces a proof of {lean}`r`. In the following example, we use {lean}`Or.elim` to prove {lean}`p ∨ q → q ∨ p`. ::: ```lean variable (p q r : Prop) example (h : p ∨ q) : q ∨ p := Or.elim h (fun hp : p => show q ∨ p from Or.intro_right q hp) (fun hq : q => show q ∨ p from Or.intro_left p hq) ``` In most cases, the first argument of {lean}`Or.intro_right` and {lean}`Or.intro_left` can be inferred automatically by Lean. Lean therefore provides {lean}`Or.inr` and {lean}`Or.inl` which can be viewed as shorthand for {lean}`Or.intro_right _` and {lean}`Or.intro_left _`. Thus the proof term above could be written more concisely: ```lean variable (p q r : Prop) example (h : p ∨ q) : q ∨ p := Or.elim h (fun hp => Or.inr hp) (fun hq => Or.inl hq) ``` Notice that there is enough information in the full expression for Lean to infer the types of {leanRef}`hp` and {leanRef}`hq` as well. But using the type annotations in the longer version makes the proof more readable, and can help catch and debug errors. :::setup ``` variable (h : p ∨ q) ``` Because {lean}`Or` has two constructors, we cannot use anonymous constructor notation. But we can still write {lean}`h.elim` instead of {lean}`Or.elim h`: ::: ```lean variable (p q r : Prop) example (h : p ∨ q) : q ∨ p := h.elim (fun hp => Or.inr hp) (fun hq => Or.inl hq) ``` Once again, you should exercise judgment as to whether such abbreviations enhance or diminish readability. ## Negation and Falsity %%% tag := "negation-and-falsity" %%% :::setup ``` variable (p q : Prop) (hnp : ¬ p) (hp : p) ``` Negation, {lean}`¬p`, is actually defined to be {lean}`p → False`, so we obtain {lean}`¬p` by deriving a contradiction from {lean}`p`. Similarly, the expression {lean}`hnp hp` produces a proof of {lean}`False` from {lean}`hp : p` and {lean}`hnp : ¬p`. The next example uses both these rules to produce a proof of {lean}`(p → q) → ¬q → ¬p`. (The symbol {lit}`¬` is produced by typing {kbd}`\not` or {kbd}`\neg`.) ::: ```lean variable (p q : Prop) example (hpq : p → q) (hnq : ¬q) : ¬p := fun hp : p => show False from hnq (hpq hp) ``` The connective {lean}`False` has a single elimination rule, {lean}`False.elim`, which expresses the fact that anything follows from a contradiction. This rule is sometimes called _ex falso_ (short for _ex falso sequitur quodlibet_), or the _principle of explosion_. ```lean variable (p q : Prop) example (hp : p) (hnp : ¬p) : q := False.elim (hnp hp) ``` The arbitrary fact, {lean}`q`, that follows from falsity is an implicit argument in {lean}`False.elim` and is inferred automatically. This pattern, deriving an arbitrary fact from contradictory hypotheses, is quite common, and is represented by {lean}`absurd`. ```lean variable (p q : Prop) example (hp : p) (hnp : ¬p) : q := absurd hp hnp ``` Here, for example, is a proof of {lean}`¬p → q → (q → p) → r`: ```lean variable (p q r : Prop) example (hnp : ¬p) (hq : q) (hqp : q → p) : r := absurd (hqp hq) hnp ``` Incidentally, just as {lean}`False` has only an elimination rule, {lean}`True` has only an introduction rule, {lean}`True.intro : True`. In other words, {lean}`True` is simply true, and has a canonical proof, {lean}`True.intro`. ## Logical Equivalence %%% tag := "logical-equivalence" %%% :::setup ``` variable (p q : Prop) (h1 : p → q) (h2 : q → p) (h : p ↔ q) ``` The expression {lean}`Iff.intro h1 h2` produces a proof of {lean}`p ↔ q` from {lean}`h1 : p → q` and {lean}`h2 : q → p`. The expression {lean}`Iff.mp h` produces a proof of {lean}`p → q` from {lean}`h : p ↔ q`. Similarly, {lean}`Iff.mpr h` produces a proof of {lean}`q → p` from {lean}`h : p ↔ q`. Here is a proof of {lean}`p ∧ q ↔ q ∧ p`: ::: ```lean variable (p q : Prop) theorem and_swap : p ∧ q ↔ q ∧ p := Iff.intro (fun h : p ∧ q => show q ∧ p from And.intro (And.right h) (And.left h)) (fun h : q ∧ p => show p ∧ q from And.intro (And.right h) (And.left h)) #check and_swap p q -- and_swap p q : p ∧ q ↔ q ∧ p variable (h : p ∧ q) example : q ∧ p := Iff.mp (and_swap p q) h ``` We can use the anonymous constructor notation to construct a proof of {lean}`p ↔ q` from proofs of the forward and backward directions, and we can also use {lit}`.` notation with {lit}`mp` and {lit}`mpr`. The previous examples can therefore be written concisely as follows: ```lean variable (p q : Prop) theorem and_swap : p ∧ q ↔ q ∧ p := ⟨ fun h => ⟨h.right, h.left⟩, fun h => ⟨h.right, h.left⟩ ⟩ example (h : p ∧ q) : q ∧ p := (and_swap p q).mp h ``` # Introducing Auxiliary Subgoals %%% tag := "introducing-auxiliary-subgoals" %%% This is a good place to introduce another device Lean offers to help structure long proofs, namely, the {kw}`have` construct, which introduces an auxiliary subgoal in a proof. Here is a small example, adapted from the last section: ```lean variable (p q : Prop) example (h : p ∧ q) : q ∧ p := have hp : p := h.left have hq : q := h.right show q ∧ p from And.intro hq hp ``` :::setup ``` variable (p q : Prop) (s : p) (t : q) ``` Internally, the expression {lean}`have h : p := s; t` produces the term {lean}`(fun (h : p) => t) s`. In other words, {lean}`s` is a proof of {lean}`p`, {lean}`t` is a proof of the desired conclusion assuming {leanRef}`h : p`, and the two are combined by a lambda abstraction and application. This simple device is extremely useful when it comes to structuring long proofs, since we can use intermediate {kw}`have`'s as stepping stones leading to the final goal. ::: Lean also supports a structured way of reasoning backwards from a goal, which models the “suffices to show” construction in ordinary mathematics. The next example simply permutes the last two lines in the previous proof. ```lean variable (p q : Prop) example (h : p ∧ q) : q ∧ p := have hp : p := h.left suffices hq : q from And.intro hq hp show q from And.right h ``` Writing {leanRef}`suffices hq : q` leaves us with two goals. First, we have to show that it indeed suffices to show {lean}`q`, by proving the original goal of {leanRef}`q ∧ p` with the additional hypothesis {leanRef}`hq : q`. Finally, we have to show {leanRef}`q`. # Classical Logic %%% tag := "classical-logic" %%% The introduction and elimination rules we have seen so far are all constructive, which is to say, they reflect a computational understanding of the logical connectives based on the {tech}[propositions-as-types] correspondence. Ordinary classical logic adds to this the law of the excluded middle, {lean}`p ∨ ¬p`. To use this principle, you have to open the classical namespace. ```lean open Classical variable (p : Prop) #check em p ``` :::setup ``` variable (p q RH : Prop) ``` Intuitively, the constructive “Or” is very strong: asserting {lean}`p ∨ q` amounts to knowing which is the case. If {lean}`RH` represents the Riemann hypothesis, a classical mathematician is willing to assert {lean}`RH ∨ ¬RH`, even though we cannot yet assert either disjunct. ::: One consequence of the law of the excluded middle is the principle of double-negation elimination: ```lean open Classical theorem dne {p : Prop} (h : ¬¬p) : p := Or.elim (em p) (fun hp : p => hp) (fun hnp : ¬p => absurd hnp h) ``` :::setup ``` open Classical variable (p : Prop) theorem dne {p : Prop} (h : ¬¬p) : p := Or.elim (em p) (fun hp : p => hp) (fun hnp : ¬p => absurd hnp h) ``` Double-negation elimination allows one to prove any proposition, {lean}`p`, by assuming {lean}`¬p` and deriving {lean}`False`, because that amounts to proving {lean}`¬¬p`. In other words, double-negation elimination allows one to carry out a proof by contradiction, something which is not generally possible in constructive logic. As an exercise, you might try proving the converse, that is, showing that {lean}`em` can be proved from {lean}`dne`. The classical axioms also give you access to additional patterns of proof that can be justified by appeal to {lean}`em`. For example, one can carry out a proof by cases: ::: ```lean open Classical variable (p : Prop) example (h : ¬¬p) : p := byCases (fun h1 : p => h1) (fun h1 : ¬p => absurd h1 h) ``` Or you can carry out a proof by contradiction: ```lean open Classical variable (p : Prop) example (h : ¬¬p) : p := byContradiction (fun h1 : ¬p => show False from h h1) ``` If you are not used to thinking constructively, it may take some time for you to get a sense of where classical reasoning is used. It is needed in the following example because, from a constructive standpoint, knowing that {lean}`p` and {lean}`q` are not both true does not necessarily tell you which one is false: ```lean open Classical variable (p q : Prop) ------ example (h : ¬(p ∧ q)) : ¬p ∨ ¬q := Or.elim (em p) (fun hp : p => Or.inr (show ¬q from fun hq : q => h ⟨hp, hq⟩)) (fun hp : ¬p => Or.inl hp) ``` We will see later that there _are_ situations in constructive logic where principles like excluded middle and double-negation elimination are permissible, and Lean supports the use of classical reasoning in such contexts without relying on excluded middle. The full list of axioms that are used in Lean to support classical reasoning are discussed in {ref "axioms-and-computation"}[Axioms and Computation]. # Examples of Propositional Validities %%% tag := "examples-of-propositional-validities" %%% :::setup ``` variable (p q r s : Prop) ``` Lean's standard library contains proofs of many valid statements of propositional logic, all of which you are free to use in proofs of your own. The following list includes a number of common identities. Commutativity: 1. {lean}`p ∧ q ↔ q ∧ p` 2. {lean}`p ∨ q ↔ q ∨ p` Associativity: 3. {lean}`(p ∧ q) ∧ r ↔ p ∧ (q ∧ r)` 4. {lean}`(p ∨ q) ∨ r ↔ p ∨ (q ∨ r)` Distributivity: 5. {lean}`p ∧ (q ∨ r) ↔ (p ∧ q) ∨ (p ∧ r)` 6. {lean}`p ∨ (q ∧ r) ↔ (p ∨ q) ∧ (p ∨ r)` Other properties: 7. {lean}`(p → (q → r)) ↔ (p ∧ q → r)` 8. {lean}`((p ∨ q) → r) ↔ (p → r) ∧ (q → r)` 9. {lean}`¬(p ∨ q) ↔ ¬p ∧ ¬q` 10. {lean}`¬p ∨ ¬q → ¬(p ∧ q)` 11. {lean}`¬(p ∧ ¬p)` 12. {lean}`p ∧ ¬q → ¬(p → q)` 13. {lean}`¬p → (p → q)` 14. {lean}`(¬p ∨ q) → (p → q)` 15. {lean}`p ∨ False ↔ p` 16. {lean}`p ∧ False ↔ False` 17. {lean}`¬(p ↔ ¬p)` 18. {lean}`(p → q) → (¬q → ¬p)` These require classical reasoning: 19. {lean}`(p → r ∨ s) → ((p → r) ∨ (p → s))` 20. {lean}`¬(p ∧ q) → ¬p ∨ ¬q` 21. {lean}`¬(p → q) → p ∧ ¬q` 22. {lean}`(p → q) → (¬p ∨ q)` 23. {lean}`(¬q → ¬p) → (p → q)` 24. {lean}`p ∨ ¬p` 25. {lean}`(((p → q) → p) → p)` The {lean}`sorry` identifier magically produces a proof of anything, or provides an object of any data type at all. Of course, it is unsound as a proof method—for example, you can use it to prove {lean}`False`—and Lean produces severe warnings when files use or import theorems which depend on it. But it is very useful for building long proofs incrementally. Start writing the proof from the top down, using {lean}`sorry` to fill in subproofs. Make sure Lean accepts the term with all the {lean}`sorry`'s; if not, there are errors that you need to correct. Then go back and replace each {lean}`sorry` with an actual proof, until no more remain. Here is another useful trick. Instead of using {lean}`sorry`, you can use an underscore {lit}`_` as a placeholder. Recall this tells Lean that the argument is implicit, and should be filled in automatically. If Lean tries to do so and fails, it returns with an error message “don't know how to synthesize placeholder,” followed by the type of the term it is expecting, and all the objects and hypotheses available in the context. In other words, for each unresolved placeholder, Lean reports the subgoal that needs to be filled at that point. You can then construct a proof by incrementally filling in these placeholders. ::: For reference, here are two sample proofs of validities taken from the list above. ```lean open Classical -- distributivity example (p q r : Prop) : p ∧ (q ∨ r) ↔ (p ∧ q) ∨ (p ∧ r) := Iff.intro (fun h : p ∧ (q ∨ r) => have hp : p := h.left Or.elim (h.right) (fun hq : q => show (p ∧ q) ∨ (p ∧ r) from Or.inl ⟨hp, hq⟩) (fun hr : r => show (p ∧ q) ∨ (p ∧ r) from Or.inr ⟨hp, hr⟩)) (fun h : (p ∧ q) ∨ (p ∧ r) => Or.elim h (fun hpq : p ∧ q => have hp : p := hpq.left have hq : q := hpq.right show p ∧ (q ∨ r) from ⟨hp, Or.inl hq⟩) (fun hpr : p ∧ r => have hp : p := hpr.left have hr : r := hpr.right show p ∧ (q ∨ r) from ⟨hp, Or.inr hr⟩)) -- an example that requires classical reasoning example (p q : Prop) : ¬(p ∧ ¬q) → (p → q) := fun h : ¬(p ∧ ¬q) => fun hp : p => show q from Or.elim (em q) (fun hq : q => hq) (fun hnq : ¬q => absurd (And.intro hp hnq) h) ``` # Exercises %%% tag := none %%% Prove the following identities, replacing the {lean}`sorry` placeholders with actual proofs. ```lean variable (p q r : Prop) -- commutativity of ∧ and ∨ example : p ∧ q ↔ q ∧ p := sorry example : p ∨ q ↔ q ∨ p := sorry -- associativity of ∧ and ∨ example : (p ∧ q) ∧ r ↔ p ∧ (q ∧ r) := sorry example : (p ∨ q) ∨ r ↔ p ∨ (q ∨ r) := sorry -- distributivity example : p ∧ (q ∨ r) ↔ (p ∧ q) ∨ (p ∧ r) := sorry example : p ∨ (q ∧ r) ↔ (p ∨ q) ∧ (p ∨ r) := sorry -- other properties example : (p → (q → r)) ↔ (p ∧ q → r) := sorry example : ((p ∨ q) → r) ↔ (p → r) ∧ (q → r) := sorry example : ¬(p ∨ q) ↔ ¬p ∧ ¬q := sorry example : ¬p ∨ ¬q → ¬(p ∧ q) := sorry example : ¬(p ∧ ¬p) := sorry example : p ∧ ¬q → ¬(p → q) := sorry example : ¬p → (p → q) := sorry example : (¬p ∨ q) → (p → q) := sorry example : p ∨ False ↔ p := sorry example : p ∧ False ↔ False := sorry example : (p → q) → (¬q → ¬p) := sorry ``` Prove the following identities, replacing the {lean}`sorry` placeholders with actual proofs. These require classical reasoning. ```lean open Classical variable (p q r : Prop) example : (p → q ∨ r) → ((p → q) ∨ (p → r)) := sorry example : ¬(p ∧ q) → ¬p ∨ ¬q := sorry example : ¬(p → q) → p ∧ ¬q := sorry example : (p → q) → (¬p ∨ q) := sorry example : (¬q → ¬p) → (p → q) := sorry example : p ∨ ¬p := sorry example : (((p → q) → p) → p) := sorry ``` Prove {lean}`¬(p ↔ ¬p)` without using classical logic. ================================================ FILE: book/TPiL/QuantifiersEquality.lean ================================================ import VersoManual import TPiL.Examples open Verso.Genre open Verso.Genre.Manual hiding tactic open TPiL #doc (Manual) "Quantifiers and Equality" => %%% tag := "quantifiers-and-equality" %%% ```setup variable {α : Type u} (p : α → Prop) (x y t : α) (r : α → α → Prop) {β : α → Type v} ``` The last chapter introduced you to methods that construct proofs of statements involving the propositional connectives. In this chapter, we extend the repertoire of logical constructions to include the universal and existential quantifiers, and the equality relation. # The Universal Quantifier %%% tag := "the-universal-quantifier" %%% Notice that if {lean}`α` is any type, we can represent a unary predicate {lean}`p` on {lean}`α` as an object of type {lean}`α → Prop`. In that case, given {lean}`x : α`, {lean}`p x` denotes the assertion that {lean}`p` holds of {lean}`x`. Similarly, an object {lean}`r : α → α → Prop` denotes a binary relation on {lean}`α`: given {lean}`x y : α`, {lean}`r x y` denotes the assertion that {lean}`x` is related to {lean}`y`. The universal quantifier, {lean}`∀ x : α, p x` is supposed to denote the assertion that “for every {lean}`x : α`, {lean}`p x`” holds. As with the propositional connectives, in systems of natural deduction, “forall” is governed by an introduction and elimination rule. Informally, the introduction rule states: > Given a proof of {lean}`p x`, in a context where {lean}`x : α` is arbitrary, we obtain a proof {lean}`∀ x : α, p x`. The elimination rule states: > Given a proof {lean}`∀ x : α, p x` and any term {lean}`t : α`, we obtain a proof of {lean}`p t`. As was the case for implication, the propositions-as-types interpretation now comes into play. Remember the introduction and elimination rules for dependent arrow types: ```setup variable {α : Type u} (p : α → Prop) (x y : α) (r : α → α → Prop) {β : α → Type v} {t : {x : α} → β x} ``` > Given a term {lean}`t` of type {lean}`β x`, in a context where {lean}`x : α` is arbitrary, we have {lean}`(fun x : α => t) : (x : α) → β x`. ```setup variable {α : Type u} (p : α → Prop) (x y : α) (r : α → α → Prop) {β : α → Type v} {t : α} {s : (x : α) → β x} ``` The elimination rule states: > Given a term {lean}`s : (x : α) → β x` and any term {lean}`t : α`, we have {lean}`s t : β t`. In the case where {lean}`p x` has type {lean}`Prop`, if we replace {lean}`(x : α) → β x` with {lean}`∀ x : α, p x`, we can read these as the correct rules for building proofs involving the universal quantifier. :::setup ``` variable {α : Type u} {β : Type v} {p : {x : α} → Prop} (q : Prop) ``` The Calculus of Constructions therefore identifies dependent arrow types with forall-expressions in this way. If {lean}`p` is any expression, {lean}`∀ x : α, p` is nothing more than alternative notation for {lean}`(x : α) → p`, with the idea that the former is more natural than the latter in cases where {lean}`p` is a proposition. Typically, the expression {lean}`p` will depend on {leanRef}`x : α`. Recall that, in the case of ordinary function spaces, we could interpret {lean}`α → β` as the special case of {lean}`(x : α) → β` in which {lean}`β` does not depend on {leanRef}`x`. Similarly, we can think of an implication {lean}`p → q` between propositions as the special case of {lean}`∀ x : p, q` in which the expression {lean}`q` does not depend on {leanRef}`x`. ::: Here is an example of how the {tech}[propositions-as-types] correspondence gets put into practice. ```lean example (α : Type) (p q : α → Prop) : (∀ x : α, p x ∧ q x) → ∀ y : α, p y := fun h : ∀ x : α, p x ∧ q x => fun y : α => show p y from (h y).left ``` As a notational convention, we give the universal quantifier the widest scope possible, so parentheses are needed to limit the quantifier over {leanRef}`x` to the hypothesis in the example above. The canonical way to prove {lean}`∀ y : α, p y` is to take an arbitrary {leanRef}`y`, and prove {leanRef}`p y`. This is the introduction rule. Now, given that {leanRef}`h` has type {leanRef}`∀ x : α, p x ∧ q x`, the expression {leanRef}`h y` has type {leanRef}`p`{lit}` `{leanRef}`y`{lit}` ∧ `{leanRef}`q`{lit}` `{leanRef}`y`. This is the elimination rule. Taking the left conjunct gives the desired conclusion, {leanRef}`p y`. :::setup ``` variable {x z : α} ``` Remember that expressions which differ up to renaming of bound variables are considered to be equivalent. So, for example, we could have used the same variable, {lean}`x`, in both the hypothesis and conclusion, and instantiated it by a different variable, {lean}`z`, in the proof: ::: ```lean example (α : Type) (p q : α → Prop) : (∀ x : α, p x ∧ q x) → ∀ x : α, p x := fun h : ∀ x : α, p x ∧ q x => fun z : α => show p z from And.left (h z) ``` As another example, here is how we can express the fact that a relation, {lean}`r`, is transitive: ```lean variable (α : Type) (r : α → α → Prop) variable (trans_r : ∀ x y z, r x y → r y z → r x z) variable (a b c : α) variable (hab : r a b) (hbc : r b c) #check trans_r -- trans_r : ∀ (x y z : α), r x y → r y z → r x z #check trans_r a b c -- trans_r a b c : r a b → r b c → r a c #check trans_r a b c hab -- trans_r a b c hab : r b c → r a c #check trans_r a b c hab hbc -- trans_r a b c hab hbc : r a c ``` Think about what is going on here. When we instantiate {leanRef}`trans_r` at the values {leanRef}`a b c`, we end up with a proof of {leanRef}`r`{lit}` `{leanRef}`a b`{lit}` → `{leanRef}`r`{lit}` `{leanRef}`b c`{lit}` → `{leanRef}`r`{lit}` `{leanRef}`a`{lit}` `{leanRef}`c`. Applying this to the “hypothesis” {leanRef}`hab : r a b`, we get a proof of the implication {leanRef}`r`{lit}` `{leanRef}`b c`{lit}` → `{leanRef}`r`{lit}` `{leanRef}`a`{lit}` `{leanRef}`c`. Finally, applying it to the hypothesis {leanRef}`hbc` yields a proof of the conclusion {leanRef}`r`{lit}` `{leanRef}`a`{lit}` `{leanRef}`c`. In situations like this, it can be tedious to supply the arguments {leanRef}`a b c`, when they can be inferred from {leanRef}`hab hbc`. For that reason, it is common to make these arguments implicit: ```lean variable (α : Type) (r : α → α → Prop) variable (trans_r : ∀ {x y z}, r x y → r y z → r x z) variable (a b c : α) variable (hab : r a b) (hbc : r b c) #check trans_r #check trans_r hab #check trans_r hab hbc ``` The advantage is that we can simply write {leanRef}`trans_r hab hbc` as a proof of {leanRef}`r`{lit}` `{leanRef}`a`{lit}` `{leanRef}`c`. A disadvantage is that Lean does not have enough information to infer the types of the arguments in the expressions {leanRef}`trans_r` and {leanRef}`trans_r hab`. The output of the first {kw}`#check` command is {lit}`r ?m.1 ?m.2 → r ?m.2 ?m.3 → r ?m.1 ?m.3`, indicating that the implicit arguments are unspecified in this case. Here is an example of how we can carry out elementary reasoning with an equivalence relation: ```lean variable (α : Type) (r : α → α → Prop) variable (refl_r : ∀ x, r x x) variable (symm_r : ∀ {x y}, r x y → r y x) variable (trans_r : ∀ {x y z}, r x y → r y z → r x z) example (a b c d : α) (hab : r a b) (hcb : r c b) (hcd : r c d) : r a d := trans_r (trans_r hab (symm_r hcb)) hcd ``` To get used to using universal quantifiers, you should try some of the exercises at the end of this section. :::setup ``` universe i j variable (α : Sort i) (β : {x : α} → Sort j) {x : α} ``` It is the typing rule for dependent arrow types, and the universal quantifier in particular, that distinguishes {lean}`Prop` from other types. Suppose we have {lean}`α : Sort i` and {lean}`β : Sort j`, where the expression {lean}`β` may depend on a variable {lean}`x : α`. Then {lean}`(x : α) → β` is an element of {lean}`Sort (imax i j)`, where {lit}`imax i j` is the maximum of {lit}`i` and {lit}`j` if {lit}`j` is not {lit}`0`, and {lit}`0` otherwise. The idea is as follows. If {lit}`j` is not {lit}`0`, then {lean}`(x : α) → β` is an element of {lean}`Sort (max i j)`. In other words, the type of dependent functions from {lean}`α` to {lean}`β` “lives” in the universe whose index is the maximum of {lit}`i` and {lit}`j`. Suppose, however, that {lean}`β` is of {lean}`Sort 0`, that is, an element of {lean}`Prop`. In that case, {lean}`(x : α) → β` is an element of {lean}`Sort 0` as well, no matter which type universe {lean}`α` lives in. In other words, if {lean}`β` is a proposition depending on {lean}`α`, then {lean}`∀ x : α, β` is again a proposition. This reflects the interpretation of {lean}`Prop` as the type of propositions rather than data, and it is what makes {lean}`Prop` {deftech}_impredicative_. The term “{deftech}[predicative]” stems from foundational developments around the turn of the twentieth century, when logicians such as Poincaré and Russell blamed set-theoretic paradoxes on the “vicious circles” that arise when we define a property by quantifying over a collection that includes the very property being defined. Notice that if {lean}`α` is any type, we can form the type {lean}`α → Prop` of all predicates on {lean}`α` (the “power type of {lean}`α`”). The impredicativity of {lean}`Prop` means that we can form propositions that quantify over {lean}`α → Prop`. In particular, we can define predicates on {lean}`α` by quantifying over all predicates on {lean}`α`, which is exactly the type of circularity that was once considered problematic. ::: # Equality %%% tag := "equality" %%% Let us now turn to one of the most fundamental relations defined in Lean's library, namely, the equality relation. In the chapter on {ref "inductive-types"}[inductive types], we will explain _how_ equality is defined from the primitives of Lean's logical framework. In the meanwhile, here we explain how to use it. Of course, a fundamental property of equality is that it is an equivalence relation: ```lean #check Eq.refl -- Eq.refl.{u_1} {α : Sort u_1} (a : α) : a = a #check Eq.symm -- Eq.symm.{u} {α : Sort u} {a b : α} (h : a = b) : b = a #check Eq.trans -- Eq.trans.{u} {α : Sort u} {a b c : α} (h₁ : a = b) (h₂ : b = c) : a = c ``` We can make the output easier to read by telling Lean not to insert the implicit arguments (which are displayed here as metavariables). ```lean universe u #check @Eq.refl.{u} -- @Eq.refl : ∀ {α : Sort u} (a : α), a = a #check @Eq.symm.{u} -- @Eq.symm : ∀ {α : Sort u} {a b : α}, a = b → b = a #check @Eq.trans.{u} -- @Eq.trans : ∀ {α : Sort u} {a b c : α}, a = b → b = c → a = c ``` The inscription {lit}`.{u}` tells Lean to instantiate the constants at the universe {lit}`u`. Thus, for example, we can specialize the example from the previous section to the equality relation: ```lean variable (α : Type) (a b c d : α) variable (hab : a = b) (hcb : c = b) (hcd : c = d) example : a = d := Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd ``` We can also use the projection notation: ```lean variable (α : Type) (a b c d : α) variable (hab : a = b) (hcb : c = b) (hcd : c = d) ------ example : a = d := (hab.trans hcb.symm).trans hcd ``` Reflexivity is more powerful than it looks. Recall that terms in the Calculus of Constructions have a computational interpretation, and that the logical framework treats terms with a common reduct as the same. As a result, some nontrivial identities can be proved by reflexivity: ```lean variable (α β : Type) example (f : α → β) (a : α) : (fun x => f x) a = f a := Eq.refl _ example (a : α) (b : β) : (a, b).1 = a := Eq.refl _ example : 2 + 3 = 5 := Eq.refl _ ``` This feature of the framework is so important that the library defines a notation {lean}`rfl` for {lean}`Eq.refl _`: ```lean variable (α β : Type) ------ example (f : α → β) (a : α) : (fun x => f x) a = f a := rfl example (a : α) (b : β) : (a, b).1 = a := rfl example : 2 + 3 = 5 := rfl ``` :::setup ``` variable {a b : α} {p : α → Prop} {h1 : a = b} {h2 : p a} ``` Equality is much more than an equivalence relation, however. It has the important property that every assertion respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value. That is, given {lean}`h1 : a = b` and {lean}`h2 : p a`, we can construct a proof for {lean}`p b` using substitution: {lean}`Eq.subst h1 h2`. ::: ```lean example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := Eq.subst h1 h2 example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := h1 ▸ h2 ``` The triangle in the second presentation is a macro built on top of {lean}`Eq.subst` and {lean}`Eq.symm`, and you can enter it by typing {kbd}`\t`. The rule {lean}`Eq.subst` is used to define the following auxiliary rules, which carry out more explicit substitutions. They are designed to deal with applicative terms, that is, terms of form {lean}`s t`. Specifically, {lean}`congrArg` can be used to replace the argument, {lean}`congrFun` can be used to replace the term that is being applied, and {lean}`congr` can be used to replace both at once. ```lean variable (α : Type) variable (a b : α) variable (f g : α → Nat) variable (h₁ : a = b) variable (h₂ : f = g) example : f a = f b := congrArg f h₁ example : f a = g a := congrFun h₂ a example : f a = g b := congr h₂ h₁ ``` Lean's library contains a large number of common identities, such as these: ```lean variable (a b c : Nat) example : a + 0 = a := Nat.add_zero a example : 0 + a = a := Nat.zero_add a example : a * 1 = a := Nat.mul_one a example : 1 * a = a := Nat.one_mul a example : a + b = b + a := Nat.add_comm a b example : a + b + c = a + (b + c) := Nat.add_assoc a b c example : a * b = b * a := Nat.mul_comm a b example : a * b * c = a * (b * c) := Nat.mul_assoc a b c example : a * (b + c) = a * b + a * c := Nat.mul_add a b c example : a * (b + c) = a * b + a * c := Nat.left_distrib a b c example : (a + b) * c = a * c + b * c := Nat.add_mul a b c example : (a + b) * c = a * c + b * c := Nat.right_distrib a b c ``` Note that {lean}`Nat.mul_add` and {lean}`Nat.add_mul` are alternative names for {lean}`Nat.left_distrib` and {lean}`Nat.right_distrib`, respectively. The properties above are stated for the natural numbers (type {lean}`Nat`). Here is an example of a calculation in the natural numbers that uses substitution combined with associativity and distributivity. ```lean example (x y : Nat) : (x + y) * (x + y) = x * x + y * x + x * y + y * y := have h1 : (x + y) * (x + y) = (x + y) * x + (x + y) * y := Nat.mul_add (x + y) x y have h2 : (x + y) * (x + y) = x * x + y * x + (x * y + y * y) := (Nat.add_mul x y x) ▸ (Nat.add_mul x y y) ▸ h1 h2.trans (Nat.add_assoc (x * x + y * x) (x * y) (y * y)).symm ``` :::setup ``` variable {α : Type u} ``` ```lean (show := false) example {α : Type u} {x y : α} {h : x = y} {p : α → Prop} {e : p x} : p y := h ▸ e ``` Notice that the second implicit parameter to {lean}`Eq.subst`, which provides the context in which the substitution is to occur, has type {lean}`α → Prop`. Inferring this predicate therefore requires an instance of _higher-order unification_. In full generality, the problem of determining whether a higher-order unifier exists is undecidable, and Lean can at best provide imperfect and approximate solutions to the problem. As a result, {lean}`Eq.subst` doesn't always do what you want it to. The macro {leanRef}`h ▸ e` uses more effective heuristics for computing this implicit parameter, and often succeeds in situations where applying {lean}`Eq.subst` fails. ::: Because equational reasoning is so common and important, Lean provides a number of mechanisms to carry it out more effectively. The next section offers syntax that allow you to write calculational proofs in a more natural and perspicuous way. But, more importantly, equational reasoning is supported by a term rewriter, a simplifier, and other kinds of automation. The term rewriter and simplifier are described briefly in the next section, and then in greater detail in the next chapter. # Calculational Proofs %%% tag := "calculational-proofs" %%% A calculational proof is just a chain of intermediate results that are meant to be composed by basic principles such as the transitivity of equality. In Lean, a calculational proof starts with the keyword {kw}`calc`, and has the following syntax: ``` calc _0 'op_1' _1 ':=' _1 '_' 'op_2' _2 ':=' _2 ... '_' 'op_n' _n ':=' _n ``` Note that the {kw}`calc` relations all have the same indentation. Each {lit}`_i` is a proof for {lit}`_{i-1} op_i _i`. We can also use {lit}`_` in the first relation (right after {lit}`_0`) which is useful to align the sequence of relation/proof pairs: ``` calc _0 '_' 'op_1' _1 ':=' _1 '_' 'op_2' _2 ':=' _2 ... '_' 'op_n' _n ':=' _n ``` Here is an example: ```lean variable (a b c d e : Nat) theorem T (h1 : a = b) (h2 : b = c + 1) (h3 : c = d) (h4 : e = 1 + d) : a = e := calc a = b := h1 _ = c + 1 := h2 _ = d + 1 := congrArg Nat.succ h3 _ = 1 + d := Nat.add_comm d 1 _ = e := Eq.symm h4 ``` This style of writing proofs is most effective when it is used in conjunction with the {tactic}`simp` and {tactic}`rw` tactics, which are discussed in greater detail in the next chapter. For example, using {tactic}`rw` for rewrite, the proof above could be written as follows: ```lean variable (a b c d e : Nat) ------ theorem T (h1 : a = b) (h2 : b = c + 1) (h3 : c = d) (h4 : e = 1 + d) : a = e := calc a = b := by rw [h1] _ = c + 1 := by rw [h2] _ = d + 1 := by rw [h3] _ = 1 + d := by rw [Nat.add_comm] _ = e := by rw [h4] ``` Essentially, the {kw}`rw` tactic uses a given equality (which can be a hypothesis, a theorem name, or a complex term) to “rewrite” the goal. If doing so reduces the goal to an identity {lean}`t = t`, the tactic applies reflexivity to prove it. Rewrites can be applied sequentially, so that the proof above can be shortened to this: ```lean variable (a b c d e : Nat) ------ theorem T (h1 : a = b) (h2 : b = c + 1) (h3 : c = d) (h4 : e = 1 + d) : a = e := calc a = d + 1 := by rw [h1, h2, h3] _ = 1 + d := by rw [Nat.add_comm] _ = e := by rw [h4] ``` Or even this: ```lean variable (a b c d e : Nat) ------ theorem T (h1 : a = b) (h2 : b = c + 1) (h3 : c = d) (h4 : e = 1 + d) : a = e := by rw [h1, h2, h3, Nat.add_comm, h4] ``` The {kw}`simp` tactic, instead, rewrites the goal by applying the given identities repeatedly, in any order, anywhere they are applicable in a term. It also uses other rules that have been previously declared to the system, and applies commutativity wisely to avoid looping. As a result, we can also prove the theorem as follows: ```lean variable (a b c d e : Nat) ------ theorem T (h1 : a = b) (h2 : b = c + 1) (h3 : c = d) (h4 : e = 1 + d) : a = e := by simp [h1, h2, h3, Nat.add_comm, h4] ``` We will discuss variations of {kw}`rw` and {kw}`simp` in the next chapter. The {kw}`calc` command can be configured for any relation that supports some form of transitivity. It can even combine different relations. ```lean variable (a b c d : Nat) example (h1 : a = b) (h2 : b ≤ c) (h3 : c + 1 < d) : a < d := calc a = b := h1 _ < b + 1 := Nat.lt_succ_self b _ ≤ c + 1 := Nat.succ_le_succ h2 _ < d := h3 ``` You can “teach” {kw}`calc` new transitivity theorems by adding new instances of the {lean}`Trans` type class. Type classes are introduced later, but the following small example demonstrates how to extend the {kw}`calc` notation using new {lean}`Trans` instances. ```lean def divides (x y : Nat) : Prop := ∃ k, k*x = y def divides_trans (h₁ : divides x y) (h₂ : divides y z) : divides x z := let ⟨k₁, d₁⟩ := h₁ let ⟨k₂, d₂⟩ := h₂ ⟨k₁ * k₂, by rw [Nat.mul_comm k₁ k₂, Nat.mul_assoc, d₁, d₂]⟩ def divides_mul (x : Nat) (k : Nat) : divides x (k*x) := ⟨k, rfl⟩ instance : Trans divides divides divides where trans := divides_trans example (h₁ : divides x y) (h₂ : y = z) : divides x (2*z) := calc divides x y := h₁ _ = z := h₂ divides _ (2*z) := divides_mul .. infix:50 " | " => divides example (h₁ : divides x y) (h₂ : y = z) : divides x (2*z) := calc x | y := h₁ _ = z := h₂ _ | 2*z := divides_mul .. ``` The example above also makes it clear that you can use {kw}`calc` even if you do not have an infix notation for your relation. Lean already includes the standard Unicode notation for divisibility (using {lit}`∣`, which can be entered as {kbd}`\dvd` or {kbd}`\mid`), so the example above uses the ordinary vertical bar to avoid a conflict. In practice, this is not a good idea, as it risks confusion with the ASCII {lit}`|` used in the {kw}`match`{lit}` ... `{kw}`with` expression. With {kw}`calc`, we can write the proof in the last section in a more natural and perspicuous way. ```lean variable (x y : Nat) example : (x + y) * (x + y) = x * x + y * x + x * y + y * y := calc (x + y) * (x + y) = (x + y) * x + (x + y) * y := by rw [Nat.mul_add] _ = x * x + y * x + (x + y) * y := by rw [Nat.add_mul] _ = x * x + y * x + (x * y + y * y) := by rw [Nat.add_mul] _ = x * x + y * x + x * y + y * y := by rw [←Nat.add_assoc] ``` The alternative {kw}`calc` notation is worth considering here. When the first expression is taking this much space, using {lit}`_` in the first relation naturally aligns all relations: ```lean variable (x y : Nat) example : (x + y) * (x + y) = x * x + y * x + x * y + y * y := calc (x + y) * (x + y) _ = (x + y) * x + (x + y) * y := by rw [Nat.mul_add] _ = x * x + y * x + (x + y) * y := by rw [Nat.add_mul] _ = x * x + y * x + (x * y + y * y) := by rw [Nat.add_mul] _ = x * x + y * x + x * y + y * y := by rw [←Nat.add_assoc] ``` Here the left arrow before {lean}`Nat.add_assoc` tells rewrite to use the identity in the opposite direction. (You can enter it with {kbd}`\l` or use the ASCII equivalent, {lit}`<-`.) If brevity is what we are after, both {tactic}`rw` and {tactic}`simp` can do the job on their own: ```lean variable (x y : Nat) example : (x + y) * (x + y) = x * x + y * x + x * y + y * y := by rw [Nat.mul_add, Nat.add_mul, Nat.add_mul, ←Nat.add_assoc] example : (x + y) * (x + y) = x * x + y * x + x * y + y * y := by simp [Nat.mul_add, Nat.add_mul, Nat.add_assoc] ``` # The Existential Quantifier %%% tag := "the-existential-quantifier" %%% Finally, consider the existential quantifier, which can be written as either {lean}`exists x : α, p x` or {lean}`∃ x : α, p x`. Both versions are actually notationally convenient abbreviations for a more long-winded expression, {lean}`Exists (fun x : α => p x)`, defined in Lean's library. As you should by now expect, the library includes both an introduction rule and an elimination rule. The introduction rule is straightforward: to prove {lean}`∃ x : α, p x`, it suffices to provide a suitable term {lean}`t` and a proof of {lean}`p t`. Here are some examples: ```lean example : ∃ x : Nat, x > 0 := have h : 1 > 0 := Nat.zero_lt_succ 0 Exists.intro 1 h example (x : Nat) (h : x > 0) : ∃ y, y < x := Exists.intro 0 h example (x y z : Nat) (hxy : x < y) (hyz : y < z) : ∃ w, x < w ∧ w < z := Exists.intro y (And.intro hxy hyz) #check @Exists.intro -- @Exists.intro : ∀ {α : Sort u_1} {p : α → Prop} (w : α), p w → Exists p ``` :::setup ``` variable {t : α} {p : α → Prop} (h : p t) ``` We can use the anonymous constructor notation {lean (type := "Exists (fun x : α => p x)")}`⟨t, h⟩` for {lean}`Exists.intro t h`, when the type is clear from the context. ::: ```lean example : ∃ x : Nat, x > 0 := have h : 1 > 0 := Nat.zero_lt_succ 0 ⟨1, h⟩ example (x : Nat) (h : x > 0) : ∃ y, y < x := ⟨0, h⟩ example (x y z : Nat) (hxy : x < y) (hyz : y < z) : ∃ w, x < w ∧ w < z := ⟨y, hxy, hyz⟩ ``` :::setup ``` variable (p : α → Prop) (g : Nat → Nat → Nat) (hg : g 0 0 = 0) ``` Note that {lean}`Exists.intro` has implicit arguments: Lean has to infer the predicate {lean}`p : α → Prop` in the conclusion {lean}`∃ x, p x`. This is not a trivial affair. For example, if we have {lean}`hg : g 0 0 = 0` and write {lean}`Exists.intro 0 hg`, there are many possible values for the predicate {lean}`p`, corresponding to the theorems {lean}`∃ x, g x x = x`, {lean}`∃ x, g x x = 0`, {lean}`∃ x, g x 0 = x`, etc. Lean uses the context to infer which one is appropriate. This is illustrated in the following example, in which we set the option {option}`pp.explicit` to true to ask Lean's pretty-printer to show the implicit arguments. ::: ```lean variable (g : Nat → Nat → Nat) theorem gex1 (hg : g 0 0 = 0) : ∃ x, g x x = x := ⟨0, hg⟩ theorem gex2 (hg : g 0 0 = 0) : ∃ x, g x 0 = x := ⟨0, hg⟩ theorem gex3 (hg : g 0 0 = 0) : ∃ x, g 0 0 = x := ⟨0, hg⟩ theorem gex4 (hg : g 0 0 = 0) : ∃ x, g x x = 0 := ⟨0, hg⟩ set_option pp.explicit true -- display implicit arguments #print gex1 #print gex2 #print gex3 #print gex4 ``` :::setup ``` variable (q : Prop) (α : Type u) (p : α → Prop) (w : α) (x : α) ``` We can view {lean}`Exists.intro` as an information-hiding operation, since it hides the witness to the body of the assertion. The existential elimination rule, {lean}`Exists.elim`, performs the opposite operation. It allows us to prove a proposition {lean}`q` from {lean}`∃ x : α, p x`, by showing that {lean}`q` follows from {lean}`p w` for an arbitrary value {lean}`w`. Roughly speaking, since we know there is an {lean}`x` satisfying {lean}`p x`, we can give it a name, say, {lean}`w`. If {lean}`q` does not mention {lean}`w`, then showing that {lean}`q` follows from {lean}`p w` is tantamount to showing that {lean}`q` follows from the existence of any such {lean}`x`. Here is an example: ::: ```lean variable (α : Type) (p q : α → Prop) example (h : ∃ x, p x ∧ q x) : ∃ x, q x ∧ p x := Exists.elim h (fun w => fun hw : p w ∧ q w => show ∃ x, q x ∧ p x from ⟨w, hw.right, hw.left⟩) ``` :::setup ``` variable {α : Type u} (p : α → Prop) {β : α → Type} (a : α) (h : p a) (h' : β a) ``` It may be helpful to compare the exists-elimination rule to the or-elimination rule: the assertion {lean}`∃ x : α, p x` can be thought of as a big disjunction of the propositions {lean}`p a`, as {lean}`a` ranges over all the elements of {lean}`α`. Note that the anonymous constructor notation {leanRef}`⟨w, hw.right, hw.left⟩` abbreviates a nested constructor application; we could equally well have written {lit}`⟨`{leanRef}`w`{lit}`, ⟨`{leanRef}`hw.right`{lit}`, `{leanRef}`hw.left`{lit}`⟩⟩`. Notice that an existential proposition is very similar to a sigma type, as described in dependent types section. The difference is that existential propositions are _propositions_, while sigma types are _types_. Otherwise, they are very similar. Given a predicate {lean}`p : α → Prop` and a family of types {lean}`β : α → Type`, for a term {lean}`a : α` with {lean}`h : p a` and {lean}`h' : β a`, the term {lean}`Exists.intro a h` has type {lean}`(∃ x : α, p x) : Prop`, while {lean}`Sigma.mk a h'` has type {lean}`(Σ x : α, β x)`. The similarity between {lit}`∃` and {lit}`Σ` is another instance of the {tech}[Curry-Howard isomorphism]. ::: Lean provides a more convenient way to eliminate from an existential quantifier with the {kw}`match` expression: ```lean variable (α : Type) (p q : α → Prop) example (h : ∃ x, p x ∧ q x) : ∃ x, q x ∧ p x := match h with | ⟨w, hw⟩ => ⟨w, hw.right, hw.left⟩ ``` The {kw}`match` expression is part of Lean's function definition system, which provides convenient and expressive ways of defining complex functions. Once again, it is the {tech}[Curry-Howard isomorphism] that allows us to co-opt this mechanism for writing proofs as well. The {kw}`match` statement “destructs” the existential assertion into the components {leanRef}`w` and {leanRef}`hw`, which can then be used in the body of the statement to prove the proposition. We can annotate the types used in the match for greater clarity: ```lean variable (α : Type) (p q : α → Prop) ------ example (h : ∃ x, p x ∧ q x) : ∃ x, q x ∧ p x := match h with | ⟨(w : α), (hw : p w ∧ q w)⟩ => ⟨w, hw.right, hw.left⟩ ``` We can even use the match statement to decompose the conjunction at the same time: ```lean variable (α : Type) (p q : α → Prop) ------ example (h : ∃ x, p x ∧ q x) : ∃ x, q x ∧ p x := match h with | ⟨w, hpw, hqw⟩ => ⟨w, hqw, hpw⟩ ``` Lean also provides a pattern-matching {kw}`let` expression: ```lean variable (α : Type) (p q : α → Prop) ------ example (h : ∃ x, p x ∧ q x) : ∃ x, q x ∧ p x := let ⟨w, hpw, hqw⟩ := h ⟨w, hqw, hpw⟩ ``` This is essentially just alternative notation for the {kw}`match` construct above. Lean will even allow us to use an implicit {kw}`match` in the {kw}`fun` expression: ```lean variable (α : Type) (p q : α → Prop) ------ example : (∃ x, p x ∧ q x) → ∃ x, q x ∧ p x := fun ⟨w, hpw, hqw⟩ => ⟨w, hqw, hpw⟩ ``` We will see in {ref "induction-and-recursion"}[Induction and Recursion] that all these variations are instances of a more general pattern-matching construct. :::setup ``` def IsEven (a : Nat) := ∃ b, a = 2 * b variable (a : Nat) ``` In the following example, we define {lean}`IsEven a` as {lean}`∃ b, a = 2 * b`, and then we show that the sum of two even numbers is an even number. ::: ```lean def IsEven (a : Nat) := ∃ b, a = 2 * b theorem even_plus_even (h1 : IsEven a) (h2 : IsEven b) : IsEven (a + b) := Exists.elim h1 (fun w1 (hw1 : a = 2 * w1) => Exists.elim h2 (fun w2 (hw2 : b = 2 * w2) => Exists.intro (w1 + w2) (calc a + b _ = 2 * w1 + 2 * w2 := by rw [hw1, hw2] _ = 2 * (w1 + w2) := by rw [Nat.mul_add]))) ``` Using the various gadgets described in this chapter—the match statement, anonymous constructors, and the {tactic}`rewrite` tactic, we can write this proof concisely as follows: ```lean def IsEven (a : Nat) := ∃ b, a = 2 * b ------ theorem even_plus_even (h1 : IsEven a) (h2 : IsEven b) : IsEven (a + b) := match h1, h2 with | ⟨w1, hw1⟩, ⟨w2, hw2⟩ => ⟨w1 + w2, by rw [hw1, hw2, Nat.mul_add]⟩ ``` :::leanFirst Just as the constructive “or” is stronger than the classical “or,” so, too, is the constructive “exists” stronger than the classical “exists”. For example, the following implication requires classical reasoning because, from a constructive standpoint, knowing that it is not the case that every {leanRef}`x` satisfies {leanRef}`¬ p` is not the same as having a particular {leanRef}`x` that satisfies {leanRef}`p`. ```lean open Classical variable (p : α → Prop) example (h : ¬ ∀ x, ¬ p x) : ∃ x, p x := byContradiction (fun h1 : ¬ ∃ x, p x => have h2 : ∀ x, ¬ p x := fun x => fun h3 : p x => have h4 : ∃ x, p x := ⟨x, h3⟩ show False from h1 h4 show False from h h2) ``` ::: What follows are some common identities involving the existential quantifier. In the exercises below, we encourage you to prove as many as you can. We also leave it to you to determine which are nonconstructive, and hence require some form of classical reasoning. ```lean open Classical variable (α : Type) (p q : α → Prop) variable (r : Prop) example : (∃ x : α, r) → r := sorry example (a : α) : r → (∃ x : α, r) := sorry example : (∃ x, p x ∧ r) ↔ (∃ x, p x) ∧ r := sorry example : (∃ x, p x ∨ q x) ↔ (∃ x, p x) ∨ (∃ x, q x) := sorry example : (∀ x, p x) ↔ ¬ (∃ x, ¬ p x) := sorry example : (∃ x, p x) ↔ ¬ (∀ x, ¬ p x) := sorry example : (¬ ∃ x, p x) ↔ (∀ x, ¬ p x) := sorry example : (¬ ∀ x, p x) ↔ (∃ x, ¬ p x) := sorry example : (∀ x, p x → r) ↔ (∃ x, p x) → r := sorry example (a : α) : (∃ x, p x → r) ↔ (∀ x, p x) → r := sorry example (a : α) : (∃ x, r → p x) ↔ (r → ∃ x, p x) := sorry ``` Notice that the second example and the last two examples require the assumption that there is at least one element {leanRef}`a` of type {leanRef}`α`. Here are solutions to two of the more difficult ones: ```lean open Classical variable (α : Type) (p q : α → Prop) variable (a : α) variable (r : Prop) example : (∃ x, p x ∨ q x) ↔ (∃ x, p x) ∨ (∃ x, q x) := Iff.intro (fun ⟨a, (h1 : p a ∨ q a)⟩ => Or.elim h1 (fun hpa : p a => Or.inl ⟨a, hpa⟩) (fun hqa : q a => Or.inr ⟨a, hqa⟩)) (fun h : (∃ x, p x) ∨ (∃ x, q x) => Or.elim h (fun ⟨a, hpa⟩ => ⟨a, (Or.inl hpa)⟩) (fun ⟨a, hqa⟩ => ⟨a, (Or.inr hqa)⟩)) example : (∃ x, p x → r) ↔ (∀ x, p x) → r := Iff.intro (fun ⟨b, (hb : p b → r)⟩ => fun h2 : ∀ x, p x => show r from hb (h2 b)) (fun h1 : (∀ x, p x) → r => show ∃ x, p x → r from byCases (fun hap : ∀ x, p x => ⟨a, λ h' => h1 hap⟩) (fun hnap : ¬ ∀ x, p x => byContradiction (fun hnex : ¬ ∃ x, p x → r => have hap : ∀ x, p x := fun x => byContradiction (fun hnp : ¬ p x => have hex : ∃ x, p x → r := ⟨x, (fun hp => absurd hp hnp)⟩ show False from hnex hex) show False from hnap hap))) ``` # More on the Proof Language %%% tag := "more-on-the-proof-language" %%% We have seen that keywords like {kw}`fun`, {kw}`have`, and {kw}`show` make it possible to write formal proof terms that mirror the structure of informal mathematical proofs. In this section, we discuss some additional features of the proof language that are often convenient. To start with, we can use anonymous {kw}`have` expressions to introduce an auxiliary goal without having to label it. We can refer to the last expression introduced in this way using the keyword {lit}`this`: ```lean variable (f : Nat → Nat) variable (h : ∀ x : Nat, f x ≤ f (x + 1)) example : f 0 ≤ f 3 := have : f 0 ≤ f 1 := h 0 have : f 0 ≤ f 2 := Nat.le_trans this (h 1) show f 0 ≤ f 3 from Nat.le_trans this (h 2) ``` Often proofs move from one fact to the next, so this can be effective in eliminating the clutter of lots of labels. When the goal can be inferred, we can also ask Lean instead to fill in the proof by writing {kw}`by assumption`: ```lean variable (f : Nat → Nat) variable (h : ∀ x : Nat, f x ≤ f (x + 1)) ------ example : f 0 ≤ f 3 := have : f 0 ≤ f 1 := h 0 have : f 0 ≤ f 2 := Nat.le_trans (by assumption) (h 1) show f 0 ≤ f 3 from Nat.le_trans (by assumption) (h 2) ``` This tells Lean to use the {leanRef}`assumption` tactic, which, in turn, proves the goal by finding a suitable hypothesis in the local context. We will learn more about the {leanRef}`assumption` tactic in the next chapter. :::setup ``` variable {p : Prop} (prf : p) ``` We can also ask Lean to fill in the proof by writing {lean}`‹p›`, where {lean}`p` is the proposition whose proof we want Lean to find in the context. You can type these corner quotes using {kbd}`\f<` and {kbd}`\f>`, respectively. The letter “f” is for “French,” since the Unicode symbols can also be used as French quotation marks. In fact, the notation is defined in Lean as follows: ::: ```lean notation "‹" p "›" => show p by assumption ``` This approach is more robust than using {leanRef}`by assumption`, because the type of the assumption that needs to be inferred is given explicitly. It also makes proofs more readable. Here is a more elaborate example: ```lean variable (f : Nat → Nat) variable (h : ∀ x : Nat, f x ≤ f (x + 1)) example : f 0 ≥ f 1 → f 1 ≥ f 2 → f 0 = f 2 := fun _ : f 0 ≥ f 1 => fun _ : f 1 ≥ f 2 => have : f 0 ≥ f 2 := Nat.le_trans ‹f 1 ≥ f 2› ‹f 0 ≥ f 1› have : f 0 ≤ f 2 := Nat.le_trans (h 0) (h 1) show f 0 = f 2 from Nat.le_antisymm this ‹f 0 ≥ f 2› ``` Keep in mind that you can use the French quotation marks in this way to refer to _anything_ in the context, not just things that were introduced anonymously. Its use is also not limited to propositions, though using it for data is somewhat odd: ```lean example (n : Nat) : Nat := ‹Nat› ``` Later, we show how you can extend the proof language using the Lean macro system. # Exercises %%% tag := none %%% 1. Prove these equivalences: ```lean variable (α : Type) (p q : α → Prop) example : (∀ x, p x ∧ q x) ↔ (∀ x, p x) ∧ (∀ x, q x) := sorry example : (∀ x, p x → q x) → (∀ x, p x) → (∀ x, q x) := sorry example : (∀ x, p x) ∨ (∀ x, q x) → ∀ x, p x ∨ q x := sorry ``` You should also try to understand why the reverse implication is not derivable in the last example. 2. It is often possible to bring a component of a formula outside a universal quantifier, when it does not depend on the quantified variable. Try proving these (one direction of the second of these requires classical logic): ```lean variable (α : Type) (p q : α → Prop) variable (r : Prop) example : α → ((∀ x : α, r) ↔ r) := sorry example : (∀ x, p x ∨ r) ↔ (∀ x, p x) ∨ r := sorry example : (∀ x, r → p x) ↔ (r → ∀ x, p x) := sorry ``` 3. Consider the “barber paradox,” that is, the claim that in a certain town there is a (male) barber that shaves all and only the men who do not shave themselves. Prove that this is a contradiction: ```lean variable (men : Type) (barber : men) variable (shaves : men → men → Prop) example (h : ∀ x : men, shaves barber x ↔ ¬ shaves x x) : False := sorry ``` 4. ::::setup ``` variable {n : Nat} ``` :::leanFirst Remember that, without any parameters, an expression of type {lean}`Prop` is just an assertion. Fill in the definitions of {leanRef}`prime` and {leanRef}`Fermat_prime` below, and construct each of the given assertions. For example, you can say that there are infinitely many primes by asserting that for every natural number {lean}`n`, there is a prime number greater than {lean}`n`. Goldbach's weak conjecture states that every odd number greater than 5 is the sum of three primes. Look up the definition of a Fermat prime or any of the other statements, if necessary. ```lean def even (n : Nat) : Prop := sorry def prime (n : Nat) : Prop := sorry def infinitely_many_primes : Prop := sorry def Fermat_prime (n : Nat) : Prop := sorry def infinitely_many_Fermat_primes : Prop := sorry def goldbach_conjecture : Prop := sorry def Goldbach's_weak_conjecture : Prop := sorry def Fermat's_last_theorem : Prop := sorry ``` ::: :::: 5. Prove as many of the identities listed in the Existential Quantifier section as you can. ================================================ FILE: book/TPiL/StructuresAndRecords.lean ================================================ import VersoManual import TPiL.Examples open Verso.Genre Manual open TPiL #doc (Manual) "Structures and Records" => %%% tag := "structures-and-records" %%% We have seen that Lean's foundational system includes inductive types. We have, moreover, noted that it is a remarkable fact that it is possible to construct a substantial edifice of mathematics based on nothing more than the type universes, dependent arrow types, and inductive types; everything else follows from those. The Lean standard library contains many instances of inductive types (e.g., {lean}`Nat`, {lean}`Prod`, {lean}`List`), and even the logical connectives are defined using inductive types. Recall that a non-recursive inductive type that contains only one constructor is called a _structure_ or _record_. The product type is a structure, as is the dependent product (Sigma) type. In general, whenever we define a structure {lit}`S`, we usually define _projection_ functions that allow us to “destruct” each instance of {lit}`S` and retrieve the values that are stored in its fields. The functions {lean}`Prod.fst` and {lean}`Prod.snd`, which return the first and second elements of a pair, are examples of such projections. When writing programs or formalizing mathematics, it is not uncommon to define structures containing many fields. The {kw}`structure` command, available in Lean, provides infrastructure to support this process. When we define a structure using this command, Lean automatically generates all the projection functions. The {kw}`structure` command also allows us to define new structures based on previously defined ones. Moreover, Lean provides convenient notation for defining instances of a given structure. # Declaring Structures %%% tag := "declaring-structures" %%% The structure command is essentially a “front end” for defining inductive data types. Every {kw}`structure` declaration introduces a namespace with the same name. The general form is as follows: ``` structure where :: ``` Most parts are optional. Here is an example: ```lean structure Point (α : Type u) where mk :: x : α y : α ``` :::setup ``` structure Point (α : Type u) where mk :: x : α y : α variable (p : Point α) (a b : α) ``` Values of type {leanRef}`Point` are created using {lean}`Point.mk a b`, and the fields of a point {lean}`p` are accessed using {lean}`Point.x p` and {lean}`Point.y p` (but {lean}`p.x` and {lean}`p.y` also work, see below). The structure command also generates useful recursors and theorems. Here are some of the constructions generated for the declaration above. ::: ```lean structure Point (α : Type u) where mk :: x : α y : α ------ -- a Type #check Point -- the eliminator #check @Point.rec -- the constructor #check @Point.mk -- @Point.mk : {α : Type u_1} → α → α → Point α -- a projection #check @Point.x -- @Point.x : {α : Type u_1} → Point α → α -- a projection #check @Point.y -- @Point.y : {α : Type u_1} → Point α → α ``` If the constructor name is not provided, then a constructor is named {lit}`mk` by default. :::leanFirst Here are some simple theorems and expressions that use the generated constructions. As usual, you can avoid the prefix {leanRef}`Point` by using the command {leanRef}`open Point`. ```lean structure Point (α : Type u) where x : α y : α ------ #eval Point.x (Point.mk 10 20) -- 10 #eval Point.y (Point.mk 10 20) -- 20 open Point example (a b : α) : x (mk a b) = a := rfl example (a b : α) : y (mk a b) = b := rfl ``` ::: :::setup ``` structure Point (α : Type u) where x : α y : α variable (p : Point Nat) ``` Given {lean}`p : Point Nat`, the dot notation {lean}`p.x` is shorthand for {lean}`Point.x p`. This provides a convenient way of accessing the fields of a structure. ::: ```lean structure Point (α : Type u) where x : α y : α ------ def p := Point.mk 10 20 #check p.x -- p.x : Nat #eval p.x -- 10 #eval p.y -- 20 ``` :::leanFirst The dot notation is convenient not just for accessing the projections of a record, but also for applying functions defined in a namespace with the same name. Recall from the {ref "conjunction"}[Conjunction section] if {leanRef}`p` has type {leanRef}`Point`, the expression {lit}`p.foo` is interpreted as {lit}`Point.foo p`, assuming that the first non-implicit argument to {lit}`foo` has type {leanRef}`Point`. The expression {leanRef}`p.add q` is therefore shorthand for {lit}`Point.add p q` in the example below. ```lean structure Point (α : Type u) where x : α y : α deriving Repr def Point.add (p q : Point Nat) := mk (p.x + q.x) (p.y + q.y) def p : Point Nat := Point.mk 1 2 def q : Point Nat := Point.mk 3 4 #eval p.add q -- { x := 4, y := 6 } ``` ::: :::setup ``` structure Point (α : Type u) where x : α y : α deriving Repr variable {α : Type u} ``` In the next chapter, you will learn how to define a function like {leanRef}`add` so that it works generically for elements of {lean}`Point α` rather than just {lean}`Point Nat`, assuming {lean}`α` has an associated addition operation. ::: :::leanFirst More generally, given an expression {lit}`p.foo x y z` where {lit}`p : Point`, Lean will insert {lit}`p` at the first argument to {lit}`Point.foo` of type {lit}`Point`. For example, with the definition of scalar multiplication below, {leanRef}`p.smul 3` is interpreted as {leanRef}`Point.smul 3 p`. ```lean structure Point (α : Type u) where x : α y : α deriving Repr ------ def Point.smul (n : Nat) (p : Point Nat) := Point.mk (n * p.x) (n * p.y) def p : Point Nat := Point.mk 1 2 #eval p.smul 3 -- { x := 3, y := 6 } example {p : Point Nat} : p.smul 3 = Point.smul 3 p := rfl ``` ::: It is common to use a similar trick with the {name}`List.map` function, which takes a list as its second non-implicit argument: ```lean #check @List.map def xs : List Nat := [1, 2, 3] def f : Nat → Nat := fun x => x * x #eval xs.map f -- [1, 4, 9] example {xs : List α} {f : α → β} : xs.map f = List.map f xs := rfl ``` Here {leanRef}`xs.map f` is interpreted as {leanRef}`List.map f xs`. # Objects %%% tag := "objects" %%% We have been using constructors to create elements of a structure type. For structures containing many fields, this is often inconvenient, because we have to remember the order in which the fields were defined. Lean therefore provides the following alternative notations for defining elements of a structure type. ``` { ( := )* : structure-type } or { ( := )* } ``` The suffix {lit}`: structure-type` can be omitted whenever the name of the structure can be inferred from the expected type. For example, we use this notation to define “points.” The order that the fields are specified does not matter, so all the expressions below define the same point. ```lean structure Point (α : Type u) where x : α y : α #check { x := 10, y := 20 : Point Nat } -- { x := 10, y := 20 } : Point Nat #check { y := 20, x := 10 : Point _ } -- { x := 10, y := 20 } : Point Nat #check ({ x := 10, y := 20 } : Point Nat) -- { x := 10, y := 20 } : Point Nat example : Point Nat := { y := 20, x := 10 } ``` Fields can be marked as implicit using curly braces. Implicit fields become implicit parameters to the constructor. If the value of a field is not specified, Lean tries to infer it. If the unspecified fields cannot be inferred, Lean flags an error indicating the corresponding placeholder could not be synthesized. ```lean structure MyStruct where {α : Type u} {β : Type v} a : α b : β #check { a := 10, b := true : MyStruct } ``` _Record update_ is another common operation which amounts to creating a new record object by modifying the value of one or more fields in an old one. Lean allows you to specify that unassigned fields in the specification of a record should be taken from a previously defined structure object {lit}`s` by adding the annotation {lit}`s `{kw}`with` before the field assignments. If more than one record object is provided, then they are visited in order until Lean finds one that contains the unspecified field. Lean raises an error if any of the field names remain unspecified after all the objects are visited. ```lean structure Point (α : Type u) where x : α y : α deriving Repr def p : Point Nat := { x := 1, y := 2 } #eval { p with y := 3 } -- { x := 1, y := 3 } #eval { p with x := 4 } -- { x := 4, y := 2 } structure Point3 (α : Type u) where x : α y : α z : α def q : Point3 Nat := { x := 5, y := 5, z := 5 } def r : Point3 Nat := { p, q with x := 6 } example : r.x = 6 := rfl example : r.y = 2 := rfl example : r.z = 5 := rfl ``` # Inheritance %%% tag := "inheritance" %%% We can _extend_ existing structures by adding new fields. This feature allows us to simulate a form of _inheritance_. ```lean structure Point (α : Type u) where x : α y : α inductive Color where | red | green | blue structure ColorPoint (α : Type u) extends Point α where c : Color ``` In the next example, we define a structure using multiple inheritance, and then define an object using objects of the parent structures. ```lean structure Point (α : Type u) where x : α y : α z : α structure RGBValue where red : Nat green : Nat blue : Nat structure RedGreenPoint (α : Type u) extends Point α, RGBValue where no_blue : blue = 0 def p : Point Nat := { x := 10, y := 10, z := 20 } def rgp : RedGreenPoint Nat := { p with red := 200, green := 40, blue := 0, no_blue := rfl } example : rgp.x = 10 := rfl example : rgp.red = 200 := rfl ``` ================================================ FILE: book/TPiL/Tactics.lean ================================================ import VersoManual import TPiL.Examples open Verso.Genre open Manual hiding tactic open TPiL #doc (Manual) "Tactics" => In this chapter, we describe an alternative approach to constructing proofs, using _tactics_. A proof term is a representation of a mathematical proof; tactics are commands, or instructions, that describe how to build such a proof. Informally, you might begin a mathematical proof by saying “to prove the forward direction, unfold the definition, apply the previous lemma, and simplify.” Just as these are instructions that tell the reader how to find the relevant proof, tactics are instructions that tell Lean how to construct a proof term. They naturally support an incremental style of writing proofs, in which you decompose a proof and work on goals one step at a time. We will describe proofs that consist of sequences of tactics as “tactic-style” proofs, to contrast with the ways of writing proof terms we have seen so far, which we will call “term-style” proofs. Each style has its own advantages and disadvantages. For example, tactic-style proofs can be harder to read, because they require the reader to predict or guess the results of each instruction. But they can also be shorter and easier to write. Moreover, tactics offer a gateway to using Lean's automation, since automated procedures are themselves tactics. # Entering Tactic Mode %%% tag := "entering-tactic-mode" %%% :::leanFirst Conceptually, stating a theorem or introducing a {kw}`have` statement creates a goal, namely, the goal of constructing a term with the expected type. For example, the following creates the goal of constructing a term of type {leanRef}`p ∧ q ∧ p`, in a context with constants {leanRef}`p q : Prop`, {leanRef}`hp : p` and {leanRef}`hq : q`: ```lean theorem test (p q : Prop) (hp : p) (hq : q) : p ∧ q ∧ p := by -- PROOF_STATE: X ^ sorry ``` ::: You can write this goal as follows: ```proofState X p : Prop q : Prop hp : p hq : q ⊢ p ∧ q ∧ p ``` Indeed, if you replace the “sorry” by an underscore in the example above, Lean will report that it is exactly this goal that has been left unsolved. Ordinarily, you meet such a goal by writing an explicit term. But wherever a term is expected, Lean allows us to insert instead a {lit}`by ` block, where {lit}`` is a sequence of commands, separated by semicolons or line breaks. You can prove the theorem above in that way: ```lean theorem test (p q : Prop) (hp : p) (hq : q) : p ∧ q ∧ p := by apply And.intro exact hp apply And.intro exact hq exact hp ``` We often put the {leanRef}`by` keyword on the preceding line, and write the example above as: ```lean theorem test (p q : Prop) (hp : p) (hq : q) : p ∧ q ∧ p := by apply And.intro -- ^ PROOF_STATE: intro exact hp apply And.intro exact hq exact hp ``` The {leanRef}`apply` tactic applies an expression, viewed as denoting a function with zero or more arguments. It unifies the conclusion with the expression in the current goal, and creates new goals for the remaining arguments, provided that no later arguments depend on them. In the example above, the command {leanRef}`apply And.intro` yields two subgoals: ```proofState intro case left p : Prop q : Prop hp : p hq : q ⊢ p case right p : Prop q : Prop hp : p hq : q ⊢ q ∧ p ``` The first goal is met with the command {leanRef}`exact hp`. The {leanRef}`exact` command is just a variant of {leanRef}`apply` which signals that the expression given should fill the goal exactly. It is good form to use it in a tactic proof, since its failure signals that something has gone wrong. It is also more robust than {leanRef}`apply`, since the elaborator takes the expected type, given by the target of the goal, into account when processing the expression that is being applied. In this case, however, {leanRef}`apply` would work just as well. You can see the resulting proof term with the {kw}`#print` command: ```lean theorem test (p q : Prop) (hp : p) (hq : q) : p ∧ q ∧ p := by apply And.intro exact hp apply And.intro exact hq exact hp ------ #print test ``` ::: TODO Check these. Vim? ::: You can write a tactic script incrementally. In VS Code, you can open a window to display messages by pressing {kbd}[`Ctrl` `Shift` `Enter`], and that window will then show you the current goal whenever the cursor is in a tactic block. If the proof is incomplete, the token {kw}`by` is decorated with a red squiggly line, and the error message contains the remaining goals. Tactic commands can take compound expressions, not just single identifiers. The following is a shorter version of the preceding proof: ```lean theorem test (p q : Prop) (hp : p) (hq : q) : p ∧ q ∧ p := by apply And.intro hp exact And.intro hq hp ``` Unsurprisingly, it produces exactly the same proof term: ```lean theorem test (p q : Prop) (hp : p) (hq : q) : p ∧ q ∧ p := by apply And.intro hp exact And.intro hq hp ------ #print test ``` Multiple tactic applications can be written in a single line by concatenating with a semicolon. ```lean theorem test (p q : Prop) (hp : p) (hq : q) : p ∧ q ∧ p := by apply And.intro hp; exact And.intro hq hp ``` Tactics that may produce multiple subgoals often tag them. For example, the tactic {leanRef}`apply And.intro` tagged the first subgoal as {goal intro}`left`, and the second as {goal intro}`right`. In the case of the {leanRef}`apply` tactic, the tags are inferred from the parameters' names used in the {leanRef}`And.intro` declaration. You can structure your tactics using the notation {kw}`case`{lit}` => `. The following is a structured version of our first tactic proof in this chapter. ```lean theorem test (p q : Prop) (hp : p) (hq : q) : p ∧ q ∧ p := by apply And.intro case left => exact hp case right => apply And.intro case left => exact hq case right => exact hp ``` :::leanFirst You can solve the subgoal {goal intro2}`right` before {goal intro2}`left` using the {leanRef}`case` notation: ```lean theorem test (p q : Prop) (hp : p) (hq : q) : p ∧ q ∧ p := by apply And.intro -- ^ PROOF_STATE: intro2 case right => apply And.intro case left => exact hq -- ^ PROOF_STATE: leftBranch case right => exact hp case left => exact hp ``` ::: Note that Lean hides the other goals inside the {leanRef}`case` block. After {leanRef}`case left =>`, the proof state is: ```proofState leftBranch p : Prop q : Prop hp : p hq : q ⊢ q ``` We say that {leanRef}`case` is “focusing” on the selected goal. Moreover, Lean flags an error if the selected goal is not fully solved at the end of the {leanRef}`case` block. For simple subgoals, it may not be worth selecting a subgoal using its tag, but you may still want to structure the proof. Lean also provides the “bullet” notation {lit}`. ` (or {lit}`· `) for structuring proofs: ```lean theorem test (p q : Prop) (hp : p) (hq : q) : p ∧ q ∧ p := by apply And.intro . exact hp . apply And.intro . exact hq . exact hp ``` # Basic Tactics %%% tag := "basic-tactics" %%% :::leanFirst In addition to {leanRef}`apply` and {leanRef}`exact`, another useful tactic is {leanRef}`intro`, which introduces a hypothesis. What follows is an example of an identity from propositional logic that we proved in a previous chapter, now proved using tactics. ```lean example (p q r : Prop) : p ∧ (q ∨ r) ↔ (p ∧ q) ∨ (p ∧ r) := by apply Iff.intro . intro h apply Or.elim (And.right h) . intro hq apply Or.inl apply And.intro . exact And.left h . exact hq . intro hr apply Or.inr apply And.intro . exact And.left h . exact hr . intro h apply Or.elim h . intro hpq apply And.intro . exact And.left hpq . apply Or.inl exact And.right hpq . intro hpr apply And.intro . exact And.left hpr . apply Or.inr exact And.right hpr ``` ::: The {leanRef}`intro` command can more generally be used to introduce a variable of any type: ```lean example (α : Type) : α → α := by intro a exact a example (α : Type) : ∀ x : α, x = x := by intro x exact Eq.refl x ``` You can use it to introduce several variables: ```lean example : ∀ a b c : Nat, a = b → a = c → c = b := by intro a b c h₁ h₂ exact Eq.trans (Eq.symm h₂) h₁ ``` :::setup ``` variable {α : Sort u} {p : Prop} {e : p} ``` As the {leanRef}`apply` tactic is a command for constructing function applications interactively, the {leanRef}`intro` tactic is a command for constructing function abstractions interactively (i.e., terms of the form {lean (type := "∀ (x : α), p")}`fun x => e`). As with lambda abstraction notation, the {leanRef}`intro` tactic allows us to use an implicit {kw}`match`. ::: ```lean example (p q : α → Prop) : (∃ x, p x ∧ q x) → ∃ x, q x ∧ p x := by intro ⟨w, hpw, hqw⟩ exact ⟨w, hqw, hpw⟩ ``` You can also provide multiple alternatives like in the {kw}`match` expression. ```lean example (p q : α → Prop) : (∃ x, p x ∨ q x) → ∃ x, q x ∨ p x := by intro | ⟨w, Or.inl h⟩ => exact ⟨w, Or.inr h⟩ | ⟨w, Or.inr h⟩ => exact ⟨w, Or.inl h⟩ ``` ::::leanFirst The {leanRef}`intros` tactic can be used without any arguments, in which case, it chooses names and introduces as many variables as it can. You will see an example of this in a moment. :::leanFirst The {leanRef}`assumption` tactic looks through the assumptions in context of the current goal, and if there is one matching the conclusion, it applies it. ```lean variable (x y z w : Nat) example (h₁ : x = y) (h₂ : y = z) (h₃ : z = w) : x = w := by apply Eq.trans h₁ apply Eq.trans h₂ assumption -- applied h₃ ``` ::: It will unify metavariables in the conclusion if necessary: ```lean variable (x y z w : Nat) example (h₁ : x = y) (h₂ : y = z) (h₃ : z = w) : x = w := by apply Eq.trans assumption -- solves x = ?b with h₁ apply Eq.trans assumption -- solves y = ?h₂.b with h₂ assumption -- solves z = w with h₃ ``` The following example uses the {leanRef}`intros` command to introduce the three variables and two hypotheses automatically: ```lean example : ∀ a b c : Nat, a = b → a = c → c = b := by intros apply Eq.trans apply Eq.symm assumption assumption ``` :::: :::leanFirst Note that names automatically generated by Lean are inaccessible by default. The motivation is to ensure your tactic proofs do not rely on automatically generated names, and are consequently more robust. However, you can use the combinator {leanRef}`unhygienic` to disable this restriction. ```lean example : ∀ a b c : Nat, a = b → a = c → c = b := by unhygienic intros apply Eq.trans apply Eq.symm exact a_2 exact a_1 ``` ::: :::leanFirst You can also use the {leanRef}`rename_i` tactic to rename the most recent inaccessible names in your context. In the following example, the tactic {leanRef}`rename_i h1 _ h2` renames two of the last three hypotheses in your context. ```lean example : ∀ a b c d : Nat, a = b → a = d → a = c → c = b := by intros rename_i h1 _ h2 apply Eq.trans apply Eq.symm exact h2 exact h1 ``` ::: :::leanFirst The {leanRef}`rfl` tactic solves goals that are reflexive relations applied to definitionally equal arguments. Equality is reflexive: ```lean example (y : Nat) : (fun x : Nat => 0) y = 0 := by rfl ``` ::: :::leanFirst The {leanRef}`repeat` combinator can be used to apply a tactic several times: ```lean example : ∀ a b c : Nat, a = b → a = c → c = b := by intros apply Eq.trans apply Eq.symm repeat assumption ``` ::: :::leanFirst Another tactic that is sometimes useful is the {leanRef}`revert` tactic, which is, in a sense, an inverse to {leanRef}`intro`: ```lean example (x : Nat) : x = x := by revert x -- ^ PROOF_STATE: afterRevert intro y -- ^ PROOF_STATE: afterRevertIntro rfl ``` After {leanRef}`revert x`, the proof state is: ```proofState afterRevert ⊢ ∀ (x : Nat), x = x ``` After {leanRef}`intro y`, it is: ```proofState afterRevertIntro y : Nat ⊢ y = y ``` ::: Moving a hypothesis into the goal yields an implication: ```lean example (x y : Nat) (h : x = y) : y = x := by revert h -- ^ PROOF_STATE: afterRevertH intro h₁ -- ^ PROOF_STATE: afterRevertHIntro -- goal is x y : Nat, h₁ : x = y ⊢ y = x apply Eq.symm assumption ``` After {leanRef}`revert h`, the proof state is: ```proofState afterRevertH x : Nat y : Nat ⊢ x = y → y = x ``` After {leanRef}`intro h₁`, it is: ```proofState afterRevertHIntro x : Nat y : Nat h₁ : x = y ⊢ y = x ``` :::leanFirst But {leanRef}`revert` is even more clever, in that it will revert not only an element of the context but also all the subsequent elements of the context that depend on it. For example, reverting {leanRef (in := "revert x")}`x` in the example above brings {leanRef}`h` along with it: ```lean example (x y : Nat) (h : x = y) : y = x := by revert x -- ^ PROOF_STATE: afterRevertXH intros apply Eq.symm assumption ``` After {leanRef}`revert x`, the goal is: ```proofState afterRevertXH y : Nat ⊢ ∀ (x : Nat), x = y → y = x ``` ::: You can also revert multiple elements of the context at once: ```lean example (x y : Nat) (h : x = y) : y = x := by revert x y -- ^ PROOF_STATE: revertXY intros apply Eq.symm assumption ``` After {leanRef}`revert x y`, the goal is: ```proofState revertXY ⊢ ∀ (x y : Nat), x = y → y = x ``` :::leanFirst You can only {leanRef}`revert` an element of the local context, that is, a local variable or hypothesis. But you can replace an arbitrary expression in the goal by a fresh variable using the {leanRef}`generalize` tactic: ```lean (showProofStates := "afterGen afterRevert afterIntro") example : 3 = 3 := by generalize 3 = x -- ^ PROOF_STATE: afterGen revert x -- ^ PROOF_STATE: afterRevert intro y -- ^ PROOF_STATE: afterIntro rfl ``` In particular, after {leanRef}`generalize`, the goal is ```proofState afterGen x : Nat ⊢ x = x ``` ::: The mnemonic in the notation above is that you are generalizing the goal by setting {leanRef}`3` to an arbitrary variable {leanRef (in := "revert x")}`x`. Be careful: not every generalization preserves the validity of the goal. Here, {leanRef}`generalize` replaces a goal that could be proved using {tactic}`rfl` with one that is not provable: ```lean (showProofStates := "afterGen") example : 2 + 3 = 5 := by generalize 3 = x -- ^ PROOF_STATE: afterGen sorry ``` In this example, the {leanRef}`sorry` tactic is the analogue of the {lean}`sorry` proof term. It closes the current goal, producing the usual warning that {lean}`sorry` has been used. To preserve the validity of the previous goal, the {leanRef}`generalize` tactic allows us to record the fact that {leanRef}`3` has been replaced by {leanRef}`x`. All you need to do is to provide a label, and {leanRef}`generalize` uses it to store the assignment in the local context: ```lean example : 2 + 3 = 5 := by generalize h : 3 = x -- ^ PROOF_STATE: afterGen rw [← h] ``` Following {leanRef}`generalize h : 3 = x`, {leanRef}`h` is a proof that {leanRef}`3 = x`: ```proofState afterGen x : Nat h : 3 = x ⊢ 2 + x = 5 ``` Here the rewriting tactic {leanRef}`rw` uses {leanRef}`h` to replace {leanRef}`x` by {leanRef}`3` again. The {leanRef}`rw` tactic will be discussed below. # More Tactics %%% tag := "more-tactics" %%% :::leanFirst Some additional tactics are useful for constructing and destructing propositions and data. For example, when applied to a goal of the form {leanRef}`p ∨ q`, you use tactics such as {leanRef}`apply Or.inl` and {leanRef}`apply Or.inr`. Conversely, the {leanRef}`cases` tactic can be used to decompose a disjunction: ```lean example (p q : Prop) : p ∨ q → q ∨ p := by intro h cases h with | inl hp => apply Or.inr; exact hp | inr hq => apply Or.inl; exact hq ``` ::: Note that the syntax is similar to the one used in {kw}`match` expressions. The new subgoals can be solved in any order: ```lean example (p q : Prop) : p ∨ q → q ∨ p := by intro h cases h with | inr hq => apply Or.inl; exact hq | inl hp => apply Or.inr; exact hp ``` You can also use a (unstructured) {leanRef}`cases` without the {leanRef}`with` and a tactic for each alternative: ```lean example (p q : Prop) : p ∨ q → q ∨ p := by intro h cases h apply Or.inr assumption apply Or.inl assumption ``` The (unstructured) {leanRef}`cases` is particularly useful when you can close several subgoals using the same tactic: ```lean example (p : Prop) : p ∨ p → p := by intro h cases h repeat assumption ``` You can also use the combinator {lit}`tac1 `{tactic}`<;>`{lit}` tac2` to apply {lit}`tac2` to each subgoal produced by tactic {lit}`tac1`: ```lean example (p : Prop) : p ∨ p → p := by intro h cases h <;> assumption ``` :::leanFirst You can combine the unstructured {leanRef}`cases` tactic with the {leanRef}`case` and {leanRef}`.` notation: ```lean example (p q : Prop) : p ∨ q → q ∨ p := by intro h cases h . apply Or.inr assumption . apply Or.inl assumption example (p q : Prop) : p ∨ q → q ∨ p := by intro h cases h case inr h => apply Or.inl assumption case inl h => apply Or.inr assumption example (p q : Prop) : p ∨ q → q ∨ p := by intro h cases h case inr h => apply Or.inl assumption . apply Or.inr assumption ``` ::: The {leanRef}`cases` tactic can also be used to decompose a conjunction: ```lean example (p q : Prop) : p ∧ q → q ∧ p := by intro h cases h with | intro hp hq => constructor; exact hq; exact hp -- ^ PROOF_STATE: afterIntroCase ``` In this example, there is only one goal after the {leanRef}`cases` tactic is applied, with {leanRef}`h`{lit}` : `{leanRef}`p ∧ q` replaced by a pair of assumptions, {leanRef}`hp`{lit}` : `{leanRef}`p` and {leanRef}`hq`{lit}` : `{leanRef}`q`: ```proofState afterIntroCase case intro p : Prop q : Prop hp : p hq : q ⊢ q ∧ p ``` The {leanRef}`constructor` tactic applies the unique constructor for conjunction, {lean}`And.intro`. With these tactics, an example from the previous section can be rewritten as follows: ```lean example (p q r : Prop) : p ∧ (q ∨ r) ↔ (p ∧ q) ∨ (p ∧ r) := by apply Iff.intro . intro h cases h with | intro hp hqr => cases hqr . apply Or.inl; constructor <;> assumption . apply Or.inr; constructor <;> assumption . intro h cases h with | inl hpq => cases hpq with | intro hp hq => constructor; exact hp; apply Or.inl; exact hq | inr hpr => cases hpr with | intro hp hr => constructor; exact hp; apply Or.inr; exact hr ``` You will see in {ref "inductive-types"}[Inductive Types] that these tactics are quite general. The {leanRef}`cases` tactic can be used to decompose any element of an inductively defined type; {leanRef}`constructor` always applies the first applicable constructor of an inductively defined type. For example, you can use {leanRef}`cases` and {leanRef}`constructor` with an existential quantifier: ```lean example (p q : Nat → Prop) : (∃ x, p x) → ∃ x, p x ∨ q x := by intro h cases h with | intro x px => constructor; apply Or.inl; exact px ``` Here, the {leanRef}`constructor` tactic leaves the first component of the existential assertion, the value of {leanRef}`x`, implicit. It is represented by a metavariable, which should be instantiated later on. In the previous example, the proper value of the metavariable is determined by the tactic {leanRef}`exact px`, since {leanRef}`px` has type {leanRef}`p x`. If you want to specify a witness to the existential quantifier explicitly, you can use the {tactic}`exists` tactic instead: ```lean example (p q : Nat → Prop) : (∃ x, p x) → ∃ x, p x ∨ q x := by intro h cases h with | intro x px => exists x; apply Or.inl; exact px ``` Here is another example: ```lean example (p q : Nat → Prop) : (∃ x, p x ∧ q x) → ∃ x, q x ∧ p x := by intro h cases h with | intro x hpq => cases hpq with | intro hp hq => exists x ``` These tactics can be used on data just as well as propositions. In the next example, they are used to define functions which swap the components of the product and sum types: ```lean def swap_pair : α × β → β × α := by intro p cases p constructor <;> assumption def swap_sum : Sum α β → Sum β α := by intro p cases p . apply Sum.inr; assumption . apply Sum.inl; assumption ``` Note that up to the names we have chosen for the variables, the definitions are identical to the proofs of the analogous propositions for conjunction and disjunction. The {leanRef}`cases` tactic will also do a case distinction on a natural number: ```lean open Nat example (P : Nat → Prop) (h₀ : P 0) (h₁ : ∀ n, P (succ n)) (m : Nat) : P m := by cases m with | zero => exact h₀ | succ m' => exact h₁ m' ``` The {leanRef}`cases` tactic, and its companion, the {tactic}`induction` tactic, are discussed in greater detail in the {ref "tactics-for-inductive-types"}[Tactics for Inductive Types] section. :::leanFirst The {leanRef}`contradiction` tactic searches for a contradiction among the hypotheses of the current goal: ```lean example (p q : Prop) : p ∧ ¬ p → q := by intro h cases h contradiction ``` ::: :::leanFirst You can also use {tactic}`match` in tactic blocks. ```lean example (p q r : Prop) : p ∧ (q ∨ r) ↔ (p ∧ q) ∨ (p ∧ r) := by apply Iff.intro . intro h match h with | ⟨_, Or.inl _⟩ => apply Or.inl; constructor <;> assumption | ⟨_, Or.inr _⟩ => apply Or.inr; constructor <;> assumption . intro h match h with | Or.inl ⟨hp, hq⟩ => constructor; exact hp; apply Or.inl; exact hq | Or.inr ⟨hp, hr⟩ => constructor; exact hp; apply Or.inr; exact hr ``` ::: :::leanFirst You can “combine” {leanRef}`intro` with {tactic}`match` and write the previous examples as follows: ```lean example (p q r : Prop) : p ∧ (q ∨ r) ↔ (p ∧ q) ∨ (p ∧ r) := by apply Iff.intro . intro | ⟨hp, Or.inl hq⟩ => apply Or.inl; constructor <;> assumption | ⟨hp, Or.inr hr⟩ => apply Or.inr; constructor <;> assumption . intro | Or.inl ⟨hp, hq⟩ => constructor; assumption; apply Or.inl; assumption | Or.inr ⟨hp, hr⟩ => constructor; assumption; apply Or.inr; assumption ``` ::: # Structuring Tactic Proofs %%% tag := "structuring-tactic-proofs" %%% Tactics often provide an efficient way of building a proof, but long sequences of instructions can obscure the structure of the argument. In this section, we describe some means that help provide structure to a tactic-style proof, making such proofs more readable and robust. :::leanFirst One thing that is nice about Lean's proof-writing syntax is that it is possible to mix term-style and tactic-style proofs, and pass between the two freely. For example, the tactics {leanRef}`apply` and {leanRef}`exact` expect arbitrary terms, which you can write using {kw}`have`, {kw}`show`, and so on. Conversely, when writing an arbitrary Lean term, you can always invoke the tactic mode by inserting a {kw}`by` block. The following is a somewhat toy example: ```lean example (p q r : Prop) : p ∧ (q ∨ r) → (p ∧ q) ∨ (p ∧ r) := by intro h exact have hp : p := h.left have hqr : q ∨ r := h.right show (p ∧ q) ∨ (p ∧ r) by cases hqr with | inl hq => exact Or.inl ⟨hp, hq⟩ | inr hr => exact Or.inr ⟨hp, hr⟩ ``` ::: The following is a more natural example: ```lean example (p q r : Prop) : p ∧ (q ∨ r) ↔ (p ∧ q) ∨ (p ∧ r) := by apply Iff.intro . intro h cases h.right with | inl hq => exact Or.inl ⟨h.left, hq⟩ | inr hr => exact Or.inr ⟨h.left, hr⟩ . intro h cases h with | inl hpq => exact ⟨hpq.left, Or.inl hpq.right⟩ | inr hpr => exact ⟨hpr.left, Or.inr hpr.right⟩ ``` :::leanFirst In fact, there is a {tactic}`show` tactic, which is similar to the {kw}`show` expression in a proof term. It simply declares the type of the goal that is about to be solved, while remaining in tactic mode. ```lean example (p q r : Prop) : p ∧ (q ∨ r) ↔ (p ∧ q) ∨ (p ∧ r) := by apply Iff.intro . intro h cases h.right with | inl hq => show (p ∧ q) ∨ (p ∧ r) exact Or.inl ⟨h.left, hq⟩ | inr hr => show (p ∧ q) ∨ (p ∧ r) exact Or.inr ⟨h.left, hr⟩ . intro h cases h with | inl hpq => show p ∧ (q ∨ r) exact ⟨hpq.left, Or.inl hpq.right⟩ | inr hpr => show p ∧ (q ∨ r) exact ⟨hpr.left, Or.inr hpr.right⟩ ``` ::: The {tactic}`show` tactic can actually be used to rewrite a goal to something definitionally equivalent: ```lean example (n : Nat) : n + 1 = Nat.succ n := by show Nat.succ n = Nat.succ n rfl ``` There is also a {tactic}`have` tactic, which introduces a new subgoal, just as when writing proof terms: ```lean example (p q r : Prop) : p ∧ (q ∨ r) → (p ∧ q) ∨ (p ∧ r) := by intro ⟨hp, hqr⟩ show (p ∧ q) ∨ (p ∧ r) cases hqr with | inl hq => have hpq : p ∧ q := And.intro hp hq apply Or.inl exact hpq | inr hr => have hpr : p ∧ r := And.intro hp hr apply Or.inr exact hpr ``` :::leanFirst As with proof terms, you can omit the label in the {tactic}`have` tactic, in which case, the default label {leanRef}`this` is used: ```lean example (p q r : Prop) : p ∧ (q ∨ r) → (p ∧ q) ∨ (p ∧ r) := by intro ⟨hp, hqr⟩ show (p ∧ q) ∨ (p ∧ r) cases hqr with | inl hq => have : p ∧ q := And.intro hp hq apply Or.inl exact this | inr hr => have : p ∧ r := And.intro hp hr apply Or.inr exact this ``` ::: :::leanFirst The types in a {tactic}`have` tactic can be omitted, so you can write {lit}`have hp := h.left` and {lit}`have hqr := h.right`. In fact, with this notation, you can even omit both the type and the label, in which case the new fact is introduced with the label {leanRef}`this`: ```lean example (p q r : Prop) : p ∧ (q ∨ r) → (p ∧ q) ∨ (p ∧ r) := by intro ⟨hp, hqr⟩ cases hqr with | inl hq => have := And.intro hp hq apply Or.inl; exact this | inr hr => have := And.intro hp hr apply Or.inr; exact this ``` ::: Lean also has a {tactic}`let` tactic, which is similar to the {tactic}`have` tactic, but is used to introduce local definitions instead of auxiliary facts. It is the tactic analogue of a {kw}`let` in a proof term: ```lean example : ∃ x, x + 2 = 8 := by let a : Nat := 3 * 2 exists a ``` As with {tactic}`have`, you can leave the type implicit by writing {lit}`let a := 3 * 2`. The difference between {tactic}`let` and {tactic}`have` is that {tactic}`let` introduces a local definition in the context, so that the definition of the local declaration can be unfolded in the proof. We have used {leanRef}`.` to create nested tactic blocks. In a nested block, Lean focuses on the first goal, and generates an error if it has not been fully solved at the end of the block. This can be helpful in indicating the separate proofs of multiple subgoals introduced by a tactic. The notation {leanRef}`.` is whitespace sensitive and relies on the indentation to detect whether the tactic block ends. Alternatively, you can define tactic blocks using curly braces and semicolons: ```lean example (p q r : Prop) : p ∧ (q ∨ r) ↔ (p ∧ q) ∨ (p ∧ r) := by apply Iff.intro { intro h; cases h.right; { show (p ∧ q) ∨ (p ∧ r); exact Or.inl ⟨h.left, ‹q›⟩ } { show (p ∧ q) ∨ (p ∧ r); exact Or.inr ⟨h.left, ‹r›⟩ } } { intro h; cases h; { show p ∧ (q ∨ r); rename_i hpq; exact ⟨hpq.left, Or.inl hpq.right⟩ } { show p ∧ (q ∨ r); rename_i hpr; exact ⟨hpr.left, Or.inr hpr.right⟩ } } ``` It is useful to use indentation to structure proof: every time a tactic leaves more than one subgoal, we separate the remaining subgoals by enclosing them in blocks and indenting. Thus if the application of theorem {lit}`foo` to a single goal produces four subgoals, one would expect the proof to look like this: ``` apply foo . . . . ``` or ``` apply foo case => case => case => case => ``` or ``` apply foo { } { } { } { } ``` # Tactic Combinators %%% tag := "tactic-combinators" %%% _Tactic combinators_ are operations that form new tactics from old ones. A sequencing combinator is already implicit in the {kw}`by` block: ```lean example (p q : Prop) (hp : p) : p ∨ q := by apply Or.inl; assumption ``` Here, {leanRef}`apply Or.inl; assumption` is functionally equivalent to a single tactic which first applies {leanRef}`apply Or.inl` and then applies {leanRef}`assumption`. In {lit}`t₁ `{tactic}`<;>`{lit}` t₂`, the {leanRef}`<;>` operator provides a _parallel_ version of the sequencing operation: {lit}`t₁` is applied to the current goal, and then {lit}`t₂` is applied to _all_ the resulting subgoals: ```lean example (p q : Prop) (hp : p) (hq : q) : p ∧ q := by constructor <;> assumption ``` This is especially useful when the resulting goals can be finished off in a uniform way, or, at least, when it is possible to make progress on all of them uniformly. The {tactic}`first`{lit}` | t₁ | t₂ | ... | tₙ` applies each {lit}`tᵢ` until one succeeds, or else fails: ```lean example (p q : Prop) (hp : p) : p ∨ q := by first | apply Or.inl; assumption | apply Or.inr; assumption example (p q : Prop) (hq : q) : p ∨ q := by first | apply Or.inl; assumption | apply Or.inr; assumption ``` In the first example, the left branch succeeds, whereas in the second one, it is the right one that succeeds. In the next three examples, the same compound tactic succeeds in each case: ```lean example (p q r : Prop) (hp : p) : p ∨ q ∨ r := by repeat (first | apply Or.inl; assumption | apply Or.inr | assumption) example (p q r : Prop) (hq : q) : p ∨ q ∨ r := by repeat (first | apply Or.inl; assumption | apply Or.inr | assumption) example (p q r : Prop) (hr : r) : p ∨ q ∨ r := by repeat (first | apply Or.inl; assumption | apply Or.inr | assumption) ``` The tactic tries to solve the left disjunct immediately by assumption; if that fails, it tries to focus on the right disjunct; and if that doesn't work, it invokes the assumption tactic. :::leanFirst You will have no doubt noticed by now that tactics can fail. Indeed, it is the “failure” state that causes the _first_ combinator to backtrack and try the next tactic. The {leanRef}`try` combinator builds a tactic that always succeeds, though possibly in a trivial way: {tactic}`try`{lit}` t` executes {lit}`t` and reports success, even if {lit}`t` fails. It is equivalent to {tactic}`first`{lit}` | t | `{tactic}`skip`, where {tactic}`skip` is a tactic that does nothing (and succeeds in doing so). In the next example, the second {leanRef}`constructor` succeeds on the right conjunct {leanRef}`q ∧ r` (remember that disjunction and conjunction associate to the right) but fails on the first. The {leanRef}`try` tactic ensures that the sequential composition succeeds: ```lean example (p q r : Prop) (hp : p) (hq : q) (hr : r) : p ∧ q ∧ r := by constructor <;> (try constructor) <;> assumption ``` ::: Be careful: {tactic}`repeat`{lit}` (`{tactic}`try`{lit}` t)` will loop forever, because the inner tactic never fails. In a proof, there are often multiple goals outstanding. Parallel sequencing is one way to arrange it so that a single tactic is applied to multiple goals, but there are other ways to do this. For example, {tactic}`all_goals`{lit}` t` applies {lit}`t` to all open goals: ```lean example (p q r : Prop) (hp : p) (hq : q) (hr : r) : p ∧ q ∧ r := by constructor all_goals (try constructor) all_goals assumption ``` In this case, the {tactic}`any_goals` tactic provides a more robust solution. It is similar to {tactic}`all_goals`, except it succeeds if its argument succeeds on at least one goal: ```lean example (p q r : Prop) (hp : p) (hq : q) (hr : r) : p ∧ q ∧ r := by constructor any_goals constructor any_goals assumption ``` The first tactic in the {kw}`by` block below repeatedly splits conjunctions: ```lean example (p q r : Prop) (hp : p) (hq : q) (hr : r) : p ∧ ((p ∧ q) ∧ r) ∧ (q ∧ r ∧ p) := by repeat (any_goals constructor) all_goals assumption ``` In fact, we can compress the full tactic down to one line: ```lean example (p q r : Prop) (hp : p) (hq : q) (hr : r) : p ∧ ((p ∧ q) ∧ r) ∧ (q ∧ r ∧ p) := by repeat (any_goals (first | constructor | assumption)) ``` The combinator {tactic}`focus`{lit}` t` ensures that {lit}`t` only effects the current goal, temporarily hiding the others from the scope. So, if {lit}`t` ordinarily only effects the current goal, {tactic}`focus`{lit}` (`{tactic}`all_goals`{lit}` t)` has the same effect as {lit}`t`. # Rewriting %%% tag := "rewriting" %%% The {tactic}`rw` tactic and the {tactic}`simp` tactic were introduced briefly in {ref "calculational-proofs"}[Calculational Proofs]. In this section and the next, we discuss them in greater detail. :::setup ``` variable (x y : α) (h : x = y) theorem add_comm : ∀ (x y : Nat), x + y = y + x := by omega ``` The {tactic}`rw` tactic provides a basic mechanism for applying substitutions to goals and hypotheses, providing a convenient and efficient way of working with equality. The most basic form of the tactic is {tactic}`rw`{lit}` [t]`, where {lit}`t` is a term whose type asserts an equality. For example, {lit}`t` can be a hypothesis {lean}`h : x = y` in the context; it can be a general lemma, like {lean}`add_comm : ∀ x y, x + y = y + x`, in which the rewrite tactic tries to find suitable instantiations of {lean}`x` and {lean}`y`; or it can be any compound term asserting a concrete or general equation. In the following example, we use this basic form to rewrite the goal using a hypothesis. ::: ```lean variable (k : Nat) (f : Nat → Nat) example (h₁ : f 0 = 0) (h₂ : k = 0) : f k = 0 := by rw [h₂] -- replace k with 0 rw [h₁] -- replace f 0 with 0 ``` :::setup ``` variable (t : α) ``` In the example above, the first use of {leanRef}`rw` replaces {leanRef}`k` with {leanRef}`0` in the goal {leanRef}`f k = 0`. Then, the second one replaces {leanRef}`f 0` with {leanRef}`0`. The tactic automatically closes any goal of the form {lean}`t = t`. Here is an example of rewriting using a compound expression: ::: ```lean example (x y : Nat) (p : Nat → Prop) (q : Prop) (h : q → x = y) (h' : p y) (hq : q) : p x := by rw [h hq]; assumption ``` Here, {leanRef}`h hq` establishes the equation {leanRef}`x = y`. Multiple rewrites can be combined using the notation {tactic}`rw`{lit}` [t_1, ..., t_n]`, which is just shorthand for {tactic}`rw`{lit}` [t_1]; ...; `{tactic}`rw`{lit}` [t_n]`. The previous example can be written as follows: ```lean variable (k : Nat) (f : Nat → Nat) example (h₁ : f 0 = 0) (h₂ : k = 0) : f k = 0 := by rw [h₂, h₁] ``` By default, {leanRef}`rw` uses an equation in the forward direction, matching the left-hand side with an expression, and replacing it with the right-hand side. The notation {lit}`←t` can be used to instruct the tactic to use the equality {lit}`t` in the reverse direction. ```lean variable (a b : Nat) (f : Nat → Nat) example (h₁ : a = b) (h₂ : f a = 0) : f b = 0 := by rw [←h₁, h₂] ``` In this example, the term {leanRef}`←h₁` instructs the rewriter to replace {leanRef}`b` with {leanRef}`a`. In the editors, you can type the backwards arrow as {kbd}`\l`. You can also use the ASCII equivalent, {lit}`<-`. Sometimes the left-hand side of an identity can match more than one subterm in the pattern, in which case the {tactic}`rw` tactic chooses the first match it finds when traversing the term. If that is not the one you want, you can use additional arguments to specify the appropriate subterm. ```lean example (a b c : Nat) : a + b + c = a + c + b := by rw [Nat.add_assoc, Nat.add_comm b, ← Nat.add_assoc] example (a b c : Nat) : a + b + c = a + c + b := by rw [Nat.add_assoc, Nat.add_assoc, Nat.add_comm b] example (a b c : Nat) : a + b + c = a + c + b := by rw [Nat.add_assoc, Nat.add_assoc, Nat.add_comm _ b] ``` :::TODO Get the intermediate proof states from `rw` into the reference ring to help these examples be better ::: In the first example above, the first step rewrites {leanRef}`a + b + c` to {leanRef}`a`{lit}` + (`{leanRef}`b + c`{lit}`)`. The next step applies commutativity to the term {leanRef}`b + c`; without specifying the argument, the tactic would instead rewrite {leanRef}`a`{lit}` + (`{leanRef}`b + c`{lit}`)` to {lit}`(`{leanRef}`b + c`{lit}`) + `{leanRef}`a`. Finally, the last step applies associativity in the reverse direction, rewriting {leanRef}`a`{lit}` + (`{leanRef}`c`{lit}` + `{leanRef}`b`{lit}`)` to {leanRef}`a + c + b`. The next two examples instead apply associativity to move the parenthesis to the right on both sides, and then switch {leanRef}`b` and {leanRef}`c`. Notice that the last example specifies that the rewrite should take place on the right-hand side by specifying the second argument to {leanRef}`Nat.add_comm`. By default, the {leanRef}`rw` tactic affects only the goal. The notation {tactic}`rw`{lit}` [t] `{kw}`at`{lit}` h` applies the rewrite ```lean example (f : Nat → Nat) (a : Nat) (h : a + 0 = 0) : f a = f 0 := by rw [Nat.add_zero] at h rw [h] ``` The first step, {leanRef}`rw [Nat.add_zero] at h`, rewrites the hypothesis {leanRef}`a + 0 = 0` to {leanRef}`a = 0`. Then the new hypothesis {leanRef}`a = 0` is used to rewrite the goal to {leanRef}`f 0`{lit}` = `{leanRef}`f 0`. :::leanFirst The {leanRef}`rw` tactic is not restricted to propositions. In the following example, we use {tactic}`rw`{lit}` [h] `{kw}`at`{lit}` t` to rewrite the hypothesis {leanRef}`t : Tuple α n` to {leanRef}`t : Tuple α`{lit}` 0`. ```lean def Tuple (α : Type) (n : Nat) := { as : List α // as.length = n } example (n : Nat) (h : n = 0) (t : Tuple α n) : Tuple α 0 := by rw [h] at t exact t ``` ::: # Using the Simplifier %%% tag := "using-the-simplifier" %%% Whereas {tactic}`rw` is designed as a surgical tool for manipulating a goal, the simplifier offers a more powerful form of automation. A number of identities in Lean's library have been tagged with the {attr}`[simp]` attribute, and the {tactic}`simp` tactic uses them to iteratively rewrite subterms in an expression. ```lean example (x y z : Nat) : (x + 0) * (0 + y * 1 + z * 0) = x * y := by simp example (x y z : Nat) (p : Nat → Prop) (h : p (x * y)) : p ((x + 0) * (0 + y * 1 + z * 0)) := by simp; assumption ``` In the first example, the left-hand side of the equality in the goal is simplified using the usual identities involving 0 and 1, reducing the goal to {leanRef}`x * y`{lit}` = `{leanRef}`x * y`. At that point, {leanRef}`simp` applies reflexivity to finish it off. In the second example, {leanRef}`simp` reduces the goal to {leanRef}`p (x * y)`, at which point the assumption {leanRef}`h` finishes it off. Here are some more examples with lists: ```lean open List example (xs : List Nat) : reverse (xs ++ [1, 2, 3]) = [3, 2, 1] ++ reverse xs := by simp example (xs ys : List α) : length (reverse (xs ++ ys)) = length xs + length ys := by simp [Nat.add_comm] ``` As with {leanRef}`rw`, you can use the keyword {leanRef}`at` to simplify a hypothesis: ```lean example (x y z : Nat) (p : Nat → Prop) (h : p ((x + 0) * (0 + y * 1 + z * 0))) : p (x * y) := by simp at h; assumption ``` Moreover, you can use a “wildcard” asterisk to simplify all the hypotheses and the goal: ```lean attribute [local simp] Nat.mul_comm Nat.mul_assoc Nat.mul_left_comm attribute [local simp] Nat.add_assoc Nat.add_comm Nat.add_left_comm example (w x y z : Nat) (p : Nat → Prop) (h : p (x * y + z * w * x)) : p (x * w * z + y * x) := by simp at *; assumption example (x y z : Nat) (p : Nat → Prop) (h₁ : p (1 * x + y)) (h₂ : p (x * z * 1)) : p (y + 0 + x) ∧ p (z * x) := by simp at * <;> constructor <;> assumption ``` :::setup ``` variable (x y z : Nat) ``` For operations that are commutative and associative, like multiplication on the natural numbers, the simplifier uses these two facts to rewrite an expression, as well as _left commutativity_. In the case of multiplication the latter is expressed as follows: {lean}`x * (y * z) = y * (x * z)`. The {leanRef}`local` modifier tells the simplifier to use these rules in the current file (or section or namespace, as the case may be). It may seem that commutativity and left-commutativity are problematic, in that repeated application of either causes looping. But the simplifier detects identities that permute their arguments, and uses a technique known as _ordered rewriting_. This means that the system maintains an internal ordering of terms, and only applies the identity if doing so decreases the order. With the three identities mentioned above, this has the effect that all the parentheses in an expression are associated to the right, and the expressions are ordered in a canonical (though somewhat arbitrary) way. Two expressions that are equivalent up to associativity and commutativity are then rewritten to the same canonical form. ::: ```lean attribute [local simp] Nat.mul_comm Nat.mul_assoc Nat.mul_left_comm attribute [local simp] Nat.add_assoc Nat.add_comm Nat.add_left_comm ------ example (w x y z : Nat) (p : Nat → Prop) : x * y + z * w * x = x * w * z + y * x := by simp example (w x y z : Nat) (p : Nat → Prop) (h : p (x * y + z * w * x)) : p (x * w * z + y * x) := by simp; simp at h; assumption ``` As with {tactic}`rw`, you can send {tactic}`simp` a list of facts to use, including general lemmas, local hypotheses, definitions to unfold, and compound expressions. The {tactic}`simp` tactic also recognizes the {lit}`←t` syntax that {tactic}`rewrite` does. In any case, the additional rules are added to the collection of identities that are used to simplify a term. ```lean def f (m n : Nat) : Nat := m + n + m example {m n : Nat} (h : n = 1) (h' : 0 = m) : (f m n) = n := by simp [h, ←h', f] ``` A common idiom is to simplify a goal using local hypotheses: ```lean variable (k : Nat) (f : Nat → Nat) example (h₁ : f 0 = 0) (h₂ : k = 0) : f k = 0 := by simp [h₁, h₂] ``` :::leanFirst To use all the hypotheses present in the local context when simplifying, we can use the wildcard symbol, {leanRef}`*`: ```lean variable (k : Nat) (f : Nat → Nat) example (h₁ : f 0 = 0) (h₂ : k = 0) : f k = 0 := by simp [*] ``` ::: Here is another example: ```lean example (u w x y z : Nat) (h₁ : x = y + z) (h₂ : w = u + x) : w = z + y + u := by simp [*, Nat.add_comm] ``` :::leanFirst The simplifier will also do propositional rewriting. For example, using the hypothesis {leanRef (in := "p ∧ q")}`p`, it rewrites {leanRef}`p ∧ q` to {leanRef (in := "p ∨ q")}`q` and {leanRef}`p ∨ q` to {lean}`True`, which it then proves trivially. Iterating such rewrites produces nontrivial propositional reasoning. ```lean example (p q : Prop) (hp : p) : p ∧ q ↔ q := by simp [*] example (p q : Prop) (hp : p) : p ∨ q := by simp [*] example (p q r : Prop) (hp : p) (hq : q) : p ∧ (q ∨ r) := by simp [*] ``` ::: The next example simplifies all the hypotheses, and then uses them to prove the goal. ```lean set_option linter.unusedVariables false ------ example (u w x x' y y' z : Nat) (p : Nat → Prop) (h₁ : x + 0 = x') (h₂ : y + 0 = y') : x + y + 0 = x' + y' := by simp at * simp [*] ``` One thing that makes the simplifier especially useful is that its capabilities can grow as a library develops. For example, suppose we define a list operation that symmetrizes its input by appending its reversal: ```lean def mk_symm (xs : List α) := xs ++ xs.reverse ``` :::leanFirst Then for any list {leanRef (in := "mk_symm xs")}`xs`, {leanRef}`(mk_symm xs).reverse` is equal to {leanRef}`mk_symm xs`, which can easily be proved by unfolding the definition: ```lean def mk_symm (xs : List α) := xs ++ xs.reverse ------ theorem reverse_mk_symm (xs : List α) : (mk_symm xs).reverse = mk_symm xs := by simp [mk_symm] ``` ::: We can now use this theorem to prove new results: ```lean def mk_symm (xs : List α) := xs ++ xs.reverse theorem reverse_mk_symm (xs : List α) : (mk_symm xs).reverse = mk_symm xs := by simp [mk_symm] ------ example (xs ys : List Nat) : (xs ++ mk_symm ys).reverse = mk_symm ys ++ xs.reverse := by simp [reverse_mk_symm] example (xs ys : List Nat) (p : List Nat → Prop) (h : p (xs ++ mk_symm ys).reverse) : p (mk_symm ys ++ xs.reverse) := by simp [reverse_mk_symm] at h; assumption ``` But using {leanRef}`reverse_mk_symm` is generally the right thing to do, and it would be nice if users did not have to invoke it explicitly. You can achieve that by marking it as a simplification rule when the theorem is defined: ```lean def mk_symm (xs : List α) := xs ++ xs.reverse ------ @[simp] theorem reverse_mk_symm (xs : List α) : (mk_symm xs).reverse = mk_symm xs := by simp [mk_symm] example (xs ys : List Nat) : (xs ++ mk_symm ys).reverse = mk_symm ys ++ xs.reverse := by simp example (xs ys : List Nat) (p : List Nat → Prop) (h : p (xs ++ mk_symm ys).reverse) : p (mk_symm ys ++ xs.reverse) := by simp at h; assumption ``` The notation {leanRef}`@[simp]` declares {leanRef}`reverse_mk_symm` to have the {attr}`[simp]` attribute, and can be spelled out more explicitly: ```lean def mk_symm (xs : List α) := xs ++ xs.reverse ------ theorem reverse_mk_symm (xs : List α) : (mk_symm xs).reverse = mk_symm xs := by simp [mk_symm] attribute [simp] reverse_mk_symm example (xs ys : List Nat) : (xs ++ mk_symm ys).reverse = mk_symm ys ++ xs.reverse := by simp example (xs ys : List Nat) (p : List Nat → Prop) (h : p (xs ++ mk_symm ys).reverse) : p (mk_symm ys ++ xs.reverse) := by simp at h; assumption ``` The attribute can also be applied any time after the theorem is declared: ```lean def mk_symm (xs : List α) := xs ++ xs.reverse ------ theorem reverse_mk_symm (xs : List α) : (mk_symm xs).reverse = mk_symm xs := by simp [mk_symm] example (xs ys : List Nat) : (xs ++ mk_symm ys).reverse = mk_symm ys ++ xs.reverse := by simp [reverse_mk_symm] attribute [simp] reverse_mk_symm example (xs ys : List Nat) (p : List Nat → Prop) (h : p (xs ++ mk_symm ys).reverse) : p (mk_symm ys ++ xs.reverse) := by simp at h; assumption ``` :::leanFirst Once the attribute is applied, however, there is no way to permanently remove it; it persists in any file that imports the one where the attribute is assigned. As we will discuss further in {ref "attributes"}[Attributes], one can limit the scope of an attribute to the current file or section using the {leanRef}`local` modifier: ```lean def mk_symm (xs : List α) := xs ++ xs.reverse ------ theorem reverse_mk_symm (xs : List α) : (mk_symm xs).reverse = mk_symm xs := by simp [mk_symm] section attribute [local simp] reverse_mk_symm example (xs ys : List Nat) : (xs ++ mk_symm ys).reverse = mk_symm ys ++ xs.reverse := by simp example (xs ys : List Nat) (p : List Nat → Prop) (h : p (xs ++ mk_symm ys).reverse) : p (mk_symm ys ++ xs.reverse) := by simp at h; assumption end ``` ::: Outside the section, the simplifier will no longer use {leanRef}`reverse_mk_symm` by default. Note that the various {leanRef}`simp` options we have discussed—giving an explicit list of rules, and using {leanRef}`at` to specify the location—can be combined, but the order they are listed is rigid. You can see the correct order in an editor by placing the cursor on the {leanRef}`simp` identifier to see the documentation string that is associated with it. :::leanFirst There are two additional modifiers that are useful. By default, {leanRef}`simp` includes all theorems that have been marked with the attribute {attr}`[simp]`. Writing {leanRef}`simp only` excludes these defaults, allowing you to use a more explicitly crafted list of rules. In the examples below, the minus sign and {leanRef}`only` are used to block the application of {leanRef}`reverse_mk_symm`. ```lean def mk_symm (xs : List α) := xs ++ xs.reverse @[simp] theorem reverse_mk_symm (xs : List α) : (mk_symm xs).reverse = mk_symm xs := by simp [mk_symm] example (xs ys : List Nat) (p : List Nat → Prop) (h : p (xs ++ mk_symm ys).reverse) : p (mk_symm ys ++ xs.reverse) := by simp at h; assumption example (xs ys : List Nat) (p : List Nat → Prop) (h : p (xs ++ mk_symm ys).reverse) : p ((mk_symm ys).reverse ++ xs.reverse) := by simp [-reverse_mk_symm] at h; assumption example (xs ys : List Nat) (p : List Nat → Prop) (h : p (xs ++ mk_symm ys).reverse) : p ((mk_symm ys).reverse ++ xs.reverse) := by simp only [List.reverse_append] at h; assumption ``` ::: The {leanRef}`simp` tactic has many configuration options. For example, we can enable contextual simplifications as follows: ```lean example : if x = 0 then y + x = y else x ≠ 0 := by simp +contextual ``` With {leanRef}`+contextual`, the {leanRef}`simp` tactic uses the fact that {leanRef}`x = 0` when simplifying {leanRef}`y + x = y`, and {leanRef}`x ≠ 0` when simplifying the other branch. Here is another example: ```lean example : ∀ (x : Nat) (h : x = 0), y + x = y := by simp +contextual ``` :::leanFirst Another useful configuration option is {leanRef}`+arith` which enables arithmetical simplifications. ```lean example : 0 < 1 + x ∧ x + y + 2 ≥ y + 1 := by simp +arith ``` ::: # Split Tactic %%% tag := "split-tactic" %%% ::::leanFirst The {leanRef}`split` tactic is useful for breaking nested {kw}`if`-{kw}`then`-{kw}`else` and {kw}`match` expressions in cases. For a {kw}`match` expression with $`n` cases, the {leanRef}`split` tactic generates at most $`n` subgoals. Here is an example: ```lean def f (x y z : Nat) : Nat := match x, y, z with | 5, _, _ => y | _, 5, _ => y | _, _, 5 => y | _, _, _ => 1 example (x y z : Nat) : x ≠ 5 → y ≠ 5 → z ≠ 5 → z = w → f x y w = 1 := by intros simp [f] split . contradiction . contradiction . contradiction . rfl ``` :::: We can compress the tactic proof above as follows. ```lean def f (x y z : Nat) : Nat := match x, y, z with | 5, _, _ => y | _, 5, _ => y | _, _, 5 => y | _, _, _ => 1 ------ example (x y z : Nat) : x ≠ 5 → y ≠ 5 → z ≠ 5 → z = w → f x y w = 1 := by intros; simp [f]; split <;> first | contradiction | rfl ``` The tactic {leanRef}`split <;> first | contradiction | rfl` first applies the {leanRef}`split` tactic, and then for each generated goal it tries {leanRef}`contradiction`, and then {leanRef}`rfl` if {leanRef}`contradiction` fails. Like {leanRef}`simp`, we can apply {leanRef}`split` to a particular hypothesis: ```lean def g (xs ys : List Nat) : Nat := match xs, ys with | [a, b], _ => a+b+1 | _, [b, _] => b+1 | _, _ => 1 example (xs ys : List Nat) (h : g xs ys = 0) : False := by simp [g] at h; split at h <;> simp +arith at h ``` # Extensible Tactics %%% tag := "extensible-tactics" %%% :::leanFirst In the following example, we define the notation {leanRef}`triv` using the command {leanRef}`syntax`. Then, we use the command {leanRef}`macro_rules` to specify what should be done when {leanRef}`triv` is used. You can provide different expansions, and the tactic interpreter will try all of them until one succeeds: ```lean -- Define a new tactic notation syntax "triv" : tactic macro_rules | `(tactic| triv) => `(tactic| assumption) example (h : p) : p := by triv -- You cannot prove the following theorem using `triv` -- example (x : α) : x = x := by -- triv -- Let's extend `triv`. The tactic interpreter -- tries all possible macro extensions for `triv` until one succeeds macro_rules | `(tactic| triv) => `(tactic| rfl) example (x : α) : x = x := by triv example (x : α) (h : p) : x = x ∧ p := by apply And.intro <;> triv -- We now add a (recursive) extension macro_rules | `(tactic| triv) => `(tactic| apply And.intro <;> triv) example (x : α) (h : p) : x = x ∧ p := by triv ``` ::: # Exercises %%% tag := none %%% 1. Go back to the exercises in {ref "propositions-and-proofs"}[Propositions and Proofs] and {ref "quantifiers-and-equality"}[Quantifiers and Equality] and redo as many as you can now with tactic proofs, using also {tactic}`rw` and {tactic}`simp` as appropriate. 2. Use tactic combinators to obtain a one-line proof of the following: ```lean example (p q r : Prop) (hp : p) : (p ∨ q ∨ r) ∧ (q ∨ p ∨ r) ∧ (q ∨ r ∨ p) := by sorry ``` ================================================ FILE: book/TPiL/TypeClasses.lean ================================================ import VersoManual import TPiL.Examples open Verso.Genre open Verso.Genre.Manual hiding tactic open TPiL #doc (Manual) "Type Classes" => %%% tag := "type-classes" %%% Type classes were introduced as a principled way of enabling ad-hoc polymorphism in functional programming languages. We first observe that it would be easy to implement an ad-hoc polymorphic function (such as addition) if the function simply took the type-specific implementation of addition as an argument and then called that implementation on the remaining arguments. For example, suppose we declare a structure in Lean to hold implementations of addition. ```lean namespace Ex ------ structure Add (α : Type) where add : α → α → α #check @Add.add -- @Add.add : {α : Type} → Add α → α → α → α ------ end Ex ``` ::::setup ``` namespace Ex structure Add (α : Type) where add : α → α → α def double (s : Add α) (x : α) : α := s.add x x variable {n : Nat} ``` :::leanFirst In the above Lean code, the field {leanRef}`add` has type {lean}`Add.add : {α : Type} → Add α → α → α → α` where the curly braces around the type {leanRef}`α` mean that it is an implicit argument. We could implement {leanRef}`double` by: ```lean namespace Ex structure Add (α : Type) where add : α → α → α ------ def double (s : Add α) (x : α) : α := s.add x x #eval double { add := Nat.add } 10 -- 20 #eval double { add := Nat.mul } 10 -- 100 #eval double { add := Int.add } 10 -- 20 ------ end Ex ``` ::: Note that you can double a natural number {lean}`n` by {lean}`double { add := Nat.add } n`. Of course, it would be highly cumbersome for users to manually pass the implementations around in this way. Indeed, it would defeat most of the potential benefits of ad-hoc polymorphism. :::: :::leanFirst The main idea behind type classes is to make arguments such as {leanRef}`Add α` implicit, and to use a database of user-defined instances to synthesize the desired instances automatically through a process known as typeclass resolution. In Lean, by changing {kw}`structure` to {kw}`class` in the example above, the type of {leanRef}`Add.add` becomes: ```lean namespace Ex ------ class Add (α : Type) where add : α → α → α #check @Add.add -- @Add.add : {α : Type} → [self : Add α] → α → α → α ------ end Ex ``` ::: where the square brackets indicate that the argument of type {leanRef}`Add α` is _instance implicit_, i.e. that it should be synthesized using typeclass resolution. This version of {leanRef}`add` is the Lean analogue of the Haskell term {lit}`add :: Add a => a -> a -> a`. Similarly, we can register instances by: ```lean namespace Ex class Add (α : Type) where add : α → α → α ------ instance : Add Nat where add := Nat.add instance : Add Int where add := Int.add instance : Add Float where add := Float.add ------ end Ex ``` ::::leanFirst :::setup ``` namespace Ex class Add (α : Type) where add : α → α → α ------ instance : Add Nat where add := Nat.add instance : Add Int where add := Int.add instance : Add Float where add := Float.add variable (n m : Nat) ``` Then for {lean}`n : Nat` and {lean}`m : Nat`, the term {lean}`Add.add n m` triggers typeclass resolution with the goal of {lean}`Add Nat`, and typeclass resolution will synthesize the instance for {lean}`Nat` above. We can now reimplement {leanRef}`double` using an instance implicit by: ::: ```lean namespace Ex class Add (α : Type) where add : α → α → α instance : Add Nat where add := Nat.add instance : Add Int where add := Int.add instance : Add Float where add := Float.add ------ def double [Add α] (x : α) : α := Add.add x x #check @double -- @double : {α : Type} → [Add α] → α → α #eval double 10 -- 20 #eval double (10 : Int) -- 20 #eval double (7 : Float) -- 14.000000 #eval double (239.0 + 2) -- 482.000000 ------ end Ex ``` :::: :::leanFirst In general, instances may depend on other instances in complicated ways. For example, you can declare an instance stating that if {leanRef}`α` has addition, then {leanRef}`Array α` has addition: ```lean instance [Add α] : Add (Array α) where add x y := Array.zipWith (· + ·) x y #eval Add.add #[1, 2] #[3, 4] -- #[4, 6] #eval #[1, 2] + #[3, 4] -- #[4, 6] ``` ::: Note that {leanRef}`(· + ·)` is notation for {lean}`fun x y => x + y` in Lean. :::setup ``` def head [Inhabited α] (xs : List α) : α := default variable {α : Type u} {x : α} {xs : List α} [Inhabited α] ``` The example above demonstrates how type classes are used to overload notation. Now, we explore another application. We often need an arbitrary element of a given type. Recall that types may not have any elements in Lean. It often happens that we would like a definition to return an arbitrary element in a “corner case.” For example, we may like the expression {lean}`head xs` to be of type {lean}`α` when {lean}`xs` is of type {lean}`List α`. Similarly, many theorems hold under the additional assumption that a type is not empty. For example, if {lean}`α` is a type, {lean}`∃ x : α, x = x` is true only if {lean}`α` is not empty. The standard library defines a type class {lean}`Inhabited` to enable type class inference to infer a “default” element of an inhabited type. Let us start with the first step of the program above, declaring an appropriate class: ```lean namespace Ex ------ class Inhabited (α : Type u) where default : α #check @Inhabited.default -- @Inhabited.default : {α : Type u_1} → [self : Inhabited α] → α ------ end Ex ``` Note {leanRef}`Inhabited.default` doesn't have any explicit arguments. An element of the class {lean}`Inhabited α` is simply an expression of the form {lean}`Inhabited.mk x`, for some element {lean}`x : α`. The projection {lean}`Inhabited.default` will allow us to “extract” such an element of {lean}`α` from an element of {lean}`Inhabited α`. Now we populate the class with some instances: ::: ```lean namespace Ex class Inhabited (a : Type _) where default : a ------ instance : Inhabited Bool where default := true instance : Inhabited Nat where default := 0 instance : Inhabited Unit where default := () instance : Inhabited Prop where default := True #eval (Inhabited.default : Nat) -- 0 #eval (Inhabited.default : Bool) -- true -------- end Ex ``` You can use the command {kw}`export` to create the alias {lean}`default` for {lean}`Inhabited.default`. ```lean namespace Ex class Inhabited (a : Type _) where default : a instance : Inhabited Bool where default := true instance : Inhabited Nat where default := 0 instance : Inhabited Unit where default := () instance : Inhabited Prop where default := True ------ export Inhabited (default) #eval (default : Nat) -- 0 #eval (default : Bool) -- true ------ end Ex ``` # Chaining Instances %%% tag := "chaining-instances" %%% If that were the extent of type class inference, it would not be all that impressive; it would be simply a mechanism of storing a list of instances for the elaborator to find in a lookup table. What makes type class inference powerful is that one can _chain_ instances. That is, an instance declaration can in turn depend on an implicit instance of a type class. This causes class inference to chain through instances recursively, backtracking when necessary, in a Prolog-like search. :::leanFirst For example, the following definition shows that if two types {leanRef}`α` and {leanRef}`β` are inhabited, then so is their product: ```lean instance [Inhabited α] [Inhabited β] : Inhabited (α × β) where default := (default, default) ``` ::: With this added to the earlier instance declarations, type class instance can infer, for example, a default element of {lean}`Nat × Bool`: ```lean namespace Ex class Inhabited (α : Type u) where default : α instance : Inhabited Bool where default := true instance : Inhabited Nat where default := 0 opaque default [Inhabited α] : α := Inhabited.default ------ instance [Inhabited α] [Inhabited β] : Inhabited (α × β) where default := (default, default) #eval (default : Nat × Bool) -- (0, true) ------ end Ex ``` Similarly, we can inhabit type function with suitable constant functions: ```lean instance [Inhabited β] : Inhabited (α → β) where default := fun _ => default ``` As an exercise, try defining default instances for other types, such as {lean}`List` and {lean}`Sum` types. :::setup ``` universe u set_option checkBinderAnnotations false ``` The Lean standard library contains the definition {name}`inferInstance`. It has type {lean}`{α : Sort u} → [i : α] → α`, and is useful for triggering the type class resolution procedure when the expected type is an instance. ::: ```lean #check (inferInstance : Inhabited Nat) -- inferInstance : Inhabited Nat def foo : Inhabited (Nat × Nat) := inferInstance theorem ex : foo.default = (default, default) := rfl ``` :::leanFirst You can use the command {leanRef}`#print` to inspect how simple {leanRef}`inferInstance` is. ```lean #print inferInstance ``` ::: # ToString %%% tag := "ToString" %%% ```setup universe u ``` :::leanFirst The polymorphic method {leanRef}`toString` has type {lean}`{α : Type u} → [ToString α] → α → String`. You implement the instance for your own types and use chaining to convert complex values into strings. Lean comes with {lean}`ToString` instances for most builtin types. ```lean structure Person where name : String age : Nat instance : ToString Person where toString p := p.name ++ "@" ++ toString p.age #eval toString { name := "Leo", age := 542 : Person } -- "Leo@542" #eval toString ({ name := "Daniel", age := 18 : Person }, "hello") -- "(Daniel@18, hello)" ``` ::: # Numerals %%% tag := "numerals" %%% Numerals are polymorphic in Lean. You can use a numeral (e.g., {lit}`2`) to denote an element of any type that implements the type class {name}`OfNat`. ```lean structure Rational where num : Int den : Nat inv : den ≠ 0 instance : OfNat Rational n where ofNat := { num := n, den := 1, inv := by decide } instance : ToString Rational where toString r := s!"{r.num}/{r.den}" #eval (2 : Rational) -- 2/1 #check (2 : Rational) -- 2 : Rational #check (2 : Nat) -- 2 : Nat ``` :::setup ``` structure Rational where num : Int den : Nat inv : den ≠ 0 instance : OfNat Rational n where ofNat := { num := n, den := 1, inv := by decide } instance : ToString Rational where toString r := s!"{r.num}/{r.den}" ``` Lean elaborates the terms {lean}`(2 : Nat)` and {lean}`(2 : Rational)` as {lean (type := "Nat")}`@OfNat.ofNat Nat 2 (@instOfNatNat 2)` and {lean}`@OfNat.ofNat Rational 2 (@instOfNatRational 2)` respectively. We say the numerals {lit}`2` occurring in the elaborated terms are _raw_ natural numbers. You can input the raw natural number {lit}`2` using the macro {lean}`nat_lit 2`. ::: ```lean #check nat_lit 2 -- 2 : Nat ``` Raw natural numbers are _not_ polymorphic. The {lean}`OfNat` instance is parametric on the numeral. So, you can define instances for particular numerals. The second argument is often a variable as in the example above, or a _raw_ natural number. ```lean class Monoid (α : Type u) where unit : α op : α → α → α instance [s : Monoid α] : OfNat α (nat_lit 1) where ofNat := s.unit def getUnit [Monoid α] : α := 1 ``` # Output Parameters %%% tag := "output-parameters" %%% :::setup ``` universe u variable (T : Type u) ``` By default, Lean only tries to synthesize an instance {lean}`Inhabited T` when the term {lean}`T` is known and does not contain missing parts. The following command produces the error {lit}`typeclass instance problem is stuck, it is often due to metavariables` because the type has a missing part (i.e., the {lit}`_`). ::: ```lean /-- error: typeclass instance problem is stuck, it is often due to metavariables Inhabited (Nat × ?m.2) -/ #guard_msgs (error) in #eval (inferInstance : Inhabited (Nat × _)) ``` You can view the parameter of the type class {lean}`Inhabited` as an _input_ value for the type class synthesizer. When a type class has multiple parameters, you can mark some of them as {deftech}_output parameters_. Lean will start type class synthesizer even when these parameters have missing parts. In the following example, we use output parameters to define a _heterogeneous_ polymorphic multiplication. ```lean namespace Ex ------ class HMul (α : Type u) (β : Type v) (γ : outParam (Type w)) where hMul : α → β → γ export HMul (hMul) instance : HMul Nat Nat Nat where hMul := Nat.mul instance : HMul Nat (Array Nat) (Array Nat) where hMul a bs := bs.map (fun b => hMul a b) #eval hMul 4 3 -- 12 #eval hMul 4 #[2, 3, 4] -- #[8, 12, 16] ------ end Ex ``` The parameters {leanRef}`α` and {leanRef}`β` are considered input parameters and {leanRef}`γ` an output one. Given an application {leanRef}`hMul a b`, after the types of {leanRef}`a` and {leanRef}`b` are known, the type class synthesizer is invoked, and the resulting type is obtained from the output parameter {leanRef}`γ`. In the example above, we defined two instances. The first one is the homogeneous multiplication for natural numbers. The second is the scalar multiplication for arrays. Note that you chain instances and generalize the second instance. ```lean namespace Ex ------ class HMul (α : Type u) (β : Type v) (γ : outParam (Type w)) where hMul : α → β → γ export HMul (hMul) instance : HMul Nat Nat Nat where hMul := Nat.mul instance : HMul Int Int Int where hMul := Int.mul instance [HMul α β γ] : HMul α (Array β) (Array γ) where hMul a bs := bs.map (fun b => hMul a b) #eval hMul 4 3 -- 12 #eval hMul 4 #[2, 3, 4] -- #[8, 12, 16] #eval hMul (-2) #[3, -1, 4] -- #[-6, 2, -8] #eval hMul 2 #[#[2, 3], #[0, 4]] -- #[#[4, 6], #[0, 8]] ------ end Ex ``` You can use our new scalar array multiplication instance on arrays of type {leanRef}`Array β` with a scalar of type {leanRef}`α` whenever you have an instance {leanRef}`HMul α β γ`. In the last {kw}`#eval`, note that the instance was used twice on an array of arrays. Output parameters are ignored during instance synthesis. Even when instance synthesis occurs in a context in which the values of output parameters are already determined, their values are ignored. Once an instance is found using its input parameters, Lean ensures that the already-known values of the output parameters match those which were found. Lean also features {deftech}_semi-output parameters_, which have some features of input parameters and some features of output parameters. Like input parameters, semi-output parameters are considered when selecting instances. Like output parameters, they can be used to instantiate unknown values. However, they do not do so uniquely. Instance synthesis with semi-output parameters can be more difficult to predict, because the order in which instances are considered can determine which is selected, but it is also more flexible. # Default Instances %%% tag := "default-instances" %%% In the class {leanRef}`HMul`, the parameters {leanRef}`α` and {leanRef}`β` are treated as input values. Thus, type class synthesis only starts after these two types are known. This may often be too restrictive. ```lean namespace Ex ------ class HMul (α : Type u) (β : Type v) (γ : outParam (Type w)) where hMul : α → β → γ export HMul (hMul) instance : HMul Int Int Int where hMul := Int.mul def xs : List Int := [1, 2, 3] /-- error: typeclass instance problem is stuck HMul Int ?m.2 (?m.11 y) Note: Lean will not try to resolve this typeclass instance problem because the second type argument to `HMul` is a metavariable. This argument must be fully determined before Lean will try to resolve the typeclass. Hint: Adding type annotations and supplying implicit arguments to functions can give Lean more information for typeclass resolution. For example, if you have a variable `x` that you intend to be a `Nat`, but Lean reports it as having an unresolved type like `?m`, replacing `x` with `(x : Nat)` can get typeclass resolution un-stuck. -/ #guard_msgs (error) in #eval fun y => xs.map (fun x => hMul x y) ------ end Ex ``` The instance {leanRef}`HMul` is not synthesized by Lean because the type of {leanRef}`y` has not been provided. However, it is natural to assume that the type of {leanRef}`y` and {leanRef}`x` should be the same in this kind of situation. We can achieve exactly that using _default instances_. ```lean namespace Ex ------ class HMul (α : Type u) (β : Type v) (γ : outParam (Type w)) where hMul : α → β → γ export HMul (hMul) @[default_instance] instance : HMul Int Int Int where hMul := Int.mul def xs : List Int := [1, 2, 3] #check fun y => xs.map (fun x => hMul x y) -- fun y => List.map (fun x => hMul x y) xs : Int → List Int ------ end Ex ``` :::setup ``` variable {α : Type u} {β : Type v} {γ : Type w} {a : α} {b : β} {n : Nat} variable [HAdd α β γ] [HSub α β γ] [HMul α β γ] [HDiv α β γ] [HMod α β γ] ``` By tagging the instance above with the attribute {attr}`[default_instance]`, we are instructing Lean to use this instance on pending type class synthesis problems. The actual Lean implementation defines homogeneous and heterogeneous classes for arithmetical operators. Moreover, {lean}`a + b`, {lean}`a * b`, {lean}`a - b`, {lean}`a / b`, and {lean}`a % b` are notations for the heterogeneous versions. The instance {lean}`OfNat Nat n` is the default instance (with priority 100) for the {lean}`OfNat` class. This is why the numeral {lean}`2` has type {lean}`Nat` when the expected type is not known. You can define default instances with higher priority to override the builtin ones. ::: ```lean structure Rational where num : Int den : Nat inv : den ≠ 0 @[default_instance 200] instance : OfNat Rational n where ofNat := { num := n, den := 1, inv := by decide } instance : ToString Rational where toString r := s!"{r.num}/{r.den}" #check 2 -- 2 : Rational ``` :::setup ``` variable {α : Type u} {xs : List α} [Mul α] [OfNat α 2] ``` Priorities are also useful to control the interaction between different default instances. For example, suppose {lean}`xs` has type {lean}`List α`. When elaborating {lean}`xs.map (fun x => 2 * x)`, we want the homogeneous instance for multiplication to have higher priority than the default instance for {lean}`OfNat α 2`. This is particularly important when we have implemented only the instance {lean}`HMul α α α`, and did not implement {lean}`HMul Nat α α`. Now, we reveal how the notation {lit}`a * b` is defined in Lean. ::: ```lean namespace Ex ------ class OfNat (α : Type u) (n : Nat) where ofNat : α @[default_instance] instance (n : Nat) : OfNat Nat n where ofNat := n class HMul (α : Type u) (β : Type v) (γ : outParam (Type w)) where hMul : α → β → γ class Mul (α : Type u) where mul : α → α → α @[default_instance 10] instance [Mul α] : HMul α α α where hMul a b := Mul.mul a b infixl:70 " * " => HMul.hMul ------ end Ex ``` The {leanRef}`Mul` class is convenient for types that only implement the homogeneous multiplication. # Local Instances %%% tag := "local-instances" %%% Type classes are implemented using attributes in Lean. Thus, you can use the {kw}`local` modifier to indicate that they only have effect until the current {kw}`section` or {kw}`namespace` is closed, or until the end of the current file. ```lean structure Point where x : Nat y : Nat section local instance : Add Point where add a b := { x := a.x + b.x, y := a.y + b.y } def double (p : Point) := p + p end -- instance `Add Point` is not active anymore /-- error: failed to synthesize HAdd Point Point ?m.5 Hint: Additional diagnostic information may be available using the `set_option diagnostics true` command. -/ #guard_msgs in def triple (p : Point) := p + p + p ``` You can also temporarily disable an instance using the {kw}`attribute` command until the current {kw}`section` or {kw}`namespace` is closed, or until the end of the current file. ```lean structure Point where x : Nat y : Nat instance addPoint : Add Point where add a b := { x := a.x + b.x, y := a.y + b.y } def double (p : Point) := p + p attribute [-instance] addPoint /-- error: failed to synthesize HAdd Point Point ?m.5 Hint: Additional diagnostic information may be available using the `set_option diagnostics true` command. -/ #guard_msgs in def triple (p : Point) := p + p + p -- Error: failed to synthesize instance ``` We recommend you only use this command to diagnose problems. # Scoped Instances %%% tag := "scoped-instances" %%% You can also declare scoped instances in namespaces. This kind of instance is only active when you are inside of the namespace or open the namespace. ```lean structure Point where x : Nat y : Nat namespace Point scoped instance : Add Point where add a b := { x := a.x + b.x, y := a.y + b.y } def double (p : Point) := p + p end Point -- instance `Add Point` is not active anymore /-- error: failed to synthesize HAdd Point Point ?m.3 Hint: Additional diagnostic information may be available using the `set_option diagnostics true` command. -/ #guard_msgs (error) in #check fun (p : Point) => p + p + p namespace Point -- instance `Add Point` is active again #check fun (p : Point) => p + p + p end Point open Point -- activates instance `Add Point` #check fun (p : Point) => p + p + p ``` You can use the command {kw}`open scoped`{lit}` ` to activate scoped attributes but will not “open” the names from the namespace. ```lean structure Point where x : Nat y : Nat namespace Point scoped instance : Add Point where add a b := { x := a.x + b.x, y := a.y + b.y } def double (p : Point) := p + p end Point open scoped Point -- activates instance `Add Point` #check fun (p : Point) => p + p + p /-- error: Unknown identifier `double` -/ #guard_msgs (error) in #check fun (p : Point) => double p ``` # Decidable Propositions %%% tag := "decidable-propositions" %%% Let us consider another example of a type class defined in the standard library, namely the type class of {lean}`Decidable` propositions. Roughly speaking, an element of {lean}`Prop` is said to be decidable if we can decide whether it is true or false. The distinction is only useful in constructive mathematics; classically, every proposition is decidable. But if we use the classical principle, say, to define a function by cases, that function will not be computable. Algorithmically speaking, the {lean}`Decidable` type class can be used to infer a procedure that effectively determines whether or not the proposition is true. As a result, the type class supports such computational definitions when they are possible while at the same time allowing a smooth transition to the use of classical definitions and classical reasoning. In the standard library, {lean}`Decidable` is defined formally as follows: ```lean namespace Hidden ------ class inductive Decidable (p : Prop) where | isFalse (h : ¬p) : Decidable p | isTrue (h : p) : Decidable p ------ end Hidden ``` :::setup ``` variable {p : Prop} (t : Decidable p) (t' : p ∨ ¬p) (a b : α) ``` Logically speaking, having an element {lean}`t : Decidable p` is stronger than having an element {lean}`t' : p ∨ ¬p`; it enables us to define values of an arbitrary type depending on the truth value of {lean}`p`. For example, for the expression {lean}`if p then a else b` to make sense, we need to know that {lean}`p` is decidable. That expression is syntactic sugar for {lean}`ite p a b`, where {lean}`ite` is defined as follows: ::: ```lean namespace Hidden ------ def ite {α : Sort u} (c : Prop) [h : Decidable c] (t e : α) : α := h.casesOn (motive := fun _ => α) (fun _ => e) (fun _ => t) ------ end Hidden ``` :::leanFirst The standard library also contains a variant of {leanRef}`ite` called {leanRef}`dite`, the dependent if-then-else expression. It is defined as follows: ```lean namespace Hidden ------ def dite {α : Sort u} (c : Prop) [h : Decidable c] (t : c → α) (e : Not c → α) : α := Decidable.casesOn (motive := fun _ => α) h e t ------ end Hidden ``` ::: :::setup ``` variable {c : Prop} [Decidable c] (t : c → α) (e : ¬c → α) (hc : c) (hnc : ¬c) ``` ```lean (show := false) example [Decidable c] (t e : α) : α := if h : c then t else e ``` That is, in {lean}`dite c t e`, we can assume {lean}`hc : c` in the “then” branch, and {lean}`hnc : ¬c` in the “else” branch. To make {lean}`dite` more convenient to use, Lean allows us to write {leanRef}`if h : c then t else e` instead of {lean}`dite c (fun h : c => t h) (fun h : ¬c => e h)`. ::: Without classical logic, we cannot prove that every proposition is decidable. But we can prove that _certain_ propositions are decidable. For example, we can prove the decidability of basic operations like equality and comparisons on the natural numbers and the integers. Moreover, decidability is preserved under propositional connectives: ```lean #check @instDecidableAnd -- @instDecidableAnd : {p q : Prop} → [dp : Decidable p] → [dq : Decidable q] → Decidable (p ∧ q) #check @instDecidableOr #check @instDecidableNot ``` Thus we can carry out definitions by cases on decidable predicates on the natural numbers: ```lean def step (a b x : Nat) : Nat := if x < a ∨ x > b then 0 else 1 set_option pp.explicit true #print step ``` Turning on implicit arguments shows that the elaborator has inferred the decidability of the proposition {leanRef}`x < a ∨ x > b`, simply by applying appropriate instances. With the classical axioms, we can prove that every proposition is decidable. You can import the classical axioms and make the generic instance of decidability available by opening the {lit}`Classical` namespace. ```lean open Classical ``` :::setup ``` open Classical variable {p : Prop} ``` Thereafter {lean}`Decidable p` has an instance for every {leanRef}`p`. Thus all theorems in the library that rely on decidability assumptions are freely available when you want to reason classically. In {ref "axioms-and-computation"}[Axioms and Computation], we will see that using the law of the excluded middle to define functions can prevent them from being used computationally. Thus, the standard library assigns a low priority to the {lean}`propDecidable` instance. ::: ```lean namespace Hidden ------ open Classical noncomputable scoped instance (priority := low) propDecidable (a : Prop) : Decidable a := choice <| match em a with | Or.inl h => ⟨isTrue h⟩ | Or.inr h => ⟨isFalse h⟩ ------ end Hidden ``` This guarantees that Lean will favor other instances and fall back on {leanRef}`propDecidable` only after other attempts to infer decidability have failed. The {lean}`Decidable` type class also provides a bit of small-scale automation for proving theorems. The standard library introduces the tactic {tactic}`decide` that uses the {lean}`Decidable` instance to solve simple goals, as well as a function {name}`decide` that uses a {lean}`Decidable` instance to compute the corresponding {lean}`Bool`. ```lean example : 10 < 5 ∨ 1 > 0 := by decide example : ¬(True ∧ False) := by decide example : 10 * 20 = 200 := by decide theorem ex : True ∧ 2 = 1 + 1 := by decide #print ex #check @of_decide_eq_true -- @of_decide_eq_true : ∀ {p : Prop} [inst : Decidable p], decide p = true → p #check @decide -- decide : (p : Prop) → [h : Decidable p] → Bool ``` :::setup ``` variable {p : Prop} [Decidable p] ``` They work as follows. The expression {lean}`decide p` tries to infer a decision procedure for {leanRef}`p`, and, if it is successful, evaluates to either {lean}`true` or {lean}`false`. In particular, if {leanRef}`p` is a true closed expression, {leanRef}`decide p` will reduce definitionally to the Boolean {lean}`true`. On the assumption that {lean}`decide p = true` holds, {lean}`of_decide_eq_true` produces a proof of {lean}`p`. The tactic {tactic}`decide` puts it all together to prove a target {lean}`p`. By the previous observations, {tactic}`decide` will succeed any time the inferred decision procedure for {lean}`p` has enough information to evaluate, definitionally, to the {lean}`isTrue` case. ::: # Managing Type Class Inference %%% tag := "managing-type-class-inference" %%% If you are ever in a situation where you need to supply an expression that Lean can infer by type class inference, you can ask Lean to carry out the inference using {name}`inferInstance`: ```lean def foo : Add Nat := inferInstance def bar : Inhabited (Nat → Nat) := inferInstance #check @inferInstance -- @inferInstance : {α : Sort u_1} → [i : α] → α ``` :::setup ``` variable (t : T) ``` In fact, you can use Lean's {lean}`(t : T)` notation to specify the class whose instance you are looking for, in a concise manner: ::: ```lean #check (inferInstance : Add Nat) ``` You can also use the auxiliary definition {lean}`inferInstanceAs`: ```lean #check inferInstanceAs (Add Nat) #check @inferInstanceAs -- inferInstanceAs : (α : Sort u_1) → [i : α] → α ``` :::leanFirst Sometimes Lean can't find an instance because the class is buried under a definition. For example, Lean cannot find an instance of {leanRef}`Inhabited (Set α)`. We can declare one explicitly: ```lean def Set (α : Type u) := α → Prop /-- error: failed to synthesize Inhabited (Set α) Hint: Additional diagnostic information may be available using the `set_option diagnostics true` command. -/ #guard_msgs in example : Inhabited (Set α) := inferInstance instance : Inhabited (Set α) := inferInstanceAs (Inhabited (α → Prop)) ``` ::: At times, you may find that the type class inference fails to find an expected instance, or, worse, falls into an infinite loop and times out. To help debug in these situations, Lean enables you to request a trace of the search: ```lean set_option trace.Meta.synthInstance true ``` If you are using VS Code, you can read the results by hovering over the relevant theorem or definition, or opening the messages window with {kbd}[`Ctrl` `Shift` `Enter`]. You can also limit the search using the following options: ```lean set_option synthInstance.maxHeartbeats 10000 set_option synthInstance.maxSize 400 ``` Option {option}`synthInstance.maxHeartbeats` specifies the maximum amount of heartbeats per typeclass resolution problem. A heartbeat is the number of (small) memory allocations (in thousands), 0 means there is no limit. Option {option}`synthInstance.maxSize` is the maximum number of instances used to construct a solution in the type class instance synthesis procedure. Remember also that in both the VS Code and Emacs editor modes, tab completion works in {kw}`set_option`, to help you find suitable options. As noted above, the type class instances in a given context represent a Prolog-like program, which gives rise to a backtracking search. Both the efficiency of the program and the solutions that are found can depend on the order in which the system tries the instance. Instances which are declared last are tried first. Moreover, if instances are declared in other modules, the order in which they are tried depends on the order in which namespaces are opened. Instances declared in namespaces which are opened later are tried earlier. You can change the order that type class instances are tried by assigning them a _priority_. When an instance is declared, it is assigned a default priority value. You can assign other priorities when defining an instance. The following example illustrates how this is done: ```lean class Foo where a : Nat b : Nat instance (priority := default + 1) i1 : Foo where a := 1 b := 1 instance i2 : Foo where a := 2 b := 2 example : Foo.a = 1 := rfl instance (priority := default + 2) i3 : Foo where a := 3 b := 3 example : Foo.a = 3 := rfl ``` # Coercions using Type Classes %%% tag := "coercions-using-type-classes" %%% :::setup ``` variable {n : Nat} {α : Type u} {as : List α} def Set (α : Type u) := α → Prop ``` The most basic type of coercion maps elements of one type to another. For example, a coercion from {lean}`Nat` to {lean}`Int` allows us to view any element {lean}`n : Nat` as an element of {lean}`Int`. But some coercions depend on parameters; for example, for any type {lean}`α`, we can view any element {lean}`as : List α` as an element of {lean}`Set α`, namely, the set of elements occurring in the list. The corresponding coercion is defined on the “family” of types {lean}`List α`, parameterized by {lean}`α`. ::: Lean allows us to declare three kinds of coercions: - from a family of types to another family of types - from a family of types to the class of sorts - from a family of types to the class of function types The first kind of coercion allows us to view any element of a member of the source family as an element of a corresponding member of the target family. The second kind of coercion allows us to view any element of a member of the source family as a type. The third kind of coercion allows us to view any element of the source family as a function. Let us consider each of these in turn. :::setup ``` variable {α : Type u} {β : Type v} [Coe α β] ``` In Lean, coercions are implemented on top of the type class resolution framework. We define a coercion from {lean}`α` to {lean}`β` by declaring an instance of {lean}`Coe α β`. For example, we can define a coercion from {lean}`Bool` to {lean}`Prop` as follows: ```lean instance : Coe Bool Prop where coe b := b = true ``` ::: This enables us to use boolean terms in {kw}`if`-{kw}`then`-{kw}`else` expressions: ```lean #eval if true then 5 else 3 #eval if false then 5 else 3 ``` :::leanFirst We can define a coercion from {leanRef}`List α` to {leanRef}`Set α` as follows: ```lean def Set (α : Type u) := α → Prop def Set.empty {α : Type u} : Set α := fun _ => False def Set.mem (a : α) (s : Set α) : Prop := s a def Set.singleton (a : α) : Set α := fun x => x = a def Set.union (a b : Set α) : Set α := fun x => a x ∨ b x notation "{ " a " }" => Set.singleton a infix:55 " ∪ " => Set.union ------ def List.toSet : List α → Set α | [] => Set.empty | a::as => {a} ∪ as.toSet instance : Coe (List α) (Set α) where coe a := a.toSet def s : Set Nat := {1} #check s ∪ [2, 3] -- s ∪ [2, 3].toSet : Set Nat ``` ::: We can use the notation {lit}`↑` to force a coercion to be introduced in a particular place. It is also helpful to make our intent clear, and work around limitations of the coercion resolution system. ```lean def Set (α : Type u) := α → Prop def Set.empty {α : Type u} : Set α := fun _ => False def Set.mem (a : α) (s : Set α) : Prop := s a def Set.singleton (a : α) : Set α := fun x => x = a def Set.union (a b : Set α) : Set α := fun x => a x ∨ b x notation "{ " a " }" => Set.singleton a infix:55 " ∪ " => Set.union def List.toSet : List α → Set α | [] => Set.empty | a::as => {a} ∪ as.toSet instance : Coe (List α) (Set α) where coe a := a.toSet ------ def s : Set Nat := {1} #check let x := ↑[2, 3]; s ∪ x -- let x := [2, 3].toSet; s ∪ x : Set Nat #check let x := [2, 3]; s ∪ x -- let x := [2, 3]; s ∪ x.toSet : Set Nat ``` Lean also supports dependent coercions using the type class {lean}`CoeDep`. For example, we cannot coerce arbitrary propositions to {lean}`Bool`, only the ones that implement the {lean}`Decidable` typeclass. ```lean instance (p : Prop) [Decidable p] : CoeDep Prop p Bool where coe := decide p ``` Lean will also chain (non-dependent) coercions as necessary. Actually, the type class {lean}`CoeT` is the transitive closure of {lean}`Coe`. Let us now consider the second kind of coercion. By the _class of sorts_, we mean the collection of universes {lean}`Type u`. A coercion of the second kind is of the form: ``` c : (x1 : A1) → ... → (xn : An) → F x1 ... xn → Type u ``` where {lit}`F` is a family of types as above. This allows us to write {lit}`s : t` whenever {lit}`t` is of type {lit}`F a₁ ... aₙ`. In other words, the coercion allows us to view the elements of {lit}`F a₁ ... aₙ` as types. This is very useful when defining algebraic structures in which one component, the carrier of the structure, is a {lean}`Type`. For example, we can define a semigroup as follows: ```lean structure Semigroup where carrier : Type u mul : carrier → carrier → carrier mul_assoc (a b c : carrier) : mul (mul a b) c = mul a (mul b c) instance (S : Semigroup) : Mul S.carrier where mul a b := S.mul a b ``` :::setup ``` structure Semigroup where carrier : Type u mul : carrier → carrier → carrier mul_assoc (a b c : carrier) : mul (mul a b) c = mul a (mul b c) instance (S : Semigroup) : Mul S.carrier where mul a b := S.mul a b variable {S : Semigroup} (a b : S.carrier) instance : CoeSort Semigroup (Type u) where coe s := s.carrier universe u ``` In other words, a semigroup consists of a type, {leanRef}`carrier`, and a multiplication, {leanRef}`mul`, with the property that the multiplication is associative. The {kw}`instance` command allows us to write {lean}`a * b` instead of {lean}`Semigroup.mul S a b` whenever we have {lean}`a b : S.carrier`; notice that Lean can infer the argument {leanRef}`S` from the types of {leanRef}`a` and {leanRef}`b`. The function {lean}`Semigroup.carrier` maps the class {leanRef}`Semigroup` to the sort {leanRef}`Type u`: ```lean structure Semigroup where carrier : Type u mul : carrier → carrier → carrier mul_assoc (a b c : carrier) : mul (mul a b) c = mul a (mul b c) instance (S : Semigroup) : Mul S.carrier where mul a b := S.mul a b ------ #check Semigroup.carrier -- Semigroup.carrier.{u} (self : Semigroup) : Type u ``` If we declare this function to be a coercion, then whenever we have a semigroup {lean}`S : Semigroup`, we can write {lean}`a : S` instead of {lean}`a : S.carrier`: ```lean structure Semigroup where carrier : Type u mul : carrier → carrier → carrier mul_assoc (a b c : carrier) : mul (mul a b) c = mul a (mul b c) instance (S : Semigroup) : Mul S.carrier where mul a b := S.mul a b ------ instance : CoeSort Semigroup (Type u) where coe s := s.carrier example (S : Semigroup) (a b c : S) : (a * b) * c = a * (b * c) := Semigroup.mul_assoc _ a b c ``` It is the coercion that makes it possible to write {leanRef}`(a b c : S)`. Note that, we define an instance of {leanRef}`CoeSort Semigroup (Type u)` instead of {lean}`Coe Semigroup (Type u)`. ::: ::::setup ``` variable (B : Type u) (C : Type v) ``` By the _class of function types_, we mean the collection of Pi types {lean}`(z : B) → C`. The third kind of coercion has the form: ``` c : (x₁ : A₁) → ... → (xₙ : Aₙ) → (y : F x₁ ... xₙ) → (z : B) → C ``` :::leanFirst where {lit}`F` is again a family of types and {lit}`B` and {lit}`C` can depend on {lit}`x₁, ..., xₙ, y`. This makes it possible to write {lit}`t s` whenever {lit}`t` is an element of {lit}`F a₁ ... aₙ`. In other words, the coercion enables us to view elements of {lit}`F a₁ ... aₙ` as functions. Continuing the example above, we can define the notion of a morphism between semigroups {leanRef}`S1` and {leanRef}`S2`. That is, a function from the carrier of {leanRef}`S1` to the carrier of {leanRef}`S2` (note the implicit coercion) that respects the multiplication. The projection {leanRef}`Morphism.mor` takes a morphism to the underlying function: ```lean structure Semigroup where carrier : Type u mul : carrier → carrier → carrier mul_assoc (a b c : carrier) : mul (mul a b) c = mul a (mul b c) instance (S : Semigroup) : Mul S.carrier where mul a b := S.mul a b instance : CoeSort Semigroup (Type u) where coe s := s.carrier ------ structure Morphism (S1 S2 : Semigroup) where mor : S1 → S2 resp_mul : ∀ a b : S1, mor (a * b) = (mor a) * (mor b) #check @Morphism.mor ``` ::: As a result, it is a prime candidate for the third type of coercion. :::: ```lean structure Semigroup where carrier : Type u mul : carrier → carrier → carrier mul_assoc (a b c : carrier) : mul (mul a b) c = mul a (mul b c) instance (S : Semigroup) : Mul S.carrier where mul a b := S.mul a b instance : CoeSort Semigroup (Type u) where coe s := s.carrier structure Morphism (S1 S2 : Semigroup) where mor : S1 → S2 resp_mul : ∀ a b : S1, mor (a * b) = (mor a) * (mor b) ------ instance (S1 S2 : Semigroup) : CoeFun (Morphism S1 S2) (fun _ => S1 → S2) where coe m := m.mor theorem resp_mul {S1 S2 : Semigroup} (f : Morphism S1 S2) (a b : S1) : f (a * b) = f a * f b := f.resp_mul a b example (S1 S2 : Semigroup) (f : Morphism S1 S2) (a : S1) : f (a * a * a) = f a * f a * f a := calc f (a * a * a) _ = f (a * a) * f a := by rw [resp_mul f] _ = f a * f a * f a := by rw [resp_mul f] ``` With the coercion in place, we can write {leanRef}`f (a * a * a)` instead of {leanRef}`f.mor (a * a * a)`. When the {leanRef}`Morphism`, {leanRef}`f`, is used where a function is expected, Lean inserts the coercion. Similar to {lean}`CoeSort`, we have yet another class {lean}`CoeFun` for this class of coercions. The parameter {lit}`γ` is used to specify the function type we are coercing to. This type may depend on the type we are coercing from. ================================================ FILE: book/TPiL.lean ================================================ import VersoManual import TPiL.Intro import TPiL.DependentTypeTheory import TPiL.PropositionsAndProofs import TPiL.QuantifiersEquality import TPiL.Tactics import TPiL.InteractingWithLean import TPiL.InductiveTypes import TPiL.InductionAndRecursion import TPiL.StructuresAndRecords import TPiL.TypeClasses import TPiL.Conv import TPiL.AxiomsComputation open Verso.Genre Manual open Verso Code External open Verso Doc Elab in open Lean (quote) in @[role_expander versionString] def versionString : RoleExpander | #[], #[] => do let version ← IO.FS.readFile "../examples/lean-toolchain" let version := version.dropPrefix "leanprover/lean4:" |>.dropPrefix "v" |>.trimAscii |>.copy pure #[← ``(Verso.Doc.Inline.code $(quote version))] | _, _ => throwError "Unexpected arguments" #doc (Manual) "Theorem Proving in Lean 4" => %%% authors := ["Jeremy Avigad", "Leonardo de Moura", "Soonho Kong", "Sebastian Ullrich"] authorshipNote := some "with contributions from the Lean Community" %%% This version of the text assumes you’re using Lean 4 (specifically {versionString}[]). See the [Quickstart section](https://lean-lang.org/documentation/setup/) of the Lean documentation to install Lean. The first version of this book was written for Lean 2, and the Lean 3 version is available [here](https://leanprover.github.io/theorem_proving_in_lean/). {include 1 TPiL.Intro} {include 1 TPiL.DependentTypeTheory} {include 1 TPiL.PropositionsAndProofs} {include 1 TPiL.QuantifiersEquality} {include 1 TPiL.Tactics} {include 1 TPiL.InteractingWithLean} {include 1 TPiL.InductiveTypes} {include 1 TPiL.InductionAndRecursion} {include 1 TPiL.StructuresAndRecords} {include 1 TPiL.TypeClasses} {include 1 TPiL.Conv} {include 1 TPiL.AxiomsComputation} ================================================ FILE: book/lake-manifest.json ================================================ {"version": "1.1.0", "packagesDir": ".lake/packages", "packages": [{"url": "https://github.com/leanprover/verso.git", "type": "git", "subDir": null, "scope": "", "rev": "ea44a4d919a4570055bf53171ea4d8a8919cde84", "name": "verso", "manifestFile": "lake-manifest.json", "inputRev": "main", "inherited": false, "configFile": "lakefile.lean"}, {"url": "https://github.com/leanprover-community/plausible", "type": "git", "subDir": null, "scope": "", "rev": "160af9e8e7d4ae448f3c92edcc5b6a8522453f11", "name": "plausible", "manifestFile": "lake-manifest.json", "inputRev": "main", "inherited": true, "configFile": "lakefile.toml"}, {"url": "https://github.com/acmepjz/md4lean", "type": "git", "subDir": null, "scope": "", "rev": "38ac5945d744903ffcc473ce1030223991b11cf6", "name": "MD4Lean", "manifestFile": "lake-manifest.json", "inputRev": "main", "inherited": true, "configFile": "lakefile.lean"}, {"url": "https://github.com/leanprover/subverso", "type": "git", "subDir": null, "scope": "", "rev": "eb77622e97e942ba2cfe02f60637705fc2d9481b", "name": "subverso", "manifestFile": "lake-manifest.json", "inputRev": "main", "inherited": true, "configFile": "lakefile.lean"}], "name": "tpil", "lakeDir": ".lake"} ================================================ FILE: book/lakefile.toml ================================================ name = "tpil" version = "0.1.0" defaultTargets = ["tpil"] [[require]] name = "verso" git = "https://github.com/leanprover/verso.git" rev = "main" [leanOptions] #weak.verso.examples.suggest = true weak.linter.typography.quotes = true weak.linter.typography.dashes = true weak.linter.verso.manual.headerTags = true [[lean_lib]] name = "TPiL" [[lean_exe]] name = "tpil" root = "Main" ================================================ FILE: book/lean-toolchain ================================================ leanprover/lean4:v4.27.0-rc1 ================================================ FILE: book/static/fonts/noto-sans-mono/OFL.txt ================================================ Copyright 2022 The Noto Project Authors (https://github.com/notofonts/latin-greek-cyrillic) This Font Software is licensed under the SIL Open Font License, Version 1.1. This license is copied below, and is also available with a FAQ at: https://openfontlicense.org ----------------------------------------------------------- SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 ----------------------------------------------------------- PREAMBLE The goals of the Open Font License (OFL) are to stimulate worldwide development of collaborative font projects, to support the font creation efforts of academic and linguistic communities, and to provide a free and open framework in which fonts may be shared and improved in partnership with others. The OFL allows the licensed fonts to be used, studied, modified and redistributed freely as long as they are not sold by themselves. The fonts, including any derivative works, can be bundled, embedded, redistributed and/or sold with any software provided that any reserved names are not used by derivative works. The fonts and derivatives, however, cannot be released under any other type of license. The requirement for fonts to remain under this license does not apply to any document created using the fonts or their derivatives. DEFINITIONS "Font Software" refers to the set of files released by the Copyright Holder(s) under this license and clearly marked as such. This may include source files, build scripts and documentation. "Reserved Font Name" refers to any names specified as such after the copyright statement(s). "Original Version" refers to the collection of Font Software components as distributed by the Copyright Holder(s). "Modified Version" refers to any derivative made by adding to, deleting, or substituting -- in part or in whole -- any of the components of the Original Version, by changing formats or by porting the Font Software to a new environment. "Author" refers to any designer, engineer, programmer, technical writer or other person who contributed to the Font Software. PERMISSION & CONDITIONS Permission is hereby granted, free of charge, to any person obtaining a copy of the Font Software, to use, study, copy, merge, embed, modify, redistribute, and sell modified and unmodified copies of the Font Software, subject to the following conditions: 1) Neither the Font Software nor any of its individual components, in Original or Modified Versions, may be sold by itself. 2) Original or Modified Versions of the Font Software may be bundled, redistributed and/or sold with any software, provided that each copy contains the above copyright notice and this license. These can be included either as stand-alone text files, human-readable headers or in the appropriate machine-readable metadata fields within text or binary files as long as those fields can be easily viewed by the user. 3) No Modified Version of the Font Software may use the Reserved Font Name(s) unless explicit written permission is granted by the corresponding Copyright Holder. This restriction only applies to the primary font name as presented to the users. 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font Software shall not be used to promote, endorse or advertise any Modified Version, except to acknowledge the contribution(s) of the Copyright Holder(s) and the Author(s) or with their explicit written permission. 5) The Font Software, modified or unmodified, in part or in whole, must be distributed entirely under this license, and must not be distributed under any other license. The requirement for fonts to remain under this license does not apply to any document created using the Font Software. TERMINATION This license becomes null and void if any of the above conditions are not met. DISCLAIMER THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE. ================================================ FILE: book/static/fonts/noto-sans-mono/noto-sans-mono.css ================================================ @font-face { font-family: 'Noto Sans Mono'; font-style: normal; font-display: swap; font-weight: 100 900; src: url('./NotoSansMono-VariableFont_wdth,wght.ttf') format('truetype'); unicode-range: U+207a-207F, U+208a-208f, U+2090-209c; } @font-face { font-family: 'Noto Sans Mono'; font-style: italic; font-display: swap; font-weight: 100 900; src: url('./NotoSansMono-VariableFont_wdth,wght.ttf') format('truetype'); unicode-range: U+207a-207F, U+208a-208f, U+2090-209c; } ================================================ FILE: book/static/fonts/source-code-pro/LICENSE.md ================================================ © 2023 Adobe (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe in the United States and/or other countries. This Font Software is licensed under the SIL Open Font License, Version 1.1. This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL ----------------------------------------------------------- SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 ----------------------------------------------------------- PREAMBLE The goals of the Open Font License (OFL) are to stimulate worldwide development of collaborative font projects, to support the font creation efforts of academic and linguistic communities, and to provide a free and open framework in which fonts may be shared and improved in partnership with others. The OFL allows the licensed fonts to be used, studied, modified and redistributed freely as long as they are not sold by themselves. The fonts, including any derivative works, can be bundled, embedded, redistributed and/or sold with any software provided that any reserved names are not used by derivative works. The fonts and derivatives, however, cannot be released under any other type of license. The requirement for fonts to remain under this license does not apply to any document created using the fonts or their derivatives. DEFINITIONS "Font Software" refers to the set of files released by the Copyright Holder(s) under this license and clearly marked as such. This may include source files, build scripts and documentation. "Reserved Font Name" refers to any names specified as such after the copyright statement(s). "Original Version" refers to the collection of Font Software components as distributed by the Copyright Holder(s). "Modified Version" refers to any derivative made by adding to, deleting, or substituting -- in part or in whole -- any of the components of the Original Version, by changing formats or by porting the Font Software to a new environment. "Author" refers to any designer, engineer, programmer, technical writer or other person who contributed to the Font Software. PERMISSION & CONDITIONS Permission is hereby granted, free of charge, to any person obtaining a copy of the Font Software, to use, study, copy, merge, embed, modify, redistribute, and sell modified and unmodified copies of the Font Software, subject to the following conditions: 1) Neither the Font Software nor any of its individual components, in Original or Modified Versions, may be sold by itself. 2) Original or Modified Versions of the Font Software may be bundled, redistributed and/or sold with any software, provided that each copy contains the above copyright notice and this license. These can be included either as stand-alone text files, human-readable headers or in the appropriate machine-readable metadata fields within text or binary files as long as those fields can be easily viewed by the user. 3) No Modified Version of the Font Software may use the Reserved Font Name(s) unless explicit written permission is granted by the corresponding Copyright Holder. This restriction only applies to the primary font name as presented to the users. 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font Software shall not be used to promote, endorse or advertise any Modified Version, except to acknowledge the contribution(s) of the Copyright Holder(s) and the Author(s) or with their explicit written permission. 5) The Font Software, modified or unmodified, in part or in whole, must be distributed entirely under this license, and must not be distributed under any other license. The requirement for fonts to remain under this license does not apply to any document created using the Font Software. TERMINATION This license becomes null and void if any of the above conditions are not met. DISCLAIMER THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE. ================================================ FILE: book/static/fonts/source-code-pro/source-code-pro.css ================================================ @font-face{ font-family: 'Source Code Pro'; font-weight: 200; font-style: normal; font-stretch: normal; src: url('./WOFF2/TTF/SourceCodePro-ExtraLight.ttf.woff2') format('woff2'), url('./WOFF/OTF/SourceCodePro-ExtraLight.otf.woff') format('woff'), url('./OTF/SourceCodePro-ExtraLight.otf') format('opentype'), url('./TTF/SourceCodePro-ExtraLight.ttf') format('truetype'); } @font-face{ font-family: 'Source Code Pro'; font-weight: 200; font-style: italic; font-stretch: normal; src: url('./WOFF2/TTF/SourceCodePro-ExtraLightIt.ttf.woff2') format('woff2'), url('./WOFF/OTF/SourceCodePro-ExtraLightIt.otf.woff') format('woff'), url('./OTF/SourceCodePro-ExtraLightIt.otf') format('opentype'), url('./TTF/SourceCodePro-ExtraLightIt.ttf') format('truetype'); } @font-face{ font-family: 'Source Code Pro'; font-weight: 300; font-style: normal; font-stretch: normal; src: url('./WOFF2/TTF/SourceCodePro-Light.ttf.woff2') format('woff2'), url('./WOFF/OTF/SourceCodePro-Light.otf.woff') format('woff'), url('./OTF/SourceCodePro-Light.otf') format('opentype'), url('./TTF/SourceCodePro-Light.ttf') format('truetype'); } @font-face{ font-family: 'Source Code Pro'; font-weight: 300; font-style: italic; font-stretch: normal; src: url('./WOFF2/TTF/SourceCodePro-LightIt.ttf.woff2') format('woff2'), url('./WOFF/OTF/SourceCodePro-LightIt.otf.woff') format('woff'), url('./OTF/SourceCodePro-LightIt.otf') format('opentype'), url('./TTF/SourceCodePro-LightIt.ttf') format('truetype'); } @font-face{ font-family: 'Source Code Pro'; font-weight: 400; font-style: normal; font-stretch: normal; src: url('./WOFF2/TTF/SourceCodePro-Regular.ttf.woff2') format('woff2'), url('./WOFF/OTF/SourceCodePro-Regular.otf.woff') format('woff'), url('./OTF/SourceCodePro-Regular.otf') format('opentype'), url('./TTF/SourceCodePro-Regular.ttf') format('truetype'); } @font-face{ font-family: 'Source Code Pro'; font-weight: 400; font-style: italic; font-stretch: normal; src: url('./WOFF2/TTF/SourceCodePro-It.ttf.woff2') format('woff2'), url('./WOFF/OTF/SourceCodePro-It.otf.woff') format('woff'), url('./OTF/SourceCodePro-It.otf') format('opentype'), url('./TTF/SourceCodePro-It.ttf') format('truetype'); } @font-face{ font-family: 'Source Code Pro'; font-weight: 500; font-style: normal; font-stretch: normal; src: url('./WOFF2/TTF/SourceCodePro-Medium.ttf.woff2') format('woff2'), url('./WOFF/OTF/SourceCodePro-Medium.otf.woff') format('woff'), url('./OTF/SourceCodePro-Medium.otf') format('opentype'), url('./TTF/SourceCodePro-Medium.ttf') format('truetype'); } @font-face{ font-family: 'Source Code Pro'; font-weight: 500; font-style: italic; font-stretch: normal; src: url('./WOFF2/TTF/SourceCodePro-MediumIt.ttf.woff2') format('woff2'), url('./WOFF/OTF/SourceCodePro-MediumIt.otf.woff') format('woff'), url('./OTF/SourceCodePro-MediumIt.otf') format('opentype'), url('./TTF/SourceCodePro-MediumIt.ttf') format('truetype'); } @font-face{ font-family: 'Source Code Pro'; font-weight: 600; font-style: normal; font-stretch: normal; src: url('./WOFF2/TTF/SourceCodePro-Semibold.ttf.woff2') format('woff2'), url('./WOFF/OTF/SourceCodePro-Semibold.otf.woff') format('woff'), url('./OTF/SourceCodePro-Semibold.otf') format('opentype'), url('./TTF/SourceCodePro-Semibold.ttf') format('truetype'); } @font-face{ font-family: 'Source Code Pro'; font-weight: 600; font-style: italic; font-stretch: normal; src: url('./WOFF2/TTF/SourceCodePro-SemiboldIt.ttf.woff2') format('woff2'), url('./WOFF/OTF/SourceCodePro-SemiboldIt.otf.woff') format('woff'), url('./OTF/SourceCodePro-SemiboldIt.otf') format('opentype'), url('./TTF/SourceCodePro-SemiboldIt.ttf') format('truetype'); } @font-face{ font-family: 'Source Code Pro'; font-weight: 700; font-style: normal; font-stretch: normal; src: url('./WOFF2/TTF/SourceCodePro-Bold.ttf.woff2') format('woff2'), url('./WOFF/OTF/SourceCodePro-Bold.otf.woff') format('woff'), url('./OTF/SourceCodePro-Bold.otf') format('opentype'), url('./TTF/SourceCodePro-Bold.ttf') format('truetype'); } @font-face{ font-family: 'Source Code Pro'; font-weight: 700; font-style: italic; font-stretch: normal; src: url('./WOFF2/TTF/SourceCodePro-BoldIt.ttf.woff2') format('woff2'), url('./WOFF/OTF/SourceCodePro-BoldIt.otf.woff') format('woff'), url('./OTF/SourceCodePro-BoldIt.otf') format('opentype'), url('./TTF/SourceCodePro-BoldIt.ttf') format('truetype'); } @font-face{ font-family: 'Source Code Pro'; font-weight: 900; font-style: normal; font-stretch: normal; src: url('./WOFF2/TTF/SourceCodePro-Black.ttf.woff2') format('woff2'), url('./WOFF/OTF/SourceCodePro-Black.otf.woff') format('woff'), url('./OTF/SourceCodePro-Black.otf') format('opentype'), url('./TTF/SourceCodePro-Black.ttf') format('truetype'); } @font-face{ font-family: 'Source Code Pro'; font-weight: 900; font-style: italic; font-stretch: normal; src: url('./WOFF2/TTF/SourceCodePro-BlackIt.ttf.woff2') format('woff2'), url('./WOFF/OTF/SourceCodePro-BlackIt.otf.woff') format('woff'), url('./OTF/SourceCodePro-BlackIt.otf') format('opentype'), url('./TTF/SourceCodePro-BlackIt.ttf') format('truetype'); } ================================================ FILE: book/static/fonts/source-sans/LICENSE.md ================================================ Copyright 2010-2024 Adobe (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe in the United States and/or other countries. This Font Software is licensed under the SIL Open Font License, Version 1.1. This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL ----------------------------------------------------------- SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 ----------------------------------------------------------- PREAMBLE The goals of the Open Font License (OFL) are to stimulate worldwide development of collaborative font projects, to support the font creation efforts of academic and linguistic communities, and to provide a free and open framework in which fonts may be shared and improved in partnership with others. The OFL allows the licensed fonts to be used, studied, modified and redistributed freely as long as they are not sold by themselves. The fonts, including any derivative works, can be bundled, embedded, redistributed and/or sold with any software provided that any reserved names are not used by derivative works. The fonts and derivatives, however, cannot be released under any other type of license. The requirement for fonts to remain under this license does not apply to any document created using the fonts or their derivatives. DEFINITIONS "Font Software" refers to the set of files released by the Copyright Holder(s) under this license and clearly marked as such. This may include source files, build scripts and documentation. "Reserved Font Name" refers to any names specified as such after the copyright statement(s). "Original Version" refers to the collection of Font Software components as distributed by the Copyright Holder(s). "Modified Version" refers to any derivative made by adding to, deleting, or substituting -- in part or in whole -- any of the components of the Original Version, by changing formats or by porting the Font Software to a new environment. "Author" refers to any designer, engineer, programmer, technical writer or other person who contributed to the Font Software. PERMISSION & CONDITIONS Permission is hereby granted, free of charge, to any person obtaining a copy of the Font Software, to use, study, copy, merge, embed, modify, redistribute, and sell modified and unmodified copies of the Font Software, subject to the following conditions: 1) Neither the Font Software nor any of its individual components, in Original or Modified Versions, may be sold by itself. 2) Original or Modified Versions of the Font Software may be bundled, redistributed and/or sold with any software, provided that each copy contains the above copyright notice and this license. These can be included either as stand-alone text files, human-readable headers or in the appropriate machine-readable metadata fields within text or binary files as long as those fields can be easily viewed by the user. 3) No Modified Version of the Font Software may use the Reserved Font Name(s) unless explicit written permission is granted by the corresponding Copyright Holder. This restriction only applies to the primary font name as presented to the users. 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font Software shall not be used to promote, endorse or advertise any Modified Version, except to acknowledge the contribution(s) of the Copyright Holder(s) and the Author(s) or with their explicit written permission. 5) The Font Software, modified or unmodified, in part or in whole, must be distributed entirely under this license, and must not be distributed under any other license. The requirement for fonts to remain under this license does not apply to any document created using the Font Software. TERMINATION This license becomes null and void if any of the above conditions are not met. DISCLAIMER THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE. ================================================ FILE: book/static/fonts/source-sans/source-sans-3.css ================================================ @font-face{ font-family: 'Source Sans 3'; font-weight: 200; font-style: normal; font-stretch: normal; src: url('WOFF2/TTF/SourceSans3-ExtraLight.ttf.woff2') format('woff2'), url('WOFF/OTF/SourceSans3-ExtraLight.otf.woff') format('woff'); } @font-face{ font-family: 'Source Sans 3'; font-weight: 200; font-style: italic; font-stretch: normal; src: url('WOFF2/TTF/SourceSans3-ExtraLightIt.ttf.woff2') format('woff2'), url('WOFF/OTF/SourceSans3-ExtraLightIt.otf.woff') format('woff'); } @font-face{ font-family: 'Source Sans 3'; font-weight: 300; font-style: normal; font-stretch: normal; src: url('WOFF2/TTF/SourceSans3-Light.ttf.woff2') format('woff2'), url('WOFF/OTF/SourceSans3-Light.otf.woff') format('woff'); } @font-face{ font-family: 'Source Sans 3'; font-weight: 300; font-style: italic; font-stretch: normal; src: url('WOFF2/TTF/SourceSans3-LightIt.ttf.woff2') format('woff2'), url('WOFF/OTF/SourceSans3-LightIt.otf.woff') format('woff'); } @font-face{ font-family: 'Source Sans 3'; font-weight: 400; font-style: normal; font-stretch: normal; src: url('WOFF2/TTF/SourceSans3-Regular.ttf.woff2') format('woff2'), url('WOFF/OTF/SourceSans3-Regular.otf.woff') format('woff'); } @font-face{ font-family: 'Source Sans 3'; font-weight: 400; font-style: italic; font-stretch: normal; src: url('WOFF2/TTF/SourceSans3-It.ttf.woff2') format('woff2'), url('WOFF/OTF/SourceSans3-It.otf.woff') format('woff'); } @font-face{ font-family: 'Source Sans 3'; font-weight: 600; font-style: normal; font-stretch: normal; src: url('WOFF2/TTF/SourceSans3-Semibold.ttf.woff2') format('woff2'), url('WOFF/OTF/SourceSans3-Semibold.otf.woff') format('woff'); } @font-face{ font-family: 'Source Sans 3'; font-weight: 600; font-style: italic; font-stretch: normal; src: url('WOFF2/TTF/SourceSans3-SemiboldIt.ttf.woff2') format('woff2'), url('WOFF/OTF/SourceSans3-SemiboldIt.otf.woff') format('woff'); } @font-face{ font-family: 'Source Sans 3'; font-weight: 700; font-style: normal; font-stretch: normal; src: url('WOFF2/TTF/SourceSans3-Bold.ttf.woff2') format('woff2'), url('WOFF/OTF/SourceSans3-Bold.otf.woff') format('woff'); } @font-face{ font-family: 'Source Sans 3'; font-weight: 700; font-style: italic; font-stretch: normal; src: url('WOFF2/TTF/SourceSans3-BoldIt.ttf.woff2') format('woff2'), url('WOFF/OTF/SourceSans3-BoldIt.otf.woff') format('woff'); } @font-face{ font-family: 'Source Sans 3'; font-weight: 900; font-style: normal; font-stretch: normal; src: url('WOFF2/TTF/SourceSans3-Black.ttf.woff2') format('woff2'), url('WOFF/OTF/SourceSans3-Black.otf.woff') format('woff'); } @font-face{ font-family: 'Source Sans 3'; font-weight: 900; font-style: italic; font-stretch: normal; src: url('WOFF2/TTF/SourceSans3-BlackIt.ttf.woff2') format('woff2'), url('WOFF/OTF/SourceSans3-BlackIt.otf.woff') format('woff'); } ================================================ FILE: book/static/fonts/source-sans/source-sans-3VF.css ================================================ @font-face{ font-family: 'Source Sans 3 VF'; font-weight: 200 900; font-style: normal; font-stretch: normal; src: url('WOFF2/VF/SourceSans3VF-Upright.ttf.woff2') format('woff2-variations'), url('WOFF/VF/SourceSans3VF-Upright.ttf.woff') format('woff-variations'), url('VF/SourceSans3VF-Upright.ttf') format('truetype-variations'); } @font-face{ font-family: 'Source Sans 3 VF'; font-weight: 200 900; font-style: italic; font-stretch: normal; src: url('WOFF2/VF/SourceSans3VF-Italic.ttf.woff2') format('woff2-variations'), url('WOFF/VF/SourceSans3VF-Italic.ttf.woff') format('woff-variations'), url('VF/SourceSans3VF-Italic.ttf') format('truetype-variations'); } ================================================ FILE: book/static/fonts/source-serif/LICENSE.md ================================================ Copyright 2014 - 2023 Adobe (http://www.adobe.com/), with Reserved Font Name ‘Source’. All Rights Reserved. Source is a trademark of Adobe in the United States and/or other countries. This Font Software is licensed under the SIL Open Font License, Version 1.1. This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL ----------------------------------------------------------- SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 ----------------------------------------------------------- PREAMBLE The goals of the Open Font License (OFL) are to stimulate worldwide development of collaborative font projects, to support the font creation efforts of academic and linguistic communities, and to provide a free and open framework in which fonts may be shared and improved in partnership with others. The OFL allows the licensed fonts to be used, studied, modified and redistributed freely as long as they are not sold by themselves. The fonts, including any derivative works, can be bundled, embedded, redistributed and/or sold with any software provided that any reserved names are not used by derivative works. The fonts and derivatives, however, cannot be released under any other type of license. The requirement for fonts to remain under this license does not apply to any document created using the fonts or their derivatives. DEFINITIONS "Font Software" refers to the set of files released by the Copyright Holder(s) under this license and clearly marked as such. This may include source files, build scripts and documentation. "Reserved Font Name" refers to any names specified as such after the copyright statement(s). "Original Version" refers to the collection of Font Software components as distributed by the Copyright Holder(s). "Modified Version" refers to any derivative made by adding to, deleting, or substituting -- in part or in whole -- any of the components of the Original Version, by changing formats or by porting the Font Software to a new environment. "Author" refers to any designer, engineer, programmer, technical writer or other person who contributed to the Font Software. PERMISSION & CONDITIONS Permission is hereby granted, free of charge, to any person obtaining a copy of the Font Software, to use, study, copy, merge, embed, modify, redistribute, and sell modified and unmodified copies of the Font Software, subject to the following conditions: 1) Neither the Font Software nor any of its individual components, in Original or Modified Versions, may be sold by itself. 2) Original or Modified Versions of the Font Software may be bundled, redistributed and/or sold with any software, provided that each copy contains the above copyright notice and this license. These can be included either as stand-alone text files, human-readable headers or in the appropriate machine-readable metadata fields within text or binary files as long as those fields can be easily viewed by the user. 3) No Modified Version of the Font Software may use the Reserved Font Name(s) unless explicit written permission is granted by the corresponding Copyright Holder. This restriction only applies to the primary font name as presented to the users. 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font Software shall not be used to promote, endorse or advertise any Modified Version, except to acknowledge the contribution(s) of the Copyright Holder(s) and the Author(s) or with their explicit written permission. 5) The Font Software, modified or unmodified, in part or in whole, must be distributed entirely under this license, and must not be distributed under any other license. The requirement for fonts to remain under this license does not apply to any document created using the Font Software. TERMINATION This license becomes null and void if any of the above conditions are not met. DISCLAIMER THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE. ================================================ FILE: book/static/fonts/source-serif/source-serif-text.css ================================================ @font-face{ font-family: 'Source Serif'; font-weight: 200; font-display: swap; font-style: normal; font-stretch: normal; src: url('./WOFF2/TTF/SourceSerif4-ExtraLight.ttf.woff2') format('woff2'), url('./WOFF/OTF/SourceSerif4-ExtraLight.otf.woff') format('woff'), url('./OTF/SourceSerif4-ExtraLight.otf') format('opentype'), url('./TTF/SourceSerif4-ExtraLight.ttf') format('truetype'); } @font-face{ font-family: 'Source Serif'; font-weight: 200; font-display: swap; font-style: italic; font-stretch: normal; src: url('./WOFF2/TTF/SourceSerif4-ExtraLightIt.ttf.woff2') format('woff2'), url('./WOFF/OTF/SourceSerif4-ExtraLightIt.otf.woff') format('woff'), url('./OTF/SourceSerif4-ExtraLightIt.otf') format('opentype'), url('./TTF/SourceSerif4-ExtraLightIt.ttf') format('truetype'); } @font-face{ font-family: 'Source Serif'; font-weight: 300; font-display: swap; font-style: normal; font-stretch: normal; src: url('./WOFF2/TTF/SourceSerif4-Light.ttf.woff2') format('woff2'), url('./WOFF/OTF/SourceSerif4-Light.otf.woff') format('woff'), url('./OTF/SourceSerif4-Light.otf') format('opentype'), url('./TTF/SourceSerif4-Light.ttf') format('truetype'); } @font-face{ font-family: 'Source Serif'; font-weight: 300; font-display: swap; font-style: italic; font-stretch: normal; src: url('./WOFF2/TTF/SourceSerif4-LightIt.ttf.woff2') format('woff2'), url('./WOFF/OTF/SourceSerif4-LightIt.otf.woff') format('woff'), url('./OTF/SourceSerif4-LightIt.otf') format('opentype'), url('./TTF/SourceSerif4-LightIt.ttf') format('truetype'); } @font-face{ font-family: 'Source Serif'; font-weight: 400; font-display: swap; font-style: normal; font-stretch: normal; src: url('./WOFF2/TTF/SourceSerif4-Regular.ttf.woff2') format('woff2'), url('./WOFF/OTF/SourceSerif4-Regular.otf.woff') format('woff'), url('./OTF/SourceSerif4-Regular.otf') format('opentype'), url('./TTF/SourceSerif4-Regular.ttf') format('truetype'); } @font-face{ font-family: 'Source Serif'; font-weight: 400; font-display: swap; font-style: italic; font-stretch: normal; src: url('./WOFF2/TTF/SourceSerif4-It.ttf.woff2') format('woff2'), url('./WOFF/OTF/SourceSerif4-It.otf.woff') format('woff'), url('./OTF/SourceSerif4-It.otf') format('opentype'), url('./TTF/SourceSerif4-It.ttf') format('truetype'); } @font-face{ font-family: 'Source Serif'; font-weight: 600; font-display: swap; font-style: normal; font-stretch: normal; src: url('./WOFF2/TTF/SourceSerif4-Semibold.ttf.woff2') format('woff2'), url('./WOFF/OTF/SourceSerif4-Semibold.otf.woff') format('woff'), url('./OTF/SourceSerif4-Semibold.otf') format('opentype'), url('./TTF/SourceSerif4-Semibold.ttf') format('truetype'); } @font-face{ font-family: 'Source Serif'; font-weight: 600; font-display: swap; font-style: italic; font-stretch: normal; src: url('./WOFF2/TTF/SourceSerif4-SemiboldIt.ttf.woff2') format('woff2'), url('./WOFF/OTF/SourceSerif4-SemiboldIt.otf.woff') format('woff'), url('./OTF/SourceSerif4-SemiboldIt.otf') format('opentype'), url('./TTF/SourceSerif4-SemiboldIt.ttf') format('truetype'); } @font-face{ font-family: 'Source Serif'; font-weight: 700; font-display: swap; font-style: normal; font-stretch: normal; src: url('./WOFF2/TTF/SourceSerif4-Bold.ttf.woff2') format('woff2'), url('./WOFF/OTF/SourceSerif4-Bold.otf.woff') format('woff'), url('./OTF/SourceSerif4-Bold.otf') format('opentype'), url('./TTF/SourceSerif4-Bold.ttf') format('truetype'); } @font-face{ font-family: 'Source Serif'; font-weight: 700; font-display: swap; font-style: italic; font-stretch: normal; src: url('./WOFF2/TTF/SourceSerif4-BoldIt.ttf.woff2') format('woff2'), url('./WOFF/OTF/SourceSerif4-BoldIt.otf.woff') format('woff'), url('./OTF/SourceSerif4-BoldIt.otf') format('opentype'), url('./TTF/SourceSerif4-BoldIt.ttf') format('truetype'); } @font-face{ font-family: 'Source Serif'; font-weight: 900; font-display: swap; font-style: normal; font-stretch: normal; src: url('./WOFF2/TTF/SourceSerif4-Black.ttf.woff2') format('woff2'), url('./WOFF/OTF/SourceSerif4-Black.otf.woff') format('woff'), url('./OTF/SourceSerif4-Black.otf') format('opentype'), url('./TTF/SourceSerif4-Black.ttf') format('truetype'); } @font-face{ font-family: 'Source Serif'; font-weight: 900; font-display: swap; font-style: italic; font-stretch: normal; src: url('./WOFF2/TTF/SourceSerif4-BlackIt.ttf.woff2') format('woff2'), url('./WOFF/OTF/SourceSerif4-BlackIt.otf.woff') format('woff'), url('./OTF/SourceSerif4-BlackIt.otf') format('opentype'), url('./TTF/SourceSerif4-BlackIt.ttf') format('truetype'); } ================================================ FILE: book/static/theme.css ================================================ :root { --verso-structure-font-family: "Source Sans 3","Helvetica Neue","Segoe UI","Roboto",Arial,sans-serif; --verso-text-font-family: "Source Sans 3","Helvetica Neue","Segoe UI","Roboto",Arial,sans-serif; --verso-code-font-family: "Source Code Pro","Noto Sans Mono",monospace; --verso-selected-color: #def; } .eval-steps > *:not(:last-child):after { content: "⇒"; display: block; padding-left: 1rem; font-size: 150%; } .hl.lean .keyword.token { font-weight: 600 !important; } .error pre, .information pre, .warning pre, .error code, .information code, .warning code { overflow-x: auto; margin: 0px; } .information pre, .error pre, .warning pre, .information code, .error code, .warning code { margin: 0.5em .85em; border-left: 0.2em solid red; padding: 0 0.45em; } /* Different color for warning */ .warning pre, .warning code { border-color: var(--verso-warning-color); } /* Different color for information */ .information pre, .information code { border-color: #0000c0; } /* TODO: fix upstream */ .hl.lean code { font-family: var(--verso-code-font-family) !important; } #toc .split-toc > ol > li { margin-bottom: 0.2rem; } #toc .split-toc > ol .tactic-name { font-weight: 600; } .def-technical-term:target { background-color: var(--verso-selected-color); outline: auto; } table.tabular { border-collapse: collapse; } .tabular thead th { background-color: #f8f9fa; font-weight: 600; text-align: left; padding: 12px 16px; border-bottom: 2px solid #dee2e6; color: #495057; } .tabular td { padding: 10px 16px; border-bottom: 1px solid #e9ecef; vertical-align: top; } /* Alternating row colors */ .tabular tbody tr:nth-child(even) { background-color: #f8f9fa; } .tabular tbody tr:nth-child(odd) { background-color: #ffffff; } /* Subtle hover effect */ .tabular tbody tr:hover { background-color: #e3f2fd; } /********/ p { font-feature-settings: "calt" off; } ================================================ FILE: book/verso-sources.json ================================================ { "version": 0, "sources": { "manual": { "root": "https://lean-lang.org/doc/reference/4.26.0/", "updateFrequency": "manual", "shortName": "ref", "longName": "Lean Language Reference" } } } ================================================ FILE: examples/.gitignore ================================================ /.lake Examples/*.json Examples/*.lean ================================================ FILE: examples/Examples/Basic.lean ================================================ def hello := "world" ================================================ FILE: examples/Examples.lean ================================================ -- This module serves as the root of the `Examples` library. -- Import modules here that should be built as part of the library. import Examples.Basic example (g : Nat → Nat → Nat) (h₁ : ∀ x, x ≠ 0 → g x x = 1) (h₂ : x ≠ 0) : g x x + x = 1 + x := by conv => lhs -- ⊢ g x x + x arg 1 -- ⊢ g x x rw [h₁] -- 2 goals: ⊢ 1, ⊢ x ≠ 0 . skip . tactic => exact h₂ ================================================ FILE: examples/lake-manifest.json ================================================ {"version": "1.1.0", "packagesDir": ".lake/packages", "packages": [{"url": "https://github.com/leanprover/subverso.git", "type": "git", "subDir": null, "scope": "", "rev": "eb77622e97e942ba2cfe02f60637705fc2d9481b", "name": "subverso", "manifestFile": "lake-manifest.json", "inputRev": "main", "inherited": false, "configFile": "lakefile.lean"}], "name": "«tpil-examples»", "lakeDir": ".lake"} ================================================ FILE: examples/lakefile.toml ================================================ name = "tpil-examples" version = "0.1.0" defaultTargets = ["Examples"] [[require]] name = "subverso" git = "https://github.com/leanprover/subverso.git" rev = "main" [[lean_lib]] name = "Examples" ================================================ FILE: examples/lean-toolchain ================================================ leanprover/lean4:v4.26.0 ================================================ FILE: unixode.sty ================================================ % ------------------------------------------------------------------------------ % (C) 2012-2013 Olivier Verdier % Unixode Package % XeTeX Unicode character definitions % ------------------------------------------------------------------------------ \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{unixode}[2012/05/10] \RequirePackage{ifxetex} \ifxetex %\RequirePackage{mathspec} %\RequirePackage{fontspec} \defaultfontfeatures{Ligatures=TeX} \usepackage{newunicodechar} \newunicodechar{α}{\ensuremath{\mathrm{\alpha}}} \newunicodechar{β}{\ensuremath{\mathrm{\beta}}} \newunicodechar{γ}{\ensuremath{\mathrm{\gamma}}} \newunicodechar{δ}{\ensuremath{\mathrm{\delta}}} \newunicodechar{ε}{\ensuremath{\mathrm{\varepsilon}}} \newunicodechar{ζ}{\ensuremath{\mathrm{\zeta}}} \newunicodechar{η}{\ensuremath{\mathrm{\eta}}} \newunicodechar{θ}{\ensuremath{\mathrm{\theta}}} \newunicodechar{ι}{\ensuremath{\mathrm{\iota}}} \newunicodechar{κ}{\ensuremath{\mathrm{\kappa}}} \newunicodechar{λ}{\ensuremath{\mathrm{\lambda}}} \newunicodechar{μ}{\ensuremath{\mathrm{\mu}}} \newunicodechar{ν}{\ensuremath{\mathrm{\nu}}} \newunicodechar{ξ}{\ensuremath{\mathrm{\xi}}} \newunicodechar{π}{\ensuremath{\mathrm{\mathnormal{\pi}}}} \newunicodechar{ρ}{\ensuremath{\mathrm{\rho}}} \newunicodechar{σ}{\ensuremath{\mathrm{\sigma}}} \newunicodechar{τ}{\ensuremath{\mathrm{\tau}}} \newunicodechar{φ}{\ensuremath{\mathrm{\varphi}}} \newunicodechar{χ}{\ensuremath{\mathrm{\chi}}} \newunicodechar{ψ}{\ensuremath{\mathrm{\psi}}} \newunicodechar{ω}{\ensuremath{\mathrm{\omega}}} \newunicodechar{Γ}{\ensuremath{\mathrm{\Gamma}}} \newunicodechar{Δ}{\ensuremath{\mathrm{\Delta}}} \newunicodechar{Θ}{\ensuremath{\mathrm{\Theta}}} \newunicodechar{Λ}{\ensuremath{\mathrm{\Lambda}}} \newunicodechar{Σ}{\ensuremath{\Sigma}} \newunicodechar{Φ}{\ensuremath{\mathrm{\Phi}}} \newunicodechar{Ξ}{\ensuremath{\mathrm{\Xi}}} \newunicodechar{Ψ}{\ensuremath{\mathrm{\Psi}}} \newunicodechar{Ω}{\ensuremath{\mathrm{\Omega}}} \newunicodechar{ℵ}{\ensuremath{\aleph}} \newunicodechar{≤}{\ensuremath{\leq}} \newunicodechar{≥}{\ensuremath{\geq}} \newunicodechar{≠}{\ensuremath{\neq}} \newunicodechar{≈}{\ensuremath{\approx}} \newunicodechar{≡}{\ensuremath{\equiv}} \newunicodechar{≃}{\ensuremath{\simeq}} \newunicodechar{≺}{\ensuremath{\prec}} \newunicodechar{≼}{\ensuremath{\preceq}} \newunicodechar{≤}{\ensuremath{\leq}} \newunicodechar{≥}{\ensuremath{\geq}} \newunicodechar{∂}{\ensuremath{\partial}} \newunicodechar{∆}{\ensuremath{\triangle}} % or \laplace? \newunicodechar{∫}{\ensuremath{\int}} \newunicodechar{∑}{\ensuremath{\mathrm{\Sigma}}} \newunicodechar{Π}{\ensuremath{\Pi}} \newunicodechar{⊥}{\ensuremath{\perp}} \newunicodechar{∞}{\ensuremath{\infty}} \newunicodechar{∂}{\ensuremath{\partial}} \newunicodechar{∓}{\ensuremath{\mp}} \newunicodechar{±}{\ensuremath{\pm}} \newunicodechar{×}{\ensuremath{\times}} \newunicodechar{⊕}{\ensuremath{\oplus}} \newunicodechar{⊗}{\ensuremath{\otimes}} \newunicodechar{⊞}{\ensuremath{\boxplus}} \newunicodechar{∇}{\ensuremath{\nabla}} \newunicodechar{√}{\ensuremath{\sqrt}} \newunicodechar{⬝}{\ensuremath{\cdot}} \newunicodechar{•}{\ensuremath{\cdot}} \newunicodechar{∘}{\ensuremath{\circ}} \newunicodechar{⁻}{\ensuremath{^{\textup{\kern1pt\rule{2pt}{0.3pt}\kern-1pt}}}} \newunicodechar{▸}{\ensuremath{\blacktriangleright}} \newunicodechar{∧}{\ensuremath{\wedge}} \newunicodechar{∨}{\ensuremath{\vee}} \newunicodechar{¬}{\ensuremath{\neg}} \newunicodechar{⊢}{\ensuremath{\vdash}} %\newunicodechar{⟨}{\ensuremath{\left\langle}} %\newunicodechar{⟩}{\ensuremath{\right\rangle}} \newunicodechar{⟨}{\ensuremath{\langle}} \newunicodechar{⟩}{\ensuremath{\rangle}} \newunicodechar{∀}{\ensuremath{\forall}} \newunicodechar{∃}{\ensuremath{\exists}} \newunicodechar{↦}{\ensuremath{\mapsto}} \newunicodechar{→}{\ensuremath{\rightarrow}} \newunicodechar{↔}{\ensuremath{\leftrightarrow}} \newunicodechar{⇒}{\ensuremath{\Rightarrow}} \newunicodechar{⟹}{\ensuremath{\Longrightarrow}} \newunicodechar{⇐}{\ensuremath{\Leftarrow}} \newunicodechar{⟸}{\ensuremath{\Longleftarrow}} \newunicodechar{∩}{\ensuremath{\cap}} \newunicodechar{∪}{\ensuremath{\cup}} \newunicodechar{⊂}{\ensuremath{\subseteq}} \newunicodechar{⊆}{\ensuremath{\subseteq}} \newunicodechar{⊄}{\ensuremath{\nsubseteq}} \newunicodechar{⊈}{\ensuremath{\nsubseteq}} \newunicodechar{⊃}{\ensuremath{\supseteq}} \newunicodechar{⊇}{\ensuremath{\supseteq}} \newunicodechar{⊅}{\ensuremath{\nsupseteq}} \newunicodechar{⊉}{\ensuremath{\nsupseteq}} \newunicodechar{∈}{\ensuremath{\in}} \newunicodechar{∉}{\ensuremath{\notin}} \newunicodechar{∋}{\ensuremath{\ni}} \newunicodechar{∌}{\ensuremath{\notni}} \newunicodechar{∅}{\ensuremath{\emptyset}} \newunicodechar{∖}{\ensuremath{\setminus}} \newunicodechar{†}{\ensuremath{\dag}} \newunicodechar{ℕ}{\ensuremath{\mathbb{N}}} \newunicodechar{ℤ}{\ensuremath{\mathbb{Z}}} \newunicodechar{ℝ}{\ensuremath{\mathbb{R}}} \newunicodechar{ℚ}{\ensuremath{\mathbb{Q}}} \newunicodechar{ℂ}{\ensuremath{\mathbb{C}}} \newunicodechar{⌞}{\ensuremath{\llcorner}} \newunicodechar{⌟}{\ensuremath{\lrcorner}} \newunicodechar{⦃}{\ensuremath{\{\!|}} \newunicodechar{⦄}{\ensuremath{|\!\}}} \newunicodechar{∣}{\ensuremath{\mid}} \newunicodechar{∥}{\ensuremath{\parallel}} \newunicodechar{₁}{\ensuremath{_1}} \newunicodechar{₂}{\ensuremath{_2}} \newunicodechar{₃}{\ensuremath{_3}} \newunicodechar{₄}{\ensuremath{_4}} \newunicodechar{₅}{\ensuremath{_5}} \newunicodechar{₆}{\ensuremath{_6}} \newunicodechar{₇}{\ensuremath{_7}} \newunicodechar{₈}{\ensuremath{_8}} \newunicodechar{₉}{\ensuremath{_9}} \newunicodechar{₀}{\ensuremath{_0}} \newunicodechar{ᵢ}{\ensuremath{_i}} \newunicodechar{ⱼ}{\ensuremath{_j}} \newunicodechar{ₘ}{\ensuremath{_m}} \newunicodechar{ₙ}{\ensuremath{_n}} \newunicodechar{ᵤ}{\ensuremath{_u}} \newunicodechar{↑}{\ensuremath{\uparrow}} \newunicodechar{↓}{\ensuremath{\downarrow}} \else \usepackage[utf8x]{inputenc} \SetUnicodeOption{mathletters} \DeclareUnicodeCharacter{952}{\ensuremath{\theta}} \fi