├── .envrc ├── .github ├── ISSUE_TEMPLATE │ ├── documentation-request.md │ ├── language-issue.md │ └── technical-mistake.md ├── PULL_REQUEST_TEMPLATE.md └── workflows │ ├── check-search-tsc.yml │ ├── ci.yml │ ├── copyright-header.yml │ ├── label-pr.yml │ ├── pr-deploy.yml │ ├── pr-title.yml │ ├── release-tag.yml │ ├── too-big-imports.yml │ └── upload-snapshots.yml ├── .gitignore ├── .vale.ini ├── .vale ├── scripts │ ├── report.py │ └── rewrite_html.py └── styles │ ├── Lean │ ├── Capitalization.yml │ ├── EmDash.yml │ ├── Latin.yml │ ├── Names.yml │ ├── Spelling.yml │ ├── TechnicalTerms.yml │ ├── Titles.yml │ └── Typos.yml │ ├── config │ ├── ignore │ │ ├── names.txt │ │ └── terms.txt │ └── vocabularies │ │ └── Lean │ │ └── accept.txt │ └── proselint │ ├── Airlinese.yml │ ├── AnimalLabels.yml │ ├── Annotations.yml │ ├── Apologizing.yml │ ├── Archaisms.yml │ ├── But.yml │ ├── Cliches.yml │ ├── CorporateSpeak.yml │ ├── Currency.yml │ ├── Cursing.yml │ ├── DateCase.yml │ ├── DateMidnight.yml │ ├── DateRedundancy.yml │ ├── DateSpacing.yml │ ├── DenizenLabels.yml │ ├── Diacritical.yml │ ├── GenderBias.yml │ ├── GroupTerms.yml │ ├── Hedging.yml │ ├── Hyperbole.yml │ ├── Jargon.yml │ ├── LGBTOffensive.yml │ ├── LGBTTerms.yml │ ├── Malapropisms.yml │ ├── Needless.yml │ ├── Nonwords.yml │ ├── Oxymorons.yml │ ├── P-Value.yml │ ├── RASSyndrome.yml │ ├── README.md │ ├── Skunked.yml │ ├── Spelling.yml │ ├── Typography.yml │ ├── Uncomparables.yml │ ├── Very.yml │ └── meta.json ├── CONTRIBUTING.md ├── LICENSE ├── Main.lean ├── Manual.lean ├── Manual ├── Attributes.lean ├── Axioms.lean ├── BasicProps.lean ├── BasicTypes.lean ├── BasicTypes │ ├── Array.lean │ ├── Array │ │ ├── FFI.lean │ │ └── Subarray.lean │ ├── BitVec.lean │ ├── Char.lean │ ├── Empty.lean │ ├── Fin.lean │ ├── Float.lean │ ├── Int.lean │ ├── List.lean │ ├── List │ │ ├── Comparisons.lean │ │ ├── Modification.lean │ │ ├── Partitioning.lean │ │ ├── Predicates.lean │ │ └── Transformation.lean │ ├── Maps.lean │ ├── Maps │ │ ├── TreeMap.lean │ │ └── TreeSet.lean │ ├── Nat.lean │ ├── Option.lean │ ├── Products.lean │ ├── String.lean │ ├── String │ │ ├── FFI.lean │ │ ├── Literals.lean │ │ ├── Logical.lean │ │ └── Substrings.lean │ ├── Subtype.lean │ ├── Sum.lean │ ├── Thunk.lean │ ├── UInt.lean │ └── UInt │ │ ├── Arith.lean │ │ └── Comparisons.lean ├── BuildTools.lean ├── BuildTools │ ├── Elan.lean │ ├── Lake.lean │ └── Lake │ │ ├── CLI.lean │ │ └── Config.lean ├── Classes.lean ├── Classes │ ├── BasicClasses.lean │ ├── DerivingHandlers.lean │ ├── InstanceDecls.lean │ └── InstanceSynth.lean ├── Coercions.lean ├── Defs.lean ├── Elaboration.lean ├── IO.lean ├── IO │ ├── Console.lean │ ├── Files.lean │ ├── Ref.lean │ └── Threads.lean ├── Interaction.lean ├── Intro.lean ├── Language │ ├── Functions.lean │ ├── InductiveTypes.lean │ ├── InductiveTypes │ │ ├── LogicalModel.lean │ │ ├── Nested.lean │ │ └── Structures.lean │ └── Namespaces.lean ├── Meta.lean ├── Meta │ ├── Attribute.lean │ ├── Basic.lean │ ├── CustomStyle.lean │ ├── ElanCheck.lean │ ├── ElanCmd.lean │ ├── ElanOpt.lean │ ├── Env.lean │ ├── Example.lean │ ├── ExpectString.lean │ ├── Figure.lean │ ├── LakeCheck.lean │ ├── LakeCmd.lean │ ├── LakeOpt.lean │ ├── LakeToml.lean │ ├── LakeToml │ │ ├── Test.lean │ │ └── Toml.lean │ ├── LexedText.lean │ ├── Markdown.lean │ ├── Monotonicity.lean │ ├── PPrint.lean │ ├── ParserAlias.lean │ ├── SpliceContents.lean │ ├── Syntax.lean │ └── Tactics.lean ├── Monads.lean ├── Monads │ ├── API.lean │ ├── Laws.lean │ ├── Lift.lean │ ├── Syntax.lean │ ├── Zoo.lean │ └── Zoo │ │ ├── Combined.lean │ │ ├── Except.lean │ │ ├── Id.lean │ │ ├── Option.lean │ │ ├── Reader.lean │ │ └── State.lean ├── Namespaces.lean ├── NotationsMacros.lean ├── NotationsMacros │ ├── Delab.lean │ ├── Elab.lean │ ├── Notations.lean │ ├── Operators.lean │ ├── Precedence.lean │ └── SyntaxDef.lean ├── Papers.lean ├── Quotients.lean ├── RecursiveDefs.lean ├── RecursiveDefs │ ├── PartialFixpoint.lean │ ├── Structural.lean │ ├── Structural │ │ ├── CourseOfValuesExample.lean │ │ └── RecursorExample.lean │ ├── WF.lean │ └── WF │ │ ├── GuessLexExample.lean │ │ └── PreprocessExample.lean ├── Releases.lean ├── Releases │ ├── v4.0.0-m1.lean │ ├── v4.0.0-m2.lean │ ├── v4.0.0-m3.lean │ ├── v4.0.0-m4.lean │ ├── v4.0.0-m5.lean │ ├── v4.0.0.lean │ ├── v4.1.0.lean │ ├── v4.10.0.lean │ ├── v4.11.0.lean │ ├── v4.12.0.lean │ ├── v4.13.0.lean │ ├── v4.14.0.lean │ ├── v4.15.0.lean │ ├── v4.16.0.lean │ ├── v4.17.0.lean │ ├── v4.18.0.lean │ ├── v4.19.0.lean │ ├── v4.2.0.lean │ ├── v4.20.0.lean │ ├── v4.21.0.lean │ ├── v4.3.0.lean │ ├── v4.4.0.lean │ ├── v4.5.0.lean │ ├── v4.6.0.lean │ ├── v4.7.0.lean │ ├── v4.8.0.lean │ └── v4.9.0.lean ├── Runtime.lean ├── Simp.lean ├── SourceFiles.lean ├── Tactics.lean ├── Tactics │ ├── Conv.lean │ ├── Custom.lean │ ├── Reference.lean │ └── Reference │ │ └── Simp.lean ├── Terms.lean └── Types.lean ├── README.md ├── deploy ├── README.md ├── build.sh ├── generate.sh ├── prep.sh └── release.py ├── figures.sh ├── figures ├── array.tex ├── coe-chain.tex ├── lake-workspace.tex ├── pipeline-overview.tex ├── string.tex └── thunk.tex ├── flake.lock ├── flake.nix ├── lake-manifest.json ├── lakefile.lean ├── lean-toolchain ├── server.py └── static ├── README.txt ├── colors.css ├── fonts ├── noto-sans-mono │ ├── NotoSansMono-VariableFont_wdth,wght.ttf │ ├── 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 │ ├── TTF │ │ ├── SourceCodePro-Black.ttf │ │ ├── SourceCodePro-BlackIt.ttf │ │ ├── SourceCodePro-Bold.ttf │ │ ├── SourceCodePro-BoldIt.ttf │ │ ├── SourceCodePro-ExtraLight.ttf │ │ ├── SourceCodePro-ExtraLightIt.ttf │ │ ├── SourceCodePro-It.ttf │ │ ├── SourceCodePro-Light.ttf │ │ ├── SourceCodePro-LightIt.ttf │ │ ├── SourceCodePro-Medium.ttf │ │ ├── SourceCodePro-MediumIt.ttf │ │ ├── SourceCodePro-Regular.ttf │ │ ├── SourceCodePro-Semibold.ttf │ │ └── SourceCodePro-SemiboldIt.ttf │ ├── WOFF │ │ ├── OTF │ │ │ ├── SourceCodePro-Black.otf.woff │ │ │ ├── SourceCodePro-BlackIt.otf.woff │ │ │ ├── SourceCodePro-Bold.otf.woff │ │ │ ├── SourceCodePro-BoldIt.otf.woff │ │ │ ├── SourceCodePro-ExtraLight.otf.woff │ │ │ ├── SourceCodePro-ExtraLightIt.otf.woff │ │ │ ├── SourceCodePro-It.otf.woff │ │ │ ├── SourceCodePro-Light.otf.woff │ │ │ ├── SourceCodePro-LightIt.otf.woff │ │ │ ├── SourceCodePro-Medium.otf.woff │ │ │ ├── SourceCodePro-MediumIt.otf.woff │ │ │ ├── SourceCodePro-Regular.otf.woff │ │ │ ├── SourceCodePro-Semibold.otf.woff │ │ │ └── SourceCodePro-SemiboldIt.otf.woff │ │ └── TTF │ │ │ ├── SourceCodePro-Black.ttf.woff │ │ │ ├── SourceCodePro-BlackIt.ttf.woff │ │ │ ├── SourceCodePro-Bold.ttf.woff │ │ │ ├── SourceCodePro-BoldIt.ttf.woff │ │ │ ├── SourceCodePro-ExtraLight.ttf.woff │ │ │ ├── SourceCodePro-ExtraLightIt.ttf.woff │ │ │ ├── SourceCodePro-It.ttf.woff │ │ │ ├── SourceCodePro-Light.ttf.woff │ │ │ ├── SourceCodePro-LightIt.ttf.woff │ │ │ ├── SourceCodePro-Medium.ttf.woff │ │ │ ├── SourceCodePro-MediumIt.ttf.woff │ │ │ ├── SourceCodePro-Regular.ttf.woff │ │ │ ├── SourceCodePro-Semibold.ttf.woff │ │ │ └── SourceCodePro-SemiboldIt.ttf.woff │ ├── WOFF2 │ │ ├── OTF │ │ │ ├── SourceCodePro-Black.otf.woff2 │ │ │ ├── SourceCodePro-BlackIt.otf.woff2 │ │ │ ├── SourceCodePro-Bold.otf.woff2 │ │ │ ├── SourceCodePro-BoldIt.otf.woff2 │ │ │ ├── SourceCodePro-ExtraLight.otf.woff2 │ │ │ ├── SourceCodePro-ExtraLightIt.otf.woff2 │ │ │ ├── SourceCodePro-It.otf.woff2 │ │ │ ├── SourceCodePro-Light.otf.woff2 │ │ │ ├── SourceCodePro-LightIt.otf.woff2 │ │ │ ├── SourceCodePro-Medium.otf.woff2 │ │ │ ├── SourceCodePro-MediumIt.otf.woff2 │ │ │ ├── SourceCodePro-Regular.otf.woff2 │ │ │ ├── SourceCodePro-Semibold.otf.woff2 │ │ │ ├── SourceCodePro-SemiboldIt.otf.woff2 │ │ │ ├── SourceCodeVF-Italic.otf.woff2 │ │ │ └── SourceCodeVF-Upright.otf.woff2 │ │ └── TTF │ │ │ ├── SourceCodePro-Black.ttf.woff2 │ │ │ ├── SourceCodePro-BlackIt.ttf.woff2 │ │ │ ├── SourceCodePro-Bold.ttf.woff2 │ │ │ ├── SourceCodePro-BoldIt.ttf.woff2 │ │ │ ├── SourceCodePro-ExtraLight.ttf.woff2 │ │ │ ├── SourceCodePro-ExtraLightIt.ttf.woff2 │ │ │ ├── SourceCodePro-It.ttf.woff2 │ │ │ ├── SourceCodePro-Light.ttf.woff2 │ │ │ ├── SourceCodePro-LightIt.ttf.woff2 │ │ │ ├── SourceCodePro-Medium.ttf.woff2 │ │ │ ├── SourceCodePro-MediumIt.ttf.woff2 │ │ │ ├── SourceCodePro-Regular.ttf.woff2 │ │ │ ├── SourceCodePro-Semibold.ttf.woff2 │ │ │ ├── SourceCodePro-SemiboldIt.ttf.woff2 │ │ │ ├── SourceCodeVF-Italic.ttf.woff2 │ │ │ └── SourceCodeVF-Upright.ttf.woff2 │ └── 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 │ ├── TTF │ │ ├── SourceSans3-Black.ttf │ │ ├── SourceSans3-BlackIt.ttf │ │ ├── SourceSans3-Bold.ttf │ │ ├── SourceSans3-BoldIt.ttf │ │ ├── SourceSans3-ExtraLight.ttf │ │ ├── SourceSans3-ExtraLightIt.ttf │ │ ├── SourceSans3-It.ttf │ │ ├── SourceSans3-Light.ttf │ │ ├── SourceSans3-LightIt.ttf │ │ ├── SourceSans3-Medium.ttf │ │ ├── SourceSans3-MediumIt.ttf │ │ ├── SourceSans3-Regular.ttf │ │ ├── SourceSans3-Semibold.ttf │ │ └── SourceSans3-SemiboldIt.ttf │ ├── VF │ │ ├── SourceSans3VF-Italic.otf │ │ ├── SourceSans3VF-Italic.ttf │ │ ├── SourceSans3VF-Upright.otf │ │ └── SourceSans3VF-Upright.ttf │ ├── WOFF │ │ ├── OTF │ │ │ ├── SourceSans3-Black.otf.woff │ │ │ ├── SourceSans3-BlackIt.otf.woff │ │ │ ├── SourceSans3-Bold.otf.woff │ │ │ ├── SourceSans3-BoldIt.otf.woff │ │ │ ├── SourceSans3-ExtraLight.otf.woff │ │ │ ├── SourceSans3-ExtraLightIt.otf.woff │ │ │ ├── SourceSans3-It.otf.woff │ │ │ ├── SourceSans3-Light.otf.woff │ │ │ ├── SourceSans3-LightIt.otf.woff │ │ │ ├── SourceSans3-Medium.otf.woff │ │ │ ├── SourceSans3-MediumIt.otf.woff │ │ │ ├── SourceSans3-Regular.otf.woff │ │ │ ├── SourceSans3-Semibold.otf.woff │ │ │ └── SourceSans3-SemiboldIt.otf.woff │ │ ├── TTF │ │ │ ├── SourceSans3-Black.ttf.woff │ │ │ ├── SourceSans3-BlackIt.ttf.woff │ │ │ ├── SourceSans3-Bold.ttf.woff │ │ │ ├── SourceSans3-BoldIt.ttf.woff │ │ │ ├── SourceSans3-ExtraLight.ttf.woff │ │ │ ├── SourceSans3-ExtraLightIt.ttf.woff │ │ │ ├── SourceSans3-It.ttf.woff │ │ │ ├── SourceSans3-Light.ttf.woff │ │ │ ├── SourceSans3-LightIt.ttf.woff │ │ │ ├── SourceSans3-Medium.ttf.woff │ │ │ ├── SourceSans3-MediumIt.ttf.woff │ │ │ ├── SourceSans3-Regular.ttf.woff │ │ │ ├── SourceSans3-Semibold.ttf.woff │ │ │ └── SourceSans3-SemiboldIt.ttf.woff │ │ └── VF │ │ │ ├── SourceSans3VF-Italic.otf.woff │ │ │ ├── SourceSans3VF-Italic.ttf.woff │ │ │ ├── SourceSans3VF-Upright.otf.woff │ │ │ └── SourceSans3VF-Upright.ttf.woff │ ├── WOFF2 │ │ ├── OTF │ │ │ ├── SourceSans3-Black.otf.woff2 │ │ │ ├── SourceSans3-BlackIt.otf.woff2 │ │ │ ├── SourceSans3-Bold.otf.woff2 │ │ │ ├── SourceSans3-BoldIt.otf.woff2 │ │ │ ├── SourceSans3-ExtraLight.otf.woff2 │ │ │ ├── SourceSans3-ExtraLightIt.otf.woff2 │ │ │ ├── SourceSans3-It.otf.woff2 │ │ │ ├── SourceSans3-Light.otf.woff2 │ │ │ ├── SourceSans3-LightIt.otf.woff2 │ │ │ ├── SourceSans3-Medium.otf.woff2 │ │ │ ├── SourceSans3-MediumIt.otf.woff2 │ │ │ ├── SourceSans3-Regular.otf.woff2 │ │ │ ├── SourceSans3-Semibold.otf.woff2 │ │ │ └── SourceSans3-SemiboldIt.otf.woff2 │ │ ├── TTF │ │ │ ├── SourceSans3-Black.ttf.woff2 │ │ │ ├── SourceSans3-BlackIt.ttf.woff2 │ │ │ ├── SourceSans3-Bold.ttf.woff2 │ │ │ ├── SourceSans3-BoldIt.ttf.woff2 │ │ │ ├── SourceSans3-ExtraLight.ttf.woff2 │ │ │ ├── SourceSans3-ExtraLightIt.ttf.woff2 │ │ │ ├── SourceSans3-It.ttf.woff2 │ │ │ ├── SourceSans3-Light.ttf.woff2 │ │ │ ├── SourceSans3-LightIt.ttf.woff2 │ │ │ ├── SourceSans3-Medium.ttf.woff2 │ │ │ ├── SourceSans3-MediumIt.ttf.woff2 │ │ │ ├── SourceSans3-Regular.ttf.woff2 │ │ │ ├── SourceSans3-Semibold.ttf.woff2 │ │ │ └── SourceSans3-SemiboldIt.ttf.woff2 │ │ └── VF │ │ │ ├── SourceSans3VF-Italic.otf.woff2 │ │ │ ├── SourceSans3VF-Italic.ttf.woff2 │ │ │ ├── SourceSans3VF-Upright.otf.woff2 │ │ │ └── SourceSans3VF-Upright.ttf.woff2 │ ├── 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 │ ├── TTF │ ├── SourceSerif4-Black.ttf │ ├── SourceSerif4-BlackIt.ttf │ ├── SourceSerif4-Bold.ttf │ ├── SourceSerif4-BoldIt.ttf │ ├── SourceSerif4-ExtraLight.ttf │ ├── SourceSerif4-ExtraLightIt.ttf │ ├── SourceSerif4-It.ttf │ ├── SourceSerif4-Light.ttf │ ├── SourceSerif4-LightIt.ttf │ ├── SourceSerif4-Regular.ttf │ ├── SourceSerif4-Semibold.ttf │ └── SourceSerif4-SemiboldIt.ttf │ ├── WOFF │ ├── OTF │ │ ├── SourceSerif4-Black.otf.woff │ │ ├── SourceSerif4-BlackIt.otf.woff │ │ ├── SourceSerif4-Bold.otf.woff │ │ ├── SourceSerif4-BoldIt.otf.woff │ │ ├── SourceSerif4-ExtraLight.otf.woff │ │ ├── SourceSerif4-ExtraLightIt.otf.woff │ │ ├── SourceSerif4-It.otf.woff │ │ ├── SourceSerif4-Light.otf.woff │ │ ├── SourceSerif4-LightIt.otf.woff │ │ ├── SourceSerif4-Regular.otf.woff │ │ ├── SourceSerif4-Semibold.otf.woff │ │ └── SourceSerif4-SemiboldIt.otf.woff │ └── TTF │ │ ├── SourceSerif4-Black.ttf.woff │ │ ├── SourceSerif4-BlackIt.ttf.woff │ │ ├── SourceSerif4-Bold.ttf.woff │ │ ├── SourceSerif4-BoldIt.ttf.woff │ │ ├── SourceSerif4-ExtraLight.ttf.woff │ │ ├── SourceSerif4-ExtraLightIt.ttf.woff │ │ ├── SourceSerif4-It.ttf.woff │ │ ├── SourceSerif4-Light.ttf.woff │ │ ├── SourceSerif4-LightIt.ttf.woff │ │ ├── SourceSerif4-Regular.ttf.woff │ │ ├── SourceSerif4-Semibold.ttf.woff │ │ └── SourceSerif4-SemiboldIt.ttf.woff │ ├── WOFF2 │ ├── OTF │ │ ├── SourceSerif4-Black.otf.woff2 │ │ ├── SourceSerif4-BlackIt.otf.woff2 │ │ ├── SourceSerif4-Bold.otf.woff2 │ │ ├── SourceSerif4-BoldIt.otf.woff2 │ │ ├── SourceSerif4-ExtraLight.otf.woff2 │ │ ├── SourceSerif4-ExtraLightIt.otf.woff2 │ │ ├── SourceSerif4-It.otf.woff2 │ │ ├── SourceSerif4-Light.otf.woff2 │ │ ├── SourceSerif4-LightIt.otf.woff2 │ │ ├── SourceSerif4-Regular.otf.woff2 │ │ ├── SourceSerif4-Semibold.otf.woff2 │ │ └── SourceSerif4-SemiboldIt.otf.woff2 │ └── TTF │ │ ├── SourceSerif4-Black.ttf.woff2 │ │ ├── SourceSerif4-BlackIt.ttf.woff2 │ │ ├── SourceSerif4-Bold.ttf.woff2 │ │ ├── SourceSerif4-BoldIt.ttf.woff2 │ │ ├── SourceSerif4-ExtraLight.ttf.woff2 │ │ ├── SourceSerif4-ExtraLightIt.ttf.woff2 │ │ ├── SourceSerif4-It.ttf.woff2 │ │ ├── SourceSerif4-Light.ttf.woff2 │ │ ├── SourceSerif4-LightIt.ttf.woff2 │ │ ├── SourceSerif4-Regular.ttf.woff2 │ │ ├── SourceSerif4-Semibold.ttf.woff2 │ │ └── SourceSerif4-SemiboldIt.ttf.woff2 │ └── source-serif-text.css ├── lean_logo.svg ├── print.css ├── print.js ├── screenshots ├── do-return-hl-1.png └── do-return-hl-2.png ├── search ├── README.txt ├── domain-mappers.js ├── fuzzysort.d.ts ├── fuzzysort.js ├── jsconfig.json ├── licenses.md ├── search-box.css ├── search-box.js ├── search-init.js ├── unicode-input-component.min.js └── unicode-input.min.js └── theme.css /.envrc: -------------------------------------------------------------------------------- 1 | use flake 2 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/documentation-request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Documentation Request 3 | about: Request documentation 4 | title: '' 5 | labels: doc-request 6 | assignees: '' 7 | 8 | --- 9 | 10 | **What question should the reference manual answer?** 11 | 12 | Please describe what the reference manual should enable you to do that you can't do right now. Ideally, this is phrased in terms of a question, like "How are strings represented in compiled code?". 13 | 14 | **Additional context** 15 | Add any other context about the question here that will help us ensure that the documentation meets your needs. 16 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/language-issue.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Language Issue 3 | about: Point out incorrect or confusing use of English 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Describe the error** 11 | 12 | > Please quote the incorrect usage or confusing text here 13 | 14 | Why is it incorrect and/or confusing? 15 | 16 | Unless otherwise documented, this document is written in US English following the Chicago Manual of Style. However, _specifically_ US usages that are not widely understood in other communities may also be replaced with more universally-understood formulations. 17 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/technical-mistake.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Technical Mistake 3 | about: Point out an incorrect statement of fact 4 | title: '' 5 | labels: bug 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Describe the bug** 11 | 12 | > Please quote the incorrect text here 13 | 14 | In what way is the content incorrect? 15 | 16 | **Demonstration** 17 | 18 | Please provide a self-contained Lean example that demonstrates the incorrectness of the statement. 19 | -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | # Read this section before submitting 2 | 3 | * Ensure your PR follows the [External Contribution Guidelines](https://github.com/leanprover/reference-manual/blob/master/CONTRIBUTING.md). 4 | * Help your PR get merged quickly by making it fast to review: 5 | * Please open multiple pull requests to fix multiple small issues 6 | * Don't make systematic changes to English usage without discussing them first 7 | * Don't submit large amounts of new content without discussing it first 8 | * If the issue does not already have approval from a developer, submit the PR as draft. 9 | * The PR title/description will become the commit message. Keep it up-to-date as the PR evolves. 10 | * Remove this section, up to and including the `---` before submitting. 11 | 12 | --- 13 | 14 | Closes #0000 (issue number fixed by this PR, if any) 15 | -------------------------------------------------------------------------------- /.github/workflows/check-search-tsc.yml: -------------------------------------------------------------------------------- 1 | name: Check for copyright headers 2 | 3 | on: [pull_request] 4 | 5 | jobs: 6 | check-lean-files: 7 | runs-on: ubuntu-latest 8 | steps: 9 | - name: Install TypeScript 10 | run: | 11 | sudo apt update && sudo apt install node-typescript 12 | 13 | - uses: actions/checkout@v4 14 | 15 | - name: Type check the search bar code 16 | run: | 17 | cd static/search 18 | tsc --noEmit -p jsconfig.json 19 | 20 | -------------------------------------------------------------------------------- /.github/workflows/copyright-header.yml: -------------------------------------------------------------------------------- 1 | name: Check for copyright headers 2 | 3 | on: [pull_request] 4 | 5 | jobs: 6 | check-lean-files: 7 | runs-on: ubuntu-latest 8 | steps: 9 | - uses: actions/checkout@v4 10 | 11 | - name: Verify .lean files start with a copyright header. 12 | run: | 13 | FILES=$(find . -type f -name "*.lean" -not -path "./.lake/*" -exec perl -ne 'BEGIN { $/ = undef; } print "$ARGV\n" if !m{\A/-\nCopyright}; exit;' {} \;) 14 | if [ -n "$FILES" ]; then 15 | echo "Found .lean files which do not have a copyright header:" 16 | echo "$FILES" 17 | exit 1 18 | else 19 | echo "All copyright headers present." 20 | fi 21 | -------------------------------------------------------------------------------- /.github/workflows/pr-title.yml: -------------------------------------------------------------------------------- 1 | name: Check PR title for commit convention 2 | 3 | on: 4 | merge_group: 5 | pull_request: 6 | types: [opened, synchronize, reopened, edited] 7 | 8 | jobs: 9 | check-pr-title: 10 | runs-on: ubuntu-latest 11 | steps: 12 | - name: Check PR title 13 | uses: actions/github-script@v7 14 | with: 15 | script: | 16 | const msg = context.payload.pull_request? context.payload.pull_request.title : context.payload.merge_group.head_commit.message; 17 | console.log(`Message: ${msg}`) 18 | if (!/^(feat|fix|doc|style|refactor|test|chore|perf): .*[^.]($|\n\n)/.test(msg)) { 19 | core.setFailed('PR title does not follow the Commit Convention (https://leanprover.github.io/lean4/doc/dev/commit_convention.html).'); 20 | } 21 | -------------------------------------------------------------------------------- /.github/workflows/too-big-imports.yml: -------------------------------------------------------------------------------- 1 | name: Check for too-big Lean imports 2 | 3 | on: [pull_request] 4 | 5 | jobs: 6 | check-lean-files: 7 | runs-on: ubuntu-latest 8 | steps: 9 | - uses: actions/checkout@v4 10 | 11 | - name: Don't 'import Lean', use precise imports 12 | run: | 13 | ! (find . -name "*.lean" -type f -print0 | xargs -0 grep -E -n '^import Lean$') 14 | 15 | -------------------------------------------------------------------------------- /.github/workflows/upload-snapshots.yml: -------------------------------------------------------------------------------- 1 | name: "Deploy the 'deploy' branch" 2 | on: 3 | workflow_run: 4 | workflows: ["Deploy Tagged Version"] 5 | types: 6 | - completed 7 | 8 | push: 9 | branches: 10 | - 'deploy' 11 | 12 | workflow_dispatch: 13 | 14 | jobs: 15 | deploy: 16 | name: Deploy release branch to hosting 17 | runs-on: ubuntu-latest 18 | if: ${{ github.event_name != 'workflow_run' || github.event.workflow_run.conclusion == 'success' }} 19 | steps: 20 | 21 | - name: Checkout deploy branch 22 | uses: actions/checkout@v4 23 | with: 24 | ref: 'deploy' 25 | 26 | - name: Upload the current state of the deploy branch 27 | id: deploy-release 28 | uses: nwtgck/actions-netlify@v2.0 29 | with: 30 | publish-dir: '.' 31 | production-branch: deploy 32 | production-deploy: true 33 | github-token: ${{ secrets.GITHUB_TOKEN }} 34 | deploy-message: | 35 | Deploy from ${{ github.ref }} 36 | enable-commit-comment: false 37 | enable-pull-request-comment: false 38 | fails-without-credentials: true 39 | env: 40 | NETLIFY_AUTH_TOKEN: ${{ secrets.NETLIFY_AUTH_TOKEN }} 41 | # This is the site called 'lean-reference-manual-versions' 42 | NETLIFY_SITE_ID: "91dc33ef-6016-4ac7-bac1-d574e2254405" 43 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /.lake 2 | /_out/ 3 | .DS_Store 4 | figures/lake.trace 5 | /static/figures/*.svg 6 | /static/figures/*.pdf 7 | figures/*.log 8 | figures/*.aux 9 | /figures/*.pdf 10 | /figures/*.svg 11 | /figures/auto/ 12 | venv 13 | -------------------------------------------------------------------------------- /.vale.ini: -------------------------------------------------------------------------------- 1 | StylesPath = ".vale/styles" 2 | 3 | MinAlertLevel = suggestion 4 | 5 | Vocab = Lean 6 | 7 | # Inline-level tags to ignore 8 | IgnoredScopes = code, tt 9 | 10 | # Block-level tags to ignore 11 | SkippedScopes = script, style, pre, div 12 | 13 | # For now, ignore style warnings on included docstrings. It seems 14 | # that vale is also not ignoring an entire tree, but only text 15 | # immediately under the element with the tag, so we need some extra 16 | # things here (e.g. a span under a code is not being ignored) 17 | IgnoredClasses = namedocs, hl, token, goal-name, citation, TODO 18 | 19 | Packages = proselint 20 | 21 | 22 | [*] 23 | BasedOnStyles = Vale, Lean, proselint 24 | 25 | # Lean has its own of these 26 | Vale.Spelling = NO 27 | proselint.Very = NO 28 | -------------------------------------------------------------------------------- /.vale/styles/Lean/Capitalization.yml: -------------------------------------------------------------------------------- 1 | extends: substitution 2 | message: Use '%s' instead of '%s' 3 | level: error 4 | ignorecase: false 5 | swap: 6 | 'unicode': 'Unicode' 7 | 'javascript': 'JavaScript' 8 | -------------------------------------------------------------------------------- /.vale/styles/Lean/EmDash.yml: -------------------------------------------------------------------------------- 1 | extends: existence 2 | message: "Em dashes should not have surrounding spaces" 3 | nonword: true 4 | level: error 5 | action: 6 | name: edit 7 | params: 8 | - trim 9 | - " " 10 | tokens: 11 | - '\s—\s' 12 | -------------------------------------------------------------------------------- /.vale/styles/Lean/Latin.yml: -------------------------------------------------------------------------------- 1 | extends: substitution 2 | message: This Latin term should be used as a single unit. Use '%s' instead of '%s'. 3 | level: error 4 | ignorecase: true 5 | swap: 6 | - '(?:[^\s]*) se\b': 'per se' 7 | - '(?:[^\s]*) ponens\b': 'modus ponens' 8 | - 'modus (?:[^\s]*)\b': 'modus ponens' 9 | -------------------------------------------------------------------------------- /.vale/styles/Lean/Names.yml: -------------------------------------------------------------------------------- 1 | extends: substitution 2 | message: Use '%s' instead of '%s'. 3 | level: error 4 | ignorecase: true 5 | swap: 6 | - 'de moura': 'de Moura' 7 | - 'de bruijn': 'de Bruijn' 8 | - 'blott': 'Blott' 9 | - 'carneiro': 'Carneiro' 10 | - 'collatz': 'Collatz' 11 | - 'lua': 'Lua' 12 | - 'Madelaine': 'Madelaine' 13 | - 'mathlib': 'Mathlib' 14 | - 'merkin': 'Merkin' 15 | - 'peano': 'Peano' 16 | - 'selsam': 'Selsam' 17 | - 'simons': 'Simons' 18 | - 'ullrich': 'Ullrich' 19 | - 'wadler': 'Wadler' 20 | 21 | -------------------------------------------------------------------------------- /.vale/styles/Lean/Spelling.yml: -------------------------------------------------------------------------------- 1 | extends: spelling 2 | message: "Did you really mean '%s'?" 3 | level: error 4 | ignore: 5 | - names.txt 6 | - terms.txt 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.vale/styles/Lean/TechnicalTerms.yml: -------------------------------------------------------------------------------- 1 | extends: substitution 2 | message: Use '%s' instead of '%s' 3 | level: error 4 | ignorecase: true 5 | capitalize: true 6 | swap: 7 | 'typeclass': 'type class' 8 | 'typeclasses': 'type classes' 9 | 'codepoint': 'code point' 10 | 'multibyte': 'multi-byte' 11 | 'iff': 'if and only if' 12 | 'nonoverlapping': 'non-overlapping' 13 | 'datatypes': 'types' 14 | "datatype's": "type's" 15 | 'precompiling': 'pre-compiling' 16 | 'nonterminating': 'non-terminating' 17 | 'nontermination': 'non-termination' 18 | 'enum \b\w+\b': 'enum inductive' 19 | 'letterlike': 'letter-like' 20 | '\b(.+)\b simps': 'non-terminal simps' 21 | '\babelian\b': 'Abelian' 22 | 'context free grammar': 'context-free grammar' 23 | 'left associative': 'left-associative' 24 | 'right associative': 'right-associative' 25 | 'pretty-printer': 'pretty printer' 26 | 'pretty printed': 'pretty-printed' 27 | 'twos complement': "two's complement" 28 | 'semi-reducible': 'semireducible' 29 | -------------------------------------------------------------------------------- /.vale/styles/Lean/Titles.yml: -------------------------------------------------------------------------------- 1 | extends: capitalization 2 | message: "'%s' should be in title case: '%s'" 3 | level: warning 4 | scope: heading 5 | match: $title 6 | style: Chicago 7 | 8 | 9 | -------------------------------------------------------------------------------- /.vale/styles/Lean/Typos.yml: -------------------------------------------------------------------------------- 1 | extends: substitution 2 | message: Did you mean '%s' instead of '%s'? 3 | level: error 4 | ignorecase: true 5 | swap: 6 | 'non-ermination': 'non-termination' 7 | -------------------------------------------------------------------------------- /.vale/styles/config/ignore/names.txt: -------------------------------------------------------------------------------- 1 | Blott 2 | Bruijn 3 | Carneiro 4 | Collatz 5 | Lua 6 | Madelaine 7 | Mathlib 8 | Merkin 9 | Moura 10 | Peano 11 | Selsam 12 | Simons 13 | Streicher 14 | Streicher's 15 | Ullrich 16 | Wadler 17 | -------------------------------------------------------------------------------- /.vale/styles/config/vocabularies/Lean/accept.txt: -------------------------------------------------------------------------------- 1 | [Ee]xtensible 2 | [Dd]iscriminant 3 | [Aa]pplicative 4 | -------------------------------------------------------------------------------- /.vale/styles/proselint/Airlinese.yml: -------------------------------------------------------------------------------- 1 | extends: existence 2 | message: "'%s' is airlinese." 3 | ignorecase: true 4 | level: error 5 | tokens: 6 | - enplan(?:e|ed|ing|ement) 7 | - deplan(?:e|ed|ing|ement) 8 | - taking off momentarily 9 | -------------------------------------------------------------------------------- /.vale/styles/proselint/AnimalLabels.yml: -------------------------------------------------------------------------------- 1 | extends: substitution 2 | message: "Consider using '%s' instead of '%s'." 3 | level: error 4 | action: 5 | name: replace 6 | swap: 7 | (?:bull|ox)-like: taurine 8 | (?:calf|veal)-like: vituline 9 | (?:crow|raven)-like: corvine 10 | (?:leopard|panther)-like: pardine 11 | bird-like: avine 12 | centipede-like: scolopendrine 13 | crab-like: cancrine 14 | crocodile-like: crocodiline 15 | deer-like: damine 16 | eagle-like: aquiline 17 | earthworm-like: lumbricine 18 | falcon-like: falconine 19 | ferine: wild animal-like 20 | fish-like: piscine 21 | fox-like: vulpine 22 | frog-like: ranine 23 | goat-like: hircine 24 | goose-like: anserine 25 | gull-like: laridine 26 | hare-like: leporine 27 | hawk-like: accipitrine 28 | hippopotamus-like: hippopotamine 29 | lizard-like: lacertine 30 | mongoose-like: viverrine 31 | mouse-like: murine 32 | ostrich-like: struthionine 33 | peacock-like: pavonine 34 | porcupine-like: hystricine 35 | rattlesnake-like: crotaline 36 | sable-like: zibeline 37 | sheep-like: ovine 38 | shrew-like: soricine 39 | sparrow-like: passerine 40 | swallow-like: hirundine 41 | swine-like: suilline 42 | tiger-like: tigrine 43 | viper-like: viperine 44 | vulture-like: vulturine 45 | wasp-like: vespine 46 | wolf-like: lupine 47 | woodpecker-like: picine 48 | zebra-like: zebrine 49 | -------------------------------------------------------------------------------- /.vale/styles/proselint/Annotations.yml: -------------------------------------------------------------------------------- 1 | extends: existence 2 | message: "'%s' left in text." 3 | ignorecase: false 4 | level: error 5 | tokens: 6 | - XXX 7 | - FIXME 8 | - TODO 9 | - NOTE 10 | -------------------------------------------------------------------------------- /.vale/styles/proselint/Apologizing.yml: -------------------------------------------------------------------------------- 1 | extends: existence 2 | message: "Excessive apologizing: '%s'" 3 | ignorecase: true 4 | level: error 5 | action: 6 | name: remove 7 | tokens: 8 | - More research is needed 9 | -------------------------------------------------------------------------------- /.vale/styles/proselint/Archaisms.yml: -------------------------------------------------------------------------------- 1 | extends: existence 2 | message: "'%s' is archaic." 3 | ignorecase: true 4 | level: error 5 | tokens: 6 | - alack 7 | - anent 8 | - begat 9 | - belike 10 | - betimes 11 | - boughten 12 | - brocage 13 | - brokage 14 | - camarade 15 | - chiefer 16 | - chiefest 17 | - Christiana 18 | - completely obsolescent 19 | - cozen 20 | - divers 21 | - deflexion 22 | - fain 23 | - forsooth 24 | - foreclose from 25 | - haply 26 | - howbeit 27 | - illumine 28 | - in sooth 29 | - maugre 30 | - meseems 31 | - methinks 32 | - nigh 33 | - peradventure 34 | - perchance 35 | - saith 36 | - shew 37 | - sistren 38 | - spake 39 | - to wit 40 | - verily 41 | - whilom 42 | - withal 43 | - wot 44 | - enclosed please find 45 | - please find enclosed 46 | - enclosed herewith 47 | - enclosed herein 48 | - inforce 49 | - ex postfacto 50 | - foreclose from 51 | - forewent 52 | - for ever 53 | -------------------------------------------------------------------------------- /.vale/styles/proselint/But.yml: -------------------------------------------------------------------------------- 1 | extends: existence 2 | message: "Do not start a paragraph with a 'but'." 3 | level: error 4 | scope: paragraph 5 | action: 6 | name: remove 7 | tokens: 8 | - ^But 9 | -------------------------------------------------------------------------------- /.vale/styles/proselint/CorporateSpeak.yml: -------------------------------------------------------------------------------- 1 | extends: existence 2 | message: "'%s' is corporate speak." 3 | ignorecase: true 4 | level: error 5 | tokens: 6 | - at the end of the day 7 | - back to the drawing board 8 | - hit the ground running 9 | - get the ball rolling 10 | - low-hanging fruit 11 | - thrown under the bus 12 | - think outside the box 13 | - let's touch base 14 | - get my manager's blessing 15 | - it's on my radar 16 | - ping me 17 | - i don't have the bandwidth 18 | - no brainer 19 | - par for the course 20 | - bang for your buck 21 | - synergy 22 | - move the goal post 23 | - apples to apples 24 | - win-win 25 | - circle back around 26 | - all hands on deck 27 | - take this offline 28 | - drill-down 29 | - elephant in the room 30 | - on my plate 31 | -------------------------------------------------------------------------------- /.vale/styles/proselint/Currency.yml: -------------------------------------------------------------------------------- 1 | extends: existence 2 | message: "Incorrect use of symbols in '%s'." 3 | ignorecase: true 4 | raw: 5 | - \$[\d]* ?(?:dollars|usd|us dollars) 6 | -------------------------------------------------------------------------------- /.vale/styles/proselint/Cursing.yml: -------------------------------------------------------------------------------- 1 | extends: existence 2 | message: "Consider replacing '%s'." 3 | level: error 4 | ignorecase: true 5 | tokens: 6 | - shit 7 | - piss 8 | - fuck 9 | - cunt 10 | - cocksucker 11 | - motherfucker 12 | - tits 13 | - fart 14 | - turd 15 | - twat 16 | -------------------------------------------------------------------------------- /.vale/styles/proselint/DateCase.yml: -------------------------------------------------------------------------------- 1 | extends: existence 2 | message: With lowercase letters, the periods are standard. 3 | ignorecase: false 4 | level: error 5 | nonword: true 6 | tokens: 7 | - '\d{1,2} ?[ap]m\b' 8 | -------------------------------------------------------------------------------- /.vale/styles/proselint/DateMidnight.yml: -------------------------------------------------------------------------------- 1 | extends: existence 2 | message: "Use 'midnight' or 'noon'." 3 | ignorecase: true 4 | level: error 5 | nonword: true 6 | tokens: 7 | - '12 ?[ap]\.?m\.?' 8 | -------------------------------------------------------------------------------- /.vale/styles/proselint/DateRedundancy.yml: -------------------------------------------------------------------------------- 1 | extends: existence 2 | message: "'a.m.' is always morning; 'p.m.' is always night." 3 | ignorecase: true 4 | level: error 5 | nonword: true 6 | tokens: 7 | - '\d{1,2} ?a\.?m\.? in the morning' 8 | - '\d{1,2} ?p\.?m\.? in the evening' 9 | - '\d{1,2} ?p\.?m\.? at night' 10 | - '\d{1,2} ?p\.?m\.? in the afternoon' 11 | -------------------------------------------------------------------------------- /.vale/styles/proselint/DateSpacing.yml: -------------------------------------------------------------------------------- 1 | extends: existence 2 | message: "It's standard to put a space before '%s'" 3 | ignorecase: true 4 | level: error 5 | nonword: true 6 | tokens: 7 | - '\d{1,2}[ap]\.?m\.?' 8 | -------------------------------------------------------------------------------- /.vale/styles/proselint/DenizenLabels.yml: -------------------------------------------------------------------------------- 1 | extends: substitution 2 | message: Did you mean '%s'? 3 | ignorecase: false 4 | action: 5 | name: replace 6 | swap: 7 | (?:Afrikaaner|Afrikander): Afrikaner 8 | (?:Hong Kongite|Hong Kongian): Hong Konger 9 | (?:Indianan|Indianian): Hoosier 10 | (?:Michiganite|Michiganian): Michigander 11 | (?:New Hampshireite|New Hampshireman): New Hampshirite 12 | (?:Newcastlite|Newcastleite): Novocastrian 13 | (?:Providencian|Providencer): Providentian 14 | (?:Trentian|Trentonian): Tridentine 15 | (?:Warsawer|Warsawian): Varsovian 16 | (?:Wolverhamptonite|Wolverhamptonian): Wulfrunian 17 | Alabaman: Alabamian 18 | Albuquerquian: Albuquerquean 19 | Anchoragite: Anchorageite 20 | Arizonian: Arizonan 21 | Arkansawyer: Arkansan 22 | Belarusan: Belarusian 23 | Cayman Islander: Caymanian 24 | Coloradoan: Coloradan 25 | Connecticuter: Nutmegger 26 | Fairbanksian: Fairbanksan 27 | Fort Worther: Fort Worthian 28 | Grenadian: Grenadan 29 | Halifaxer: Haligonian 30 | Hartlepoolian: Hartlepudlian 31 | Illinoisian: Illinoisan 32 | Iowegian: Iowan 33 | Leedsian: Leodenisian 34 | Liverpoolian: Liverpudlian 35 | Los Angelean: Angeleno 36 | Manchesterian: Mancunian 37 | Minneapolisian: Minneapolitan 38 | Missouran: Missourian 39 | Monacan: Monegasque 40 | Neopolitan: Neapolitan 41 | New Jerseyite: New Jerseyan 42 | New Orleansian: New Orleanian 43 | Oklahoma Citian: Oklahoma Cityan 44 | Oklahomian: Oklahoman 45 | Saudi Arabian: Saudi 46 | Seattlite: Seattleite 47 | Surinamer: Surinamese 48 | Tallahassean: Tallahasseean 49 | Tennesseean: Tennessean 50 | Trois-Rivièrester: Trifluvian 51 | Utahan: Utahn 52 | Valladolidian: Vallisoletano 53 | -------------------------------------------------------------------------------- /.vale/styles/proselint/Diacritical.yml: -------------------------------------------------------------------------------- 1 | extends: substitution 2 | message: Consider using '%s' instead of '%s'. 3 | ignorecase: true 4 | level: error 5 | action: 6 | name: replace 7 | swap: 8 | beau ideal: beau idéal 9 | boutonniere: boutonnière 10 | bric-a-brac: bric-à-brac 11 | cafe: café 12 | cause celebre: cause célèbre 13 | chevre: chèvre 14 | cliche: cliché 15 | consomme: consommé 16 | coup de grace: coup de grâce 17 | crudites: crudités 18 | creme brulee: crème brûlée 19 | creme de menthe: crème de menthe 20 | creme fraice: crème fraîche 21 | creme fresh: crème fraîche 22 | crepe: crêpe 23 | debutante: débutante 24 | decor: décor 25 | deja vu: déjà vu 26 | denouement: dénouement 27 | facade: façade 28 | fiance: fiancé 29 | fiancee: fiancée 30 | flambe: flambé 31 | garcon: garçon 32 | lycee: lycée 33 | maitre d: maître d 34 | menage a trois: ménage à trois 35 | negligee: négligée 36 | protege: protégé 37 | protegee: protégée 38 | puree: purée 39 | my resume: my résumé 40 | your resume: your résumé 41 | his resume: his résumé 42 | her resume: her résumé 43 | a resume: a résumé 44 | the resume: the résumé 45 | risque: risqué 46 | roue: roué 47 | soiree: soirée 48 | souffle: soufflé 49 | soupcon: soupçon 50 | touche: touché 51 | tete-a-tete: tête-à-tête 52 | voila: voilà 53 | a la carte: à la carte 54 | a la mode: à la mode 55 | emigre: émigré 56 | 57 | # Spanish loanwords 58 | El Nino: El Niño 59 | jalapeno: jalapeño 60 | La Nina: La Niña 61 | pina colada: piña colada 62 | senor: señor 63 | senora: señora 64 | senorita: señorita 65 | 66 | # Portuguese loanwords 67 | acai: açaí 68 | 69 | # German loanwords 70 | doppelganger: doppelgänger 71 | Fuhrer: Führer 72 | Gewurztraminer: Gewürztraminer 73 | vis-a-vis: vis-à-vis 74 | Ubermensch: Übermensch 75 | 76 | # Swedish loanwords 77 | filmjolk: filmjölk 78 | smorgasbord: smörgåsbord 79 | 80 | # Names, places, and companies 81 | Beyonce: Beyoncé 82 | Bronte: Brontë 83 | Champs-Elysees: Champs-Élysées 84 | Citroen: Citroën 85 | Curacao: Curaçao 86 | Lowenbrau: Löwenbräu 87 | Monegasque: Monégasque 88 | Motley Crue: Mötley Crüe 89 | Nescafe: Nescafé 90 | Queensryche: Queensrÿche 91 | Quebec: Québec 92 | Quebecois: Québécois 93 | Angstrom: Ångström 94 | angstrom: ångström 95 | Skoda: Škoda 96 | -------------------------------------------------------------------------------- /.vale/styles/proselint/GenderBias.yml: -------------------------------------------------------------------------------- 1 | extends: substitution 2 | message: Consider using '%s' instead of '%s'. 3 | ignorecase: true 4 | level: error 5 | action: 6 | name: replace 7 | swap: 8 | (?:alumnae|alumni): graduates 9 | (?:alumna|alumnus): graduate 10 | air(?:m[ae]n|wom[ae]n): pilot(s) 11 | anchor(?:m[ae]n|wom[ae]n): anchor(s) 12 | authoress: author 13 | camera(?:m[ae]n|wom[ae]n): camera operator(s) 14 | chair(?:m[ae]n|wom[ae]n): chair(s) 15 | congress(?:m[ae]n|wom[ae]n): member(s) of congress 16 | door(?:m[ae]|wom[ae]n): concierge(s) 17 | draft(?:m[ae]n|wom[ae]n): drafter(s) 18 | fire(?:m[ae]n|wom[ae]n): firefighter(s) 19 | fisher(?:m[ae]n|wom[ae]n): fisher(s) 20 | fresh(?:m[ae]n|wom[ae]n): first-year student(s) 21 | garbage(?:m[ae]n|wom[ae]n): waste collector(s) 22 | lady lawyer: lawyer 23 | ladylike: courteous 24 | landlord: building manager 25 | mail(?:m[ae]n|wom[ae]n): mail carriers 26 | man and wife: husband and wife 27 | man enough: strong enough 28 | mankind: human kind 29 | manmade: manufactured 30 | men and girls: men and women 31 | middle(?:m[ae]n|wom[ae]n): intermediary 32 | news(?:m[ae]n|wom[ae]n): journalist(s) 33 | ombuds(?:man|woman): ombuds 34 | oneupmanship: upstaging 35 | poetess: poet 36 | police(?:m[ae]n|wom[ae]n): police officer(s) 37 | repair(?:m[ae]n|wom[ae]n): technician(s) 38 | sales(?:m[ae]n|wom[ae]n): salesperson or sales people 39 | service(?:m[ae]n|wom[ae]n): soldier(s) 40 | steward(?:ess)?: flight attendant 41 | tribes(?:m[ae]n|wom[ae]n): tribe member(s) 42 | waitress: waiter 43 | woman doctor: doctor 44 | woman scientist[s]?: scientist(s) 45 | work(?:m[ae]n|wom[ae]n): worker(s) 46 | -------------------------------------------------------------------------------- /.vale/styles/proselint/GroupTerms.yml: -------------------------------------------------------------------------------- 1 | extends: substitution 2 | message: Consider using '%s' instead of '%s'. 3 | ignorecase: true 4 | action: 5 | name: replace 6 | swap: 7 | (?:bunch|group|pack|flock) of chickens: brood of chickens 8 | (?:bunch|group|pack|flock) of crows: murder of crows 9 | (?:bunch|group|pack|flock) of hawks: cast of hawks 10 | (?:bunch|group|pack|flock) of parrots: pandemonium of parrots 11 | (?:bunch|group|pack|flock) of peacocks: muster of peacocks 12 | (?:bunch|group|pack|flock) of penguins: muster of penguins 13 | (?:bunch|group|pack|flock) of sparrows: host of sparrows 14 | (?:bunch|group|pack|flock) of turkeys: rafter of turkeys 15 | (?:bunch|group|pack|flock) of woodpeckers: descent of woodpeckers 16 | (?:bunch|group|pack|herd) of apes: shrewdness of apes 17 | (?:bunch|group|pack|herd) of baboons: troop of baboons 18 | (?:bunch|group|pack|herd) of badgers: cete of badgers 19 | (?:bunch|group|pack|herd) of bears: sloth of bears 20 | (?:bunch|group|pack|herd) of bullfinches: bellowing of bullfinches 21 | (?:bunch|group|pack|herd) of bullocks: drove of bullocks 22 | (?:bunch|group|pack|herd) of caterpillars: army of caterpillars 23 | (?:bunch|group|pack|herd) of cats: clowder of cats 24 | (?:bunch|group|pack|herd) of colts: rag of colts 25 | (?:bunch|group|pack|herd) of crocodiles: bask of crocodiles 26 | (?:bunch|group|pack|herd) of dolphins: school of dolphins 27 | (?:bunch|group|pack|herd) of foxes: skulk of foxes 28 | (?:bunch|group|pack|herd) of gorillas: band of gorillas 29 | (?:bunch|group|pack|herd) of hippopotami: bloat of hippopotami 30 | (?:bunch|group|pack|herd) of horses: drove of horses 31 | (?:bunch|group|pack|herd) of jellyfish: fluther of jellyfish 32 | (?:bunch|group|pack|herd) of kangeroos: mob of kangeroos 33 | (?:bunch|group|pack|herd) of monkeys: troop of monkeys 34 | (?:bunch|group|pack|herd) of oxen: yoke of oxen 35 | (?:bunch|group|pack|herd) of rhinoceros: crash of rhinoceros 36 | (?:bunch|group|pack|herd) of wild boar: sounder of wild boar 37 | (?:bunch|group|pack|herd) of wild pigs: drift of wild pigs 38 | (?:bunch|group|pack|herd) of zebras: zeal of wild pigs 39 | (?:bunch|group|pack|school) of trout: hover of trout 40 | -------------------------------------------------------------------------------- /.vale/styles/proselint/Hedging.yml: -------------------------------------------------------------------------------- 1 | extends: existence 2 | message: "'%s' is hedging." 3 | ignorecase: true 4 | level: error 5 | tokens: 6 | - I would argue that 7 | - ', so to speak' 8 | - to a certain degree 9 | -------------------------------------------------------------------------------- /.vale/styles/proselint/Hyperbole.yml: -------------------------------------------------------------------------------- 1 | extends: existence 2 | message: "'%s' is hyperbolic." 3 | level: error 4 | nonword: true 5 | tokens: 6 | - '[a-z]+[!?]{2,}' 7 | -------------------------------------------------------------------------------- /.vale/styles/proselint/Jargon.yml: -------------------------------------------------------------------------------- 1 | extends: existence 2 | message: "'%s' is jargon." 3 | ignorecase: true 4 | level: error 5 | tokens: 6 | - in the affirmative 7 | - in the negative 8 | - agendize 9 | - per your order 10 | - per your request 11 | - disincentivize 12 | -------------------------------------------------------------------------------- /.vale/styles/proselint/LGBTOffensive.yml: -------------------------------------------------------------------------------- 1 | extends: existence 2 | message: "'%s' is offensive. Remove it or consider the context." 3 | ignorecase: true 4 | tokens: 5 | - fag 6 | - faggot 7 | - dyke 8 | - sodomite 9 | - homosexual agenda 10 | - gay agenda 11 | - transvestite 12 | - homosexual lifestyle 13 | - gay lifestyle 14 | -------------------------------------------------------------------------------- /.vale/styles/proselint/LGBTTerms.yml: -------------------------------------------------------------------------------- 1 | extends: substitution 2 | message: "Consider using '%s' instead of '%s'." 3 | ignorecase: true 4 | action: 5 | name: replace 6 | swap: 7 | homosexual man: gay man 8 | homosexual men: gay men 9 | homosexual woman: lesbian 10 | homosexual women: lesbians 11 | homosexual people: gay people 12 | homosexual couple: gay couple 13 | sexual preference: sexual orientation 14 | (?:admitted homosexual|avowed homosexual): openly gay 15 | special rights: equal rights 16 | -------------------------------------------------------------------------------- /.vale/styles/proselint/Malapropisms.yml: -------------------------------------------------------------------------------- 1 | extends: existence 2 | message: "'%s' is a malapropism." 3 | ignorecase: true 4 | level: error 5 | tokens: 6 | - the infinitesimal universe 7 | - a serial experience 8 | - attack my voracity 9 | -------------------------------------------------------------------------------- /.vale/styles/proselint/Nonwords.yml: -------------------------------------------------------------------------------- 1 | extends: substitution 2 | message: "Consider using '%s' instead of '%s'." 3 | ignorecase: true 4 | level: error 5 | action: 6 | name: replace 7 | swap: 8 | affrontery: effrontery 9 | analyzation: analysis 10 | annoyment: annoyance 11 | confirmant: confirmand 12 | confirmants: confirmands 13 | conversate: converse 14 | crained: craned 15 | discomforture: discomfort|discomfiture 16 | dispersement: disbursement|dispersal 17 | doubtlessly: doubtless|undoubtedly 18 | forebearance: forbearance 19 | improprietous: improper 20 | inclimate: inclement 21 | inimicable: inimical 22 | irregardless: regardless 23 | minimalize: minimize 24 | minimalized: minimized 25 | minimalizes: minimizes 26 | minimalizing: minimizing 27 | optimalize: optimize 28 | paralyzation: paralysis 29 | pettifogger: pettifog 30 | proprietous: proper 31 | relative inexpense: relatively low price|affordability 32 | seldomly: seldom 33 | thusly: thus 34 | uncategorically: categorically 35 | undoubtably: undoubtedly|indubitably 36 | unequivocable: unequivocal 37 | unmercilessly: mercilessly 38 | unrelentlessly: unrelentingly|relentlessly 39 | -------------------------------------------------------------------------------- /.vale/styles/proselint/Oxymorons.yml: -------------------------------------------------------------------------------- 1 | extends: existence 2 | message: "'%s' is an oxymoron." 3 | ignorecase: true 4 | level: error 5 | tokens: 6 | - amateur expert 7 | - increasingly less 8 | - advancing backwards 9 | - alludes explicitly to 10 | - explicitly alludes to 11 | - totally obsolescent 12 | - completely obsolescent 13 | - generally always 14 | - usually always 15 | - increasingly less 16 | - build down 17 | - conspicuous absence 18 | - exact estimate 19 | - found missing 20 | - intense apathy 21 | - mandatory choice 22 | - organized mess 23 | -------------------------------------------------------------------------------- /.vale/styles/proselint/P-Value.yml: -------------------------------------------------------------------------------- 1 | extends: existence 2 | message: "You should use more decimal places, unless '%s' is really true." 3 | ignorecase: true 4 | level: suggestion 5 | tokens: 6 | - 'p = 0\.0{2,4}' 7 | -------------------------------------------------------------------------------- /.vale/styles/proselint/RASSyndrome.yml: -------------------------------------------------------------------------------- 1 | extends: existence 2 | message: "'%s' is redundant." 3 | level: error 4 | action: 5 | name: edit 6 | params: 7 | - split 8 | - ' ' 9 | - '0' 10 | tokens: 11 | - ABM missile 12 | - ACT test 13 | - ABM missiles 14 | - ABS braking system 15 | - ATM machine 16 | - CD disc 17 | - CPI Index 18 | - GPS system 19 | - GUI interface 20 | - HIV virus 21 | - ISBN number 22 | - LCD display 23 | - PDF format 24 | - PIN number 25 | - RAS syndrome 26 | - RIP in peace 27 | - please RSVP 28 | - SALT talks 29 | - SAT test 30 | - UPC codes 31 | -------------------------------------------------------------------------------- /.vale/styles/proselint/README.md: -------------------------------------------------------------------------------- 1 | Copyright © 2014–2015, Jordan Suchow, Michael Pacer, and Lara A. Ross 2 | All rights reserved. 3 | 4 | Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 5 | 6 | 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 7 | 8 | 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 9 | 10 | 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. 11 | 12 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 13 | -------------------------------------------------------------------------------- /.vale/styles/proselint/Skunked.yml: -------------------------------------------------------------------------------- 1 | extends: existence 2 | message: "'%s' is a bit of a skunked term — impossible to use without issue." 3 | ignorecase: true 4 | level: error 5 | tokens: 6 | - bona fides 7 | - deceptively 8 | - decimate 9 | - effete 10 | - fulsome 11 | - hopefully 12 | - impassionate 13 | - Thankfully 14 | -------------------------------------------------------------------------------- /.vale/styles/proselint/Spelling.yml: -------------------------------------------------------------------------------- 1 | extends: consistency 2 | message: "Inconsistent spelling of '%s'." 3 | level: error 4 | ignorecase: true 5 | either: 6 | advisor: adviser 7 | centre: center 8 | colour: color 9 | emphasise: emphasize 10 | finalise: finalize 11 | focussed: focused 12 | labour: labor 13 | learnt: learned 14 | organise: organize 15 | organised: organized 16 | organising: organizing 17 | recognise: recognize 18 | -------------------------------------------------------------------------------- /.vale/styles/proselint/Typography.yml: -------------------------------------------------------------------------------- 1 | extends: substitution 2 | message: Consider using the '%s' symbol instead of '%s'. 3 | level: error 4 | nonword: true 5 | swap: 6 | '\.\.\.': … 7 | '\([cC]\)': © 8 | '\(TM\)': ™ 9 | '\(tm\)': ™ 10 | '\([rR]\)': ® 11 | '[0-9]+ ?x ?[0-9]+': × 12 | -------------------------------------------------------------------------------- /.vale/styles/proselint/Uncomparables.yml: -------------------------------------------------------------------------------- 1 | extends: existence 2 | message: "'%s' is not comparable" 3 | ignorecase: true 4 | level: error 5 | action: 6 | name: edit 7 | params: 8 | - split 9 | - ' ' 10 | - '1' 11 | raw: 12 | - \b(?:absolutely|most|more|less|least|very|quite|largely|extremely|increasingly|kind of|mildy|hardly|greatly|sort of)\b\s* 13 | tokens: 14 | - absolute 15 | - adequate 16 | - complete 17 | - correct 18 | - certain 19 | - devoid 20 | - entire 21 | - 'false' 22 | - fatal 23 | - favorite 24 | - final 25 | - ideal 26 | - impossible 27 | - inevitable 28 | - infinite 29 | - irrevocable 30 | - main 31 | - manifest 32 | - only 33 | - paramount 34 | - perfect 35 | - perpetual 36 | - possible 37 | - preferable 38 | - principal 39 | - singular 40 | - stationary 41 | - sufficient 42 | - 'true' 43 | - unanimous 44 | - unavoidable 45 | - unbroken 46 | - uniform 47 | - unique 48 | - universal 49 | - void 50 | - whole 51 | -------------------------------------------------------------------------------- /.vale/styles/proselint/Very.yml: -------------------------------------------------------------------------------- 1 | extends: existence 2 | message: "Remove '%s'." 3 | ignorecase: true 4 | level: error 5 | tokens: 6 | - very 7 | -------------------------------------------------------------------------------- /.vale/styles/proselint/meta.json: -------------------------------------------------------------------------------- 1 | { 2 | "author": "jdkato", 3 | "description": "A Vale-compatible implementation of the proselint linter.", 4 | "email": "support@errata.ai", 5 | "lang": "en", 6 | "url": "https://github.com/errata-ai/proselint/releases/latest/download/proselint.zip", 7 | "feed": "https://github.com/errata-ai/proselint/releases.atom", 8 | "issues": "https://github.com/errata-ai/proselint/issues/new", 9 | "license": "BSD-3-Clause", 10 | "name": "proselint", 11 | "sources": [ 12 | "https://github.com/amperser/proselint" 13 | ], 14 | "vale_version": ">=1.0.0", 15 | "coverage": 0.0, 16 | "version": "0.1.0" 17 | } 18 | -------------------------------------------------------------------------------- /Manual/BasicTypes/Array/FFI.lean: -------------------------------------------------------------------------------- 1 | /- 2 | Copyright (c) 2024 Lean FRO LLC. All rights reserved. 3 | Released under Apache 2.0 license as described in the file LICENSE. 4 | Author: David Thrane Christiansen 5 | -/ 6 | 7 | import VersoManual 8 | 9 | import Manual.Meta 10 | open Manual.FFIDocType 11 | 12 | open Verso.Genre Manual 13 | open Verso.Genre.Manual.InlineLean 14 | 15 | set_option pp.rawOnError true 16 | 17 | 18 | #doc (Manual) "FFI" => 19 | %%% 20 | tag := "array-ffi" 21 | %%% 22 | 23 | :::ffi "lean_string_object" kind := type 24 | ``` 25 | typedef struct { 26 | lean_object m_header; 27 | size_t m_size; 28 | size_t m_capacity; 29 | lean_object * m_data[]; 30 | } lean_array_object; 31 | ``` 32 | The representation of arrays in C. See {ref "array-runtime"}[the description of run-time {name}`Array`s] for more details. 33 | ::: 34 | 35 | :::ffi "lean_is_array" 36 | ```` 37 | bool lean_is_array(lean_object * o) 38 | ```` 39 | 40 | Returns `true` if `o` is an array, or `false` otherwise. 41 | ::: 42 | 43 | :::ffi "lean_to_array" 44 | ```` 45 | lean_array_object * lean_to_array(lean_object * o) 46 | ```` 47 | Performs a runtime check that `o` is indeed an array. If `o` is not an array, an assertion fails. 48 | ::: 49 | 50 | ::::draft 51 | :::planned 158 52 | * Complete C API for {lean}`Array` 53 | ::: 54 | :::: 55 | -------------------------------------------------------------------------------- /Manual/BasicTypes/Array/Subarray.lean: -------------------------------------------------------------------------------- 1 | /- 2 | Copyright (c) 2024 Lean FRO LLC. All rights reserved. 3 | Released under Apache 2.0 license as described in the file LICENSE. 4 | Author: David Thrane Christiansen 5 | -/ 6 | 7 | import VersoManual 8 | 9 | import Manual.Meta 10 | 11 | open Manual.FFIDocType 12 | 13 | open Verso.Genre Manual 14 | open Verso.Genre.Manual.InlineLean 15 | 16 | set_option pp.rawOnError true 17 | 18 | #doc (Manual) "Sub-Arrays" => 19 | %%% 20 | tag := "subarray" 21 | %%% 22 | 23 | {docstring Subarray} 24 | 25 | {docstring Subarray.toArray} 26 | 27 | {docstring Subarray.empty} 28 | 29 | # Size 30 | 31 | {docstring Subarray.size} 32 | 33 | # Resizing 34 | 35 | {docstring Subarray.drop} 36 | 37 | {docstring Subarray.take} 38 | 39 | {docstring Subarray.popFront} 40 | 41 | {docstring Subarray.split} 42 | 43 | # Lookups 44 | 45 | {docstring Subarray.get} 46 | 47 | {docstring Subarray.get!} 48 | 49 | {docstring Subarray.getD} 50 | 51 | # Iteration 52 | 53 | {docstring Subarray.foldl} 54 | 55 | {docstring Subarray.foldlM} 56 | 57 | {docstring Subarray.foldr} 58 | 59 | {docstring Subarray.foldrM} 60 | 61 | {docstring Subarray.forM} 62 | 63 | {docstring Subarray.forRevM} 64 | 65 | {docstring Subarray.forIn} 66 | 67 | # Element Predicates 68 | 69 | {docstring Subarray.findRev?} 70 | 71 | {docstring Subarray.findRevM?} 72 | 73 | {docstring Subarray.findSomeRevM?} 74 | 75 | {docstring Subarray.all} 76 | 77 | {docstring Subarray.allM} 78 | 79 | {docstring Subarray.any} 80 | 81 | {docstring Subarray.anyM} 82 | -------------------------------------------------------------------------------- /Manual/BasicTypes/Empty.lean: -------------------------------------------------------------------------------- 1 | /- 2 | Copyright (c) 2025 Lean FRO LLC. All rights reserved. 3 | Released under Apache 2.0 license as described in the file LICENSE. 4 | Author: David Thrane Christiansen 5 | -/ 6 | 7 | import VersoManual 8 | 9 | import Manual.Meta 10 | 11 | open Verso.Genre Manual 12 | open Verso.Genre.Manual.InlineLean 13 | 14 | set_option pp.rawOnError true 15 | 16 | #doc (Manual) "The Empty Type" => 17 | %%% 18 | tag := "empty" 19 | %%% 20 | 21 | The empty type {name}`Empty` represents impossible values. 22 | It is an inductive type with no constructors whatsoever. 23 | 24 | While the trivial type {name}`Unit`, which has a single constructor that takes no parameters, can be used to model computations where a result is unwanted or uninteresting, {name}`Empty` can be used in situations where no computation should be possible at all. 25 | Instantiating a polymorphic type with {name}`Empty` can mark some of its constructors—those with a parameter of the corresponding type—as impossible; this can rule out certain code paths that are not desired. 26 | 27 | The presence of a term with type {name}`Empty` indicates that an impossible code path has been reached. 28 | There will never be a value with this type, due to the lack of constructors. 29 | On an impossible code path, there's no reason to write further code; the function {name}`Empty.elim` can be used to escape an impossible path. 30 | 31 | The universe-polymorphic equivalent of {name}`Empty` is {name}`PEmpty`. 32 | 33 | {docstring Empty} 34 | 35 | {docstring PEmpty} 36 | 37 | 38 | :::example "Impossible Code Paths" 39 | 40 | The type signature of the function {lean}`f` indicates that it might throw exceptions, but allows the exception type to be anything: 41 | ```lean 42 | def f (n : Nat) : Except ε Nat := pure n 43 | ``` 44 | 45 | Instantiating {lean}`f`'s exception type with {lean}`Empty` exploits the fact that {lean}`f` never actually throws an exception to convert it to a function whose type indicates that no exceptions will be thrown. 46 | In particular, it allows {lean}`Empty.elim` to be used to avoid handing the impossible exception value. 47 | 48 | ```lean 49 | def g (n : Nat) : Nat := 50 | match f (ε := Empty) n with 51 | | .error e => 52 | Empty.elim e 53 | | .ok v => v 54 | ``` 55 | ::: 56 | 57 | # API Reference 58 | 59 | {docstring Empty.elim} 60 | 61 | {docstring PEmpty.elim} 62 | -------------------------------------------------------------------------------- /Manual/BasicTypes/List/Comparisons.lean: -------------------------------------------------------------------------------- 1 | /- 2 | Copyright (c) 2025 Lean FRO LLC. All rights reserved. 3 | Released under Apache 2.0 license as described in the file LICENSE. 4 | Author: David Thrane Christiansen 5 | -/ 6 | 7 | import VersoManual 8 | 9 | import Manual.Meta 10 | 11 | open Manual.FFIDocType 12 | 13 | open Verso.Genre Manual 14 | open Verso.Genre.Manual.InlineLean 15 | 16 | set_option pp.rawOnError true 17 | 18 | #doc (Manual) "Comparisons" => 19 | 20 | {docstring List.beq} 21 | 22 | {docstring List.isEqv} 23 | 24 | {docstring List.isPerm} 25 | 26 | {docstring List.isPrefixOf} 27 | 28 | {docstring List.isPrefixOf?} 29 | 30 | {docstring List.isSublist} 31 | 32 | {docstring List.isSuffixOf} 33 | 34 | {docstring List.isSuffixOf?} 35 | 36 | {docstring List.le} 37 | 38 | {docstring List.lt} 39 | 40 | {docstring List.lex} 41 | -------------------------------------------------------------------------------- /Manual/BasicTypes/List/Modification.lean: -------------------------------------------------------------------------------- 1 | /- 2 | Copyright (c) 2025 Lean FRO LLC. All rights reserved. 3 | Released under Apache 2.0 license as described in the file LICENSE. 4 | Author: David Thrane Christiansen 5 | -/ 6 | 7 | import VersoManual 8 | 9 | import Manual.Meta 10 | 11 | open Manual.FFIDocType 12 | 13 | open Verso.Genre Manual 14 | open Verso.Genre.Manual.InlineLean 15 | 16 | set_option pp.rawOnError true 17 | 18 | #doc (Manual) "Modification" => 19 | 20 | {docstring List.set} 21 | 22 | {docstring List.setTR} 23 | 24 | {docstring List.modify} 25 | 26 | {docstring List.modifyTR} 27 | 28 | {docstring List.modifyHead} 29 | 30 | {docstring List.modifyTailIdx} 31 | 32 | {docstring List.erase} 33 | 34 | {docstring List.eraseTR} 35 | 36 | {docstring List.eraseDups} 37 | 38 | {docstring List.eraseIdx} 39 | 40 | {docstring List.eraseIdxTR} 41 | 42 | {docstring List.eraseP} 43 | 44 | {docstring List.erasePTR} 45 | 46 | {docstring List.eraseReps} 47 | 48 | {docstring List.extract} 49 | 50 | {docstring List.removeAll} 51 | 52 | {docstring List.replace} 53 | 54 | {docstring List.replaceTR} 55 | 56 | {docstring List.reverse} 57 | 58 | {docstring List.flatten} 59 | 60 | {docstring List.flattenTR} 61 | 62 | {docstring List.rotateLeft} 63 | 64 | {docstring List.rotateRight} 65 | 66 | {docstring List.leftpad} 67 | 68 | {docstring List.leftpadTR} 69 | 70 | {docstring List.rightpad} 71 | 72 | # Insertion 73 | 74 | {docstring List.insert} 75 | 76 | {docstring List.insertIdx} 77 | 78 | {docstring List.insertIdxTR} 79 | 80 | {docstring List.intersperse} 81 | 82 | {docstring List.intersperseTR} 83 | 84 | {docstring List.intercalate} 85 | 86 | {docstring List.intercalateTR} 87 | -------------------------------------------------------------------------------- /Manual/BasicTypes/List/Partitioning.lean: -------------------------------------------------------------------------------- 1 | /- 2 | Copyright (c) 2025 Lean FRO LLC. All rights reserved. 3 | Released under Apache 2.0 license as described in the file LICENSE. 4 | Author: David Thrane Christiansen 5 | -/ 6 | 7 | import VersoManual 8 | 9 | import Manual.Meta 10 | 11 | open Manual.FFIDocType 12 | 13 | open Verso.Genre Manual 14 | open Verso.Genre.Manual.InlineLean 15 | 16 | set_option pp.rawOnError true 17 | 18 | #doc (Manual) "Partitioning" => 19 | 20 | {docstring List.take} 21 | 22 | {docstring List.takeTR} 23 | 24 | {docstring List.takeWhile} 25 | 26 | {docstring List.takeWhileTR} 27 | 28 | {docstring List.drop} 29 | 30 | {docstring List.dropWhile} 31 | 32 | {docstring List.dropLast} 33 | 34 | {docstring List.dropLastTR} 35 | 36 | {docstring List.splitAt} 37 | 38 | {docstring List.span} 39 | 40 | {docstring List.splitBy} 41 | 42 | {docstring List.partition} 43 | 44 | {docstring List.partitionM} 45 | 46 | {docstring List.partitionMap} 47 | 48 | {docstring List.groupByKey} 49 | -------------------------------------------------------------------------------- /Manual/BasicTypes/List/Predicates.lean: -------------------------------------------------------------------------------- 1 | /- 2 | Copyright (c) 2025 Lean FRO LLC. All rights reserved. 3 | Released under Apache 2.0 license as described in the file LICENSE. 4 | Author: David Thrane Christiansen 5 | -/ 6 | 7 | import VersoManual 8 | 9 | import Manual.Meta 10 | 11 | open Manual.FFIDocType 12 | 13 | open Verso.Genre Manual 14 | open Verso.Genre.Manual.InlineLean 15 | 16 | set_option pp.rawOnError true 17 | 18 | #doc (Manual) "Predicates and Relations" => 19 | 20 | {docstring List.IsPrefix} 21 | 22 | :::syntax term (title := "List Prefix") 23 | ```grammar 24 | $_ <+: $_ 25 | ``` 26 | 27 | {includeDocstring List.«term_<+:_»} 28 | 29 | ::: 30 | 31 | {docstring List.IsSuffix} 32 | 33 | :::syntax term (title := "List Suffix") 34 | ```grammar 35 | $_ <:+ $_ 36 | ``` 37 | 38 | {includeDocstring List.«term_<:+_»} 39 | 40 | ::: 41 | 42 | {docstring List.IsInfix} 43 | 44 | :::syntax term (title := "List Infix") 45 | ```grammar 46 | $_ <:+: $_ 47 | ``` 48 | 49 | {includeDocstring List.«term_<:+:_»} 50 | 51 | ::: 52 | 53 | {docstring List.Sublist} 54 | 55 | ::: syntax term (title := "Sublists") (namespace := List) 56 | ```grammar 57 | $_ <+ $_ 58 | ``` 59 | 60 | {includeDocstring List.«term_<+_»} 61 | 62 | This syntax is only available when the `List` namespace is opened. 63 | ::: 64 | 65 | {docstring List.Perm} 66 | 67 | :::syntax term (title := "List Permutation") (namespace := List) 68 | ```grammar 69 | $_ ~ $_ 70 | ``` 71 | 72 | {includeDocstring List.«term_~_»} 73 | 74 | This syntax is only available when the `List` namespace is opened. 75 | ::: 76 | 77 | {docstring List.Pairwise} 78 | 79 | {docstring List.Nodup} 80 | 81 | {docstring List.Lex} 82 | 83 | {docstring List.Mem} 84 | -------------------------------------------------------------------------------- /Manual/BasicTypes/List/Transformation.lean: -------------------------------------------------------------------------------- 1 | /- 2 | Copyright (c) 2025 Lean FRO LLC. All rights reserved. 3 | Released under Apache 2.0 license as described in the file LICENSE. 4 | Author: David Thrane Christiansen 5 | -/ 6 | 7 | import VersoManual 8 | 9 | import Manual.Meta 10 | 11 | open Manual.FFIDocType 12 | 13 | open Verso.Genre Manual 14 | open Verso.Genre.Manual.InlineLean 15 | 16 | set_option pp.rawOnError true 17 | 18 | #doc (Manual) "Transformation" => 19 | 20 | {docstring List.map} 21 | 22 | {docstring List.mapTR} 23 | 24 | {docstring List.mapM} 25 | 26 | {docstring List.mapM'} 27 | 28 | {docstring List.mapA} 29 | 30 | {docstring List.mapFinIdx} 31 | 32 | {docstring List.mapFinIdxM} 33 | 34 | {docstring List.mapIdx} 35 | 36 | {docstring List.mapIdxM} 37 | 38 | {docstring List.mapMono} 39 | 40 | {docstring List.mapMonoM} 41 | 42 | {docstring List.flatMap} 43 | 44 | {docstring List.flatMapTR} 45 | 46 | {docstring List.flatMapM} 47 | 48 | {docstring List.zip} 49 | 50 | {docstring List.zipIdx} 51 | 52 | {docstring List.zipIdxTR} 53 | 54 | {docstring List.zipWith} 55 | 56 | {docstring List.zipWithTR} 57 | 58 | {docstring List.zipWithAll} 59 | 60 | {docstring List.unzip} 61 | 62 | {docstring List.unzipTR} 63 | -------------------------------------------------------------------------------- /Manual/BasicTypes/String/FFI.lean: -------------------------------------------------------------------------------- 1 | /- 2 | Copyright (c) 2024 Lean FRO LLC. All rights reserved. 3 | Released under Apache 2.0 license as described in the file LICENSE. 4 | Author: David Thrane Christiansen 5 | -/ 6 | 7 | import VersoManual 8 | 9 | import Manual.Meta 10 | open Manual.FFIDocType 11 | 12 | open Verso.Genre Manual 13 | open Verso.Genre.Manual.InlineLean 14 | 15 | set_option pp.rawOnError true 16 | 17 | 18 | #doc (Manual) "FFI" => 19 | %%% 20 | tag := "string-ffi" 21 | %%% 22 | 23 | 24 | :::ffi "lean_string_object" kind := type 25 | ``` 26 | typedef struct { 27 | lean_object m_header; 28 | /* byte length including '\0' terminator */ 29 | size_t m_size; 30 | size_t m_capacity; 31 | /* UTF8 length */ 32 | size_t m_length; 33 | char m_data[0]; 34 | } lean_string_object; 35 | ``` 36 | The representation of strings in C. See {ref "string-runtime"}[the description of run-time {name}`String`s] for more details. 37 | ::: 38 | 39 | :::ffi "lean_is_string" 40 | ```` 41 | bool lean_is_string(lean_object * o) 42 | ```` 43 | 44 | Returns `true` if `o` is a string, or `false` otherwise. 45 | ::: 46 | 47 | :::ffi "lean_to_string" 48 | ```` 49 | lean_string_object * lean_to_string(lean_object * o) 50 | ```` 51 | Performs a runtime check that `o` is indeed a string. If `o` is not a string, an assertion fails. 52 | ::: 53 | 54 | ::::draft 55 | :::planned 158 56 | * Complete C API for {lean}`String` 57 | ::: 58 | :::: 59 | -------------------------------------------------------------------------------- /Manual/BasicTypes/String/Logical.lean: -------------------------------------------------------------------------------- 1 | /- 2 | Copyright (c) 2024 Lean FRO LLC. All rights reserved. 3 | Released under Apache 2.0 license as described in the file LICENSE. 4 | Author: David Thrane Christiansen 5 | -/ 6 | 7 | import VersoManual 8 | 9 | import Manual.Meta 10 | open Manual.FFIDocType 11 | 12 | open Verso.Genre Manual 13 | open Verso.Genre.Manual.InlineLean 14 | 15 | set_option pp.rawOnError true 16 | 17 | 18 | #doc (Manual) "Logical Model" => 19 | 20 | {docstring String} 21 | 22 | The logical model of strings in Lean is a structure that contains a single field, which is a list of characters. 23 | This is convenient when specifying and proving properties of string-processing functions at a low level. 24 | -------------------------------------------------------------------------------- /Manual/BasicTypes/String/Substrings.lean: -------------------------------------------------------------------------------- 1 | /- 2 | Copyright (c) 2024 Lean FRO LLC. All rights reserved. 3 | Released under Apache 2.0 license as described in the file LICENSE. 4 | Author: David Thrane Christiansen 5 | -/ 6 | 7 | import VersoManual 8 | 9 | import Manual.Meta 10 | open Manual.FFIDocType 11 | 12 | open Verso.Genre Manual 13 | open Verso.Genre.Manual.InlineLean 14 | 15 | set_option pp.rawOnError true 16 | 17 | #doc (Manual) "Substrings" => 18 | %%% 19 | tag := "string-api-substring" 20 | %%% 21 | 22 | 23 | {docstring String.toSubstring} 24 | 25 | {docstring String.toSubstring'} 26 | 27 | {docstring Substring} 28 | 29 | # Properties 30 | 31 | {docstring Substring.isEmpty} 32 | 33 | {docstring Substring.bsize} 34 | 35 | # Positions 36 | 37 | {docstring Substring.atEnd} 38 | 39 | {docstring Substring.posOf} 40 | 41 | {docstring Substring.next} 42 | 43 | {docstring Substring.nextn} 44 | 45 | {docstring Substring.prev} 46 | 47 | {docstring Substring.prevn} 48 | 49 | 50 | # Folds and Aggregation 51 | 52 | {docstring Substring.foldl} 53 | 54 | {docstring Substring.foldr} 55 | 56 | {docstring Substring.all} 57 | 58 | {docstring Substring.any} 59 | 60 | # Comparisons 61 | 62 | {docstring Substring.beq} 63 | 64 | {docstring Substring.sameAs} 65 | 66 | # Prefix and Suffix 67 | 68 | {docstring Substring.commonPrefix} 69 | 70 | {docstring Substring.commonSuffix} 71 | 72 | {docstring Substring.dropPrefix?} 73 | 74 | {docstring Substring.dropSuffix?} 75 | 76 | # Lookups 77 | 78 | {docstring Substring.get} 79 | 80 | {docstring Substring.contains} 81 | 82 | {docstring Substring.front} 83 | 84 | 85 | # Modifications 86 | 87 | {docstring Substring.drop} 88 | 89 | {docstring Substring.dropWhile} 90 | 91 | {docstring Substring.dropRight} 92 | 93 | {docstring Substring.dropRightWhile} 94 | 95 | 96 | {docstring Substring.take} 97 | 98 | {docstring Substring.takeWhile} 99 | 100 | {docstring Substring.takeRight} 101 | 102 | {docstring Substring.takeRightWhile} 103 | 104 | {docstring Substring.extract} 105 | 106 | {docstring Substring.trim} 107 | 108 | {docstring Substring.trimLeft} 109 | 110 | {docstring Substring.trimRight} 111 | 112 | {docstring Substring.splitOn} 113 | 114 | 115 | # Conversions 116 | 117 | {docstring Substring.toString} 118 | 119 | {docstring Substring.isNat} 120 | 121 | {docstring Substring.toNat? (allowMissing := true)} 122 | 123 | {docstring Substring.toIterator} 124 | 125 | {docstring Substring.toName} 126 | -------------------------------------------------------------------------------- /Manual/BuildTools.lean: -------------------------------------------------------------------------------- 1 | /- 2 | Copyright (c) 2025 Lean FRO LLC. All rights reserved. 3 | Released under Apache 2.0 license as described in the file LICENSE. 4 | Author: David Thrane Christiansen 5 | -/ 6 | 7 | import VersoManual 8 | 9 | import Lean.Parser.Command 10 | 11 | import Manual.Meta 12 | import Manual.BuildTools.Lake 13 | import Manual.BuildTools.Elan 14 | 15 | open Manual 16 | open Verso.Genre 17 | open Verso.Genre.Manual 18 | open Verso.Genre.Manual.InlineLean 19 | 20 | 21 | open Lean.Elab.Tactic.GuardMsgs.WhitespaceMode 22 | 23 | 24 | #doc (Manual) "Build Tools and Distribution" => 25 | %%% 26 | tag := "build-tools-and-distribution" 27 | %%% 28 | 29 | :::paragraph 30 | The Lean {deftech}_toolchain_ is the collection of command-line tools that are used to check proofs and compile programs in collections of Lean files. 31 | Toolchains are managed by `elan`, which installs toolchains as needed. 32 | Lean toolchains are designed to be self-contained, and most command-line users will never need to explicitly invoke any other than `lake` and `elan`. 33 | The contain the following tools: 34 | 35 | : `lean` 36 | 37 | The Lean compiler, used to elaborate and compile a Lean source file. 38 | 39 | : `lake` 40 | 41 | The Lean build tool, used to invoke incrementally invoke `lean` and other tools while tracking dependencies. 42 | 43 | : `leanc` 44 | 45 | The C compiler that ships with Lean, which is a version of [Clang](https://clang.llvm.org/). 46 | 47 | : `leanmake` 48 | 49 | An implementation of the `make` build tool, used for compiling C dependencies. 50 | 51 | : `leanchecker` 52 | 53 | A tool that replays elaboration results from {tech}[`.olean` files] through the Lean kernel, providing additional assurance that all terms were properly checked. 54 | ::: 55 | 56 | In addition to these build tools, toolchains contain files that are needed to build Lean code. 57 | This includes source code, {tech}[`.olean` files], compiled libraries, C header files, and the compiled Lean run-time system. 58 | They also include external proof automation tools that are used by tactics included with Lean, such as `cadical` for {tactic}`bv_decide`. 59 | 60 | 61 | {include 0 Manual.BuildTools.Lake} 62 | 63 | {include 0 Manual.BuildTools.Elan} 64 | 65 | # Reservoir 66 | %%% 67 | tag := "reservoir" 68 | draft := true 69 | %%% 70 | 71 | 72 | ::: planned 76 73 | * Concepts 74 | * Package and toolchain versions 75 | * Tags and builds 76 | ::: 77 | -------------------------------------------------------------------------------- /Manual/IO/Console.lean: -------------------------------------------------------------------------------- 1 | /- 2 | Copyright (c) 2024 Lean FRO LLC. All rights reserved. 3 | Released under Apache 2.0 license as described in the file LICENSE. 4 | Author: David Thrane Christiansen 5 | -/ 6 | 7 | import VersoManual 8 | 9 | import Manual.Meta 10 | 11 | import Lean.Parser.Command 12 | 13 | open Manual 14 | open Verso.Genre 15 | open Verso.Genre.Manual 16 | open Verso.Genre.Manual.InlineLean 17 | 18 | set_option pp.rawOnError true 19 | 20 | set_option linter.unusedVariables false 21 | 22 | #doc (Manual) "Console Output" => 23 | 24 | Lean includes convenience functions for writing to {tech}[standard output] and {tech}[standard error]. 25 | All make use of {lean}`ToString` instances, and the varieties whose names end in `-ln` add a newline after the output. 26 | These convenience functions only expose a part of the functionality available {ref "stdio"}[using the standard I/O streams]. 27 | In particular, to read a line from standard input, use a combination of {lean}`IO.getStdin` and {lean}`IO.FS.Stream.getLine`. 28 | 29 | {docstring IO.print} 30 | 31 | {docstring IO.println} 32 | 33 | {docstring IO.eprint} 34 | 35 | {docstring IO.eprintln} 36 | 37 | ::::example "Printing" 38 | This program demonstrates all four convenience functions for console I/O. 39 | 40 | :::ioExample 41 | ```ioLean 42 | def main : IO Unit := do 43 | IO.print "This is the " 44 | IO.print "Lean" 45 | IO.println " language reference." 46 | IO.println "Thank you for reading it!" 47 | IO.eprint "Please report any " 48 | IO.eprint "errors" 49 | IO.eprintln " so they can be corrected." 50 | ``` 51 | 52 | It outputs the following to the standard output: 53 | 54 | ```stdout 55 | This is the Lean language reference. 56 | Thank you for reading it! 57 | ``` 58 | 59 | and the following to the standard error: 60 | 61 | ```stderr 62 | Please report any errors so they can be corrected. 63 | ``` 64 | ::: 65 | :::: 66 | -------------------------------------------------------------------------------- /Manual/Meta/CustomStyle.lean: -------------------------------------------------------------------------------- 1 | /- 2 | Copyright (c) 2024 Lean FRO LLC. All rights reserved. 3 | Released under Apache 2.0 license as described in the file LICENSE. 4 | Author: David Thrane Christiansen 5 | -/ 6 | 7 | import VersoManual 8 | import Lean.Data.Json 9 | 10 | open Verso Doc Elab Output Html Code 11 | open Verso.Genre Manual 12 | open Verso.ArgParse 13 | open Lean 14 | 15 | namespace Manual 16 | 17 | 18 | def Block.CSS : Block where 19 | name := `Manual.CSS 20 | 21 | @[code_block_expander CSS] 22 | def CSS : CodeBlockExpander 23 | | args, str => do 24 | let () ← ArgParse.done.run args 25 | pure #[← `(Doc.Block.other {Block.CSS with data := ToJson.toJson (α := String) $(quote str.getString)} #[])] 26 | 27 | @[block_extension Manual.CSS] 28 | def CSS.descr : BlockDescr where 29 | traverse _ _ _ := pure none 30 | toTeX := none 31 | toHtml := 32 | open Verso.Output.Html in 33 | some <| fun _ _ _ data _ => do 34 | match FromJson.fromJson? data with 35 | | .error err => 36 | HtmlT.logError <| "Couldn't deserialize CSS while rendering HTML: " ++ err 37 | pure .empty 38 | | .ok (css : String) => 39 | pure {{ 40 | 41 | }} 42 | -------------------------------------------------------------------------------- /Manual/Meta/ElanCheck.lean: -------------------------------------------------------------------------------- 1 | /- 2 | Copyright (c) 2025 Lean FRO LLC. All rights reserved. 3 | Released under Apache 2.0 license as described in the file LICENSE. 4 | Author: David Thrane Christiansen 5 | -/ 6 | 7 | import Lean.Elab.Command 8 | import Lean.Elab.InfoTree 9 | 10 | import Verso 11 | import Verso.Doc.ArgParse 12 | import Verso.Doc.Elab.Monad 13 | import VersoManual 14 | import Verso.Code 15 | 16 | import SubVerso.Highlighting 17 | import SubVerso.Examples 18 | 19 | import Manual.Meta.Basic 20 | import Manual.Meta.ExpectString 21 | 22 | open Lean Elab 23 | open Verso ArgParse Doc Elab Genre.Manual Html Code Highlighted.WebAssets 24 | open SubVerso.Highlighting Highlighted 25 | 26 | open Lean.Elab.Tactic.GuardMsgs 27 | 28 | namespace Manual 29 | 30 | private partial def parseOpts [Monad m] [MonadInfoTree m] [MonadLiftT CoreM m] [MonadEnv m] [MonadError m] : ArgParse m (List String) := 31 | (many (.positional `subcommand stringOrIdent)) 32 | where 33 | many {α} (p : ArgParse m α) : ArgParse m (List α) := 34 | (· :: ·) <$> p <*> many p <|> pure [] 35 | 36 | stringOrIdent : ValDesc m String := { 37 | get 38 | | .name x => pure <| x.getId.toString (escape := false) 39 | | .str x => pure x.getString 40 | | .num n => throwErrorAt n "Expected string or identifier" 41 | 42 | description := "string or identifier" 43 | } 44 | 45 | 46 | /-- 47 | Check that the output of `elan --help` has not changed unexpectedly 48 | -/ 49 | @[code_block_expander elanHelp] 50 | def elanHelp : CodeBlockExpander 51 | | args, str => do 52 | let sub ← parseOpts.run args 53 | let args := sub.toArray ++ #["--help"] 54 | let out ← IO.Process.output {cmd := "elan", args} 55 | if out.exitCode != 0 then 56 | throwError 57 | m!"When running 'elan --help', the exit code was {out.exitCode}\n" ++ 58 | m!"Stderr:\n{out.stderr}\n\nStdout:\n{out.stdout}\n\n" 59 | let elanOutput := out.stdout 60 | 61 | discard <| expectString "'elan --help' output" str elanOutput (useLine := useLine) (preEq := String.trimRight) 62 | 63 | return #[] 64 | where 65 | -- Ignore the version spec or empty lines to reduce false positives 66 | useLine (l : String) : Bool := 67 | !l.isEmpty && !"elan ".isPrefixOf l 68 | -------------------------------------------------------------------------------- /Manual/Meta/ExpectString.lean: -------------------------------------------------------------------------------- 1 | /- 2 | Copyright (c) 2025 Lean FRO LLC. All rights reserved. 3 | Released under Apache 2.0 license as described in the file LICENSE. 4 | Author: David Thrane Christiansen 5 | -/ 6 | 7 | import Lean.Elab.Command 8 | import Lean.Elab.InfoTree 9 | 10 | import Verso 11 | 12 | open Lean Elab 13 | open Verso Doc 14 | 15 | namespace Manual 16 | 17 | variable {m : Type → Type} [Monad m] [MonadLog m] [AddMessageContext m] [MonadOptions m] 18 | variable [MonadInfoTree m] 19 | 20 | def abbreviateString (what : String) (maxLength : Nat := 30) : String := 21 | if what.length > maxLength then 22 | what.take maxLength ++ "…" 23 | else 24 | what 25 | 26 | /-- 27 | Expects that a string matches some expected form from the document. 28 | 29 | If the strings don't match, then a diff is displayed as an error, and a code action to replace the 30 | expected string with the actual one is offered. Strings are compared one line at a time, and only 31 | strings that match `useLine` are considered (by default, all are considered). Lines are compared 32 | modulo `preEq`. The parameter `what` is used in the error message header, in a context "Mismatched 33 | `what`:". 34 | 35 | Errors are logged, not thrown; the returned `Bool` indicates whether an error was logged. 36 | -/ 37 | def expectString (what : String) (expected : StrLit) (actual : String) 38 | (preEq : String → String := id) 39 | (useLine : String → Bool := fun _ => true) : m Bool := do 40 | let expectedLines := expected.getString.splitOn "\n" |>.filter useLine |>.toArray 41 | let actualLines := actual.splitOn "\n" |>.filter useLine |>.toArray 42 | 43 | unless expectedLines.map preEq == actualLines.map preEq do 44 | let diff := Diff.diff expectedLines actualLines 45 | logErrorAt expected m!"Mismatched {what}:\n{Diff.linesToString diff}" 46 | Suggestion.saveSuggestion expected (abbreviateString actual) actual 47 | return false 48 | 49 | return true 50 | -------------------------------------------------------------------------------- /Manual/Meta/LakeCheck.lean: -------------------------------------------------------------------------------- 1 | /- 2 | Copyright (c) 2025 Lean FRO LLC. All rights reserved. 3 | Released under Apache 2.0 license as described in the file LICENSE. 4 | Author: David Thrane Christiansen 5 | -/ 6 | 7 | import Lean.Elab.Command 8 | import Lean.Elab.InfoTree 9 | 10 | import Verso 11 | import Verso.Doc.ArgParse 12 | import Verso.Doc.Elab.Monad 13 | import VersoManual 14 | import Verso.Code 15 | 16 | import SubVerso.Highlighting 17 | import SubVerso.Examples 18 | 19 | import Manual.Meta.Basic 20 | import Manual.Meta.ExpectString 21 | 22 | 23 | open Lean Elab 24 | open Verso ArgParse Doc Elab Genre.Manual Html Code Highlighted.WebAssets 25 | open SubVerso.Highlighting Highlighted 26 | 27 | open Lean.Elab.Tactic.GuardMsgs 28 | 29 | namespace Manual 30 | 31 | private partial def parseOpts [Monad m] [MonadInfoTree m] [MonadLiftT CoreM m] [MonadEnv m] [MonadError m] : ArgParse m (List String) := 32 | (many (.positional `subcommand stringOrIdent)) 33 | where 34 | many {α} (p : ArgParse m α) : ArgParse m (List α) := 35 | (· :: ·) <$> p <*> many p <|> pure [] 36 | 37 | stringOrIdent : ValDesc m String := { 38 | get 39 | | .name x => pure <| x.getId.toString (escape := false) 40 | | .str x => pure x.getString 41 | | .num n => throwErrorAt n "Expected string or identifier" 42 | 43 | description := "string or identifier" 44 | } 45 | 46 | 47 | /-- 48 | Check that the output of `lake --help` has not changed unexpectedly 49 | -/ 50 | @[code_block_expander lakeHelp] 51 | def lakeHelp : CodeBlockExpander 52 | | args, str => do 53 | let sub ← parseOpts.run args 54 | let args := #["--help"] ++ sub.toArray 55 | let out ← IO.Process.output {cmd := "lake", args} 56 | if out.exitCode != 0 then 57 | throwError 58 | m!"When running 'lake --help', the exit code was {out.exitCode}\n" ++ 59 | m!"Stderr:\n{out.stderr}\n\nStdout:\n{out.stdout}\n\n" 60 | let lakeOutput := out.stdout 61 | 62 | discard <| expectString "'lake --help' output" str lakeOutput (useLine := useLine) 63 | 64 | return #[] 65 | where 66 | -- Ignore the version spec or empty lines to reduce false positives 67 | useLine (l : String) : Bool := 68 | !l.isEmpty && !"Lake version ".isPrefixOf l 69 | -------------------------------------------------------------------------------- /Manual/Meta/LakeToml/Test.lean: -------------------------------------------------------------------------------- 1 | /- 2 | Copyright (c) 2025 Lean FRO LLC. All rights reserved. 3 | Released under Apache 2.0 license as described in the file LICENSE. 4 | Author: David Thrane Christiansen 5 | -/ 6 | 7 | import Lean.Elab.Command 8 | import Lean.Elab.Deriving 9 | 10 | namespace Manual.Toml 11 | 12 | open Std (Format) 13 | open Lean Elab 14 | 15 | /-- Types that can be used in in-manual tests for TOML decoding -/ 16 | class Test (α : Sort u) where 17 | toString : α → Format 18 | 19 | instance {p : Prop} : Test p where 20 | toString _ := .text "…" 21 | 22 | instance [ToString α] : Test α where 23 | toString := .text ∘ toString 24 | 25 | instance [Repr α] : Test α where 26 | toString x := repr x 27 | 28 | instance [Test α] : Test (Array α) where 29 | toString arr := "#[" ++ .group (.nest 2 <| Format.joinSep (arr.map Test.toString).toList ("," ++ .line)) ++ "]" 30 | 31 | instance [Test α] : Test (NameMap α) where 32 | toString xs := "{" ++ .group (.nest 2 <| Format.joinSep (xs.toList.map (fun x => s!"'{x.1}' ↦ {Test.toString x.2}")) ("," ++ .line)) ++ "}" 33 | 34 | instance {α : Type u} {β : Type v} : Test (α → β) where 35 | toString _ := "#" 36 | 37 | -- HACK: elide these fields that are platform-specific 38 | def ignoreFields := [`buildArchive] 39 | 40 | open Lean Elab Command in 41 | def deriveTest (declNames : Array Name) : CommandElabM Bool := do 42 | if h : declNames.size ≠ 1 then return false 43 | else 44 | let declName := declNames[0] 45 | if !isStructure (← getEnv) declName then 46 | throwError "Can't derive 'Test' for non-structure '{declName}'" 47 | let params ← liftTermElabM do 48 | let uniParams ← (← getEnv).find? declName |>.mapM (Meta.mkFreshLevelMVarsFor ·) 49 | let ty ← Meta.inferType (.const declName <| uniParams.getD []) 50 | Meta.forallTelescopeReducing ty fun params ret => 51 | pure <| params.mapIdx fun i _ => s!"x{i}".toName 52 | let fs := getStructureFields (← getEnv) declName 53 | let fieldBinds ← fs.mapM fun f => 54 | `(Lean.Parser.Term.structInstField|$(mkIdent f):ident := $(mkIdent f)) 55 | let header : Term := Syntax.mkApp (mkIdent declName) (params.map (mkIdent ·)) 56 | let fields : TSyntaxArray `term ← fs.mapM fun f => do 57 | let rhs ← if f ∈ ignoreFields then pure (quote "ELIDED") else `(Test.toString $(mkIdent f)) 58 | `(Format.group <| Format.nest 2 <| 59 | Format.text $(quote <| toString f ++ " :=") ++ Format.line ++ 60 | $rhs) 61 | 62 | let cmd ← 63 | `(instance : Test $header where 64 | toString 65 | | ⟨$(fs.map mkIdent),*⟩ => "{" ++ .group (.nest 2 <| (Format.text "," ++ .line).joinSep [$fields,*]) ++ "}") 66 | 67 | elabCommand cmd 68 | return true 69 | 70 | initialize 71 | registerDerivingHandler ``Test deriveTest 72 | -------------------------------------------------------------------------------- /Manual/Meta/Markdown.lean: -------------------------------------------------------------------------------- 1 | /- 2 | Copyright (c) 2024 Lean FRO LLC. All rights reserved. 3 | Released under Apache 2.0 license as described in the file LICENSE. 4 | Author: Joachim Breitner 5 | -/ 6 | 7 | import VersoManual 8 | import Manual.Meta.Figure 9 | import Lean.Elab.InfoTree.Types 10 | 11 | open Verso Doc Elab 12 | open Verso.Genre Manual 13 | open Verso.ArgParse 14 | 15 | open Lean Elab 16 | 17 | namespace Manual 18 | 19 | def Block.noVale : Block where 20 | name := `Manual.Block.noVale 21 | 22 | @[block_extension Block.noVale] 23 | def Block.noVale.descr : BlockDescr where 24 | traverse _ _ _ := pure none 25 | toTeX := none 26 | toHtml := 27 | open Verso.Output.Html in 28 | some <| fun _ goB _ _ content => do 29 | pure {{
{{← content.mapM goB}}
}} 30 | 31 | @[code_block_expander markdown] 32 | def markdown : CodeBlockExpander 33 | | _args, str => do 34 | let str ← parserInputString str 35 | let some ast := MD4Lean.parse str 36 | | throwError "Failed to parse docstring as Markdown" 37 | let content ← ast.blocks.mapM <| 38 | Markdown.blockFromMarkdown (handleHeaders := Markdown.strongEmphHeaders) 39 | pure #[← ``(Doc.Block.other Block.noVale #[$content,*])] 40 | -------------------------------------------------------------------------------- /Manual/Meta/SpliceContents.lean: -------------------------------------------------------------------------------- 1 | /- 2 | Copyright (c) 2024 Lean FRO LLC. All rights reserved. 3 | Released under Apache 2.0 license as described in the file LICENSE. 4 | Author: David Thrane Christiansen 5 | -/ 6 | 7 | import Verso 8 | import Verso.Doc.ArgParse 9 | import Verso.Doc.Elab.Monad 10 | import VersoManual 11 | import Verso.Code 12 | 13 | namespace Manual 14 | 15 | open Lean Elab 16 | open Verso ArgParse Doc Elab Genre.Manual Html Code Highlighted.WebAssets Syntax 17 | 18 | 19 | structure SpliceContentsConfig where 20 | moduleName : Ident 21 | 22 | def SpliceContentsConfig.parse [Monad m] [MonadInfoTree m] [MonadLiftT CoreM m] [MonadEnv m] [MonadError m] : ArgParse m SpliceContentsConfig := 23 | SpliceContentsConfig.mk <$> .positional `moduleName .ident 24 | 25 | @[part_command Verso.Syntax.block_role] 26 | def spliceContents : PartCommand 27 | | `(block|block_role{spliceContents $_args* }[ $content ]) => throwErrorAt content "Unexpected block argument" 28 | | `(block|block_role{spliceContents $args*}) => do 29 | let {moduleName} ← SpliceContentsConfig.parse.run (← parseArgs args) 30 | let moduleIdent ← 31 | mkIdentFrom moduleName <$> 32 | realizeGlobalConstNoOverloadWithInfo (mkIdentFrom moduleName (docName moduleName.getId)) 33 | let contentsAsBlock ← ``(Block.concat (Part.content $moduleIdent)) 34 | PartElabM.addBlock contentsAsBlock 35 | | _ => 36 | throwUnsupportedSyntax 37 | -------------------------------------------------------------------------------- /Manual/Monads/API.lean: -------------------------------------------------------------------------------- 1 | /- 2 | Copyright (c) 2024 Lean FRO LLC. All rights reserved. 3 | Released under Apache 2.0 license as described in the file LICENSE. 4 | Author: David Thrane Christiansen 5 | -/ 6 | 7 | import VersoManual 8 | 9 | import Manual.Meta 10 | 11 | import Lean.Parser.Command 12 | 13 | open Manual 14 | 15 | open Verso.Genre 16 | open Verso.Genre.Manual 17 | open Verso.Genre.Manual.InlineLean 18 | 19 | set_option pp.rawOnError true 20 | 21 | set_option linter.unusedVariables false 22 | 23 | #doc (Manual) "API Reference" => 24 | 25 | In addition to the general functions described here, there are some functions that are conventionally defined as part of the API of in the namespace of each collection type: 26 | * `mapM` maps a monadic function. 27 | * `forM` maps a monadic function, throwing away the result. 28 | * `filterM` filters using a monadic predicate, returning the values that satisfy it. 29 | 30 | 31 | ::::example "Monadic Collection Operations" 32 | {name}`Array.filterM` can be used to write a filter that depends on a side effect. 33 | 34 | :::ioExample 35 | ```ioLean 36 | def values := #[1, 2, 3, 5, 8] 37 | def main : IO Unit := do 38 | let filtered ← values.filterM fun v => do 39 | repeat 40 | IO.println s!"Keep {v}? [y/n]" 41 | let answer := (← (← IO.getStdin).getLine).trim 42 | if answer == "y" then return true 43 | if answer == "n" then return false 44 | return false 45 | IO.println "These values were kept:" 46 | for v in filtered do 47 | IO.println s!" * {v}" 48 | ``` 49 | ```stdin 50 | y 51 | n 52 | oops 53 | y 54 | n 55 | y 56 | ``` 57 | ```stdout 58 | Keep 1? [y/n] 59 | Keep 2? [y/n] 60 | Keep 3? [y/n] 61 | Keep 3? [y/n] 62 | Keep 5? [y/n] 63 | Keep 8? [y/n] 64 | These values were kept: 65 | * 1 66 | * 3 67 | * 8 68 | ``` 69 | ::: 70 | :::: 71 | 72 | # Discarding Results 73 | 74 | The {name}`discard` function is especially useful when using an action that returns a value only for its side effects. 75 | 76 | {docstring discard} 77 | 78 | # Control Flow 79 | 80 | {docstring guard} 81 | 82 | {docstring optional} 83 | 84 | # Lifting Boolean Operations 85 | 86 | {docstring andM} 87 | 88 | {docstring orM} 89 | 90 | {docstring notM} 91 | 92 | # Kleisli Composition 93 | 94 | {deftech}_Kleisli composition_ is the composition of monadic functions, analogous to {name}`Function.comp` for ordinary functions. 95 | 96 | {docstring Bind.kleisliRight} 97 | 98 | {docstring Bind.kleisliLeft} 99 | 100 | # Re-Ordered Operations 101 | 102 | Sometimes, it can be convenient to partially apply a function to its second argument. 103 | These functions reverse the order of arguments, making it this easier. 104 | 105 | {docstring Functor.mapRev} 106 | 107 | {docstring Bind.bindLeft} 108 | -------------------------------------------------------------------------------- /Manual/Monads/Zoo/Id.lean: -------------------------------------------------------------------------------- 1 | /- 2 | Copyright (c) 2024 Lean FRO LLC. All rights reserved. 3 | Released under Apache 2.0 license as described in the file LICENSE. 4 | Author: David Thrane Christiansen 5 | -/ 6 | 7 | import VersoManual 8 | 9 | import Manual.Meta 10 | 11 | import Lean.Parser.Command 12 | 13 | open Manual 14 | 15 | open Verso.Genre 16 | open Verso.Genre.Manual 17 | open Verso.Genre.Manual.InlineLean 18 | 19 | set_option pp.rawOnError true 20 | 21 | set_option linter.unusedVariables false 22 | 23 | #doc (Manual) "Identity" => 24 | 25 | The identity monad {name}`Id` has no effects whatsoever. 26 | Both {name}`Id` and the corresponding implementation of {name}`pure` are the identity function, and {name}`bind` is reversed function application. 27 | The identity monad has two primary use cases: 28 | 1. It can be the type of a {keywordOf Lean.Parser.Term.do}`do` block that implements a pure function with local effects. 29 | 2. It can be placed at the bottom of a stack of monad transformers. 30 | 31 | ```lean (show := false) 32 | -- Verify claims 33 | example : Id = id := rfl 34 | example : Id.run (α := α) = id := rfl 35 | example : (pure (f := Id)) = (id : α → α) := rfl 36 | example : (bind (m := Id)) = (fun (x : α) (f : α → Id β) => f x) := rfl 37 | ``` 38 | 39 | {docstring Id} 40 | 41 | {docstring Id.run} 42 | 43 | :::example "Local Effects with the Identity Monad" 44 | This code block implements a countdown procedure by using simulated local mutability in the identity monad. 45 | ```lean (name := idDo) 46 | #eval Id.run do 47 | let mut xs := [] 48 | for x in [0:10] do 49 | xs := x :: xs 50 | pure xs 51 | ``` 52 | ```leanOutput idDo 53 | [9, 8, 7, 6, 5, 4, 3, 2, 1, 0] 54 | ``` 55 | ::: 56 | -------------------------------------------------------------------------------- /Manual/Monads/Zoo/Option.lean: -------------------------------------------------------------------------------- 1 | /- 2 | Copyright (c) 2024 Lean FRO LLC. All rights reserved. 3 | Released under Apache 2.0 license as described in the file LICENSE. 4 | Author: David Thrane Christiansen 5 | -/ 6 | 7 | import VersoManual 8 | 9 | import Manual.Meta 10 | 11 | import Lean.Parser.Command 12 | 13 | open Manual 14 | 15 | open Verso.Genre 16 | open Verso.Genre.Manual 17 | open Verso.Genre.Manual.InlineLean 18 | 19 | set_option pp.rawOnError true 20 | 21 | set_option linter.unusedVariables false 22 | 23 | #doc (Manual) "Option" => 24 | %%% 25 | tag := "option-monad" 26 | %%% 27 | 28 | Ordinarily, {lean}`Option` is thought of as data, similarly to a nullable type. 29 | It can also be considered as a monad, and thus a way of performing computations. 30 | The {lean}`Option` monad and its transformer {lean}`OptionT` can be understood as describing computations that may terminate early, discarding the results. 31 | Callers can check for early termination and invoke a fallback if desired using {name}`OrElse.orElse` or by treating it as a {lean}`MonadExcept Unit`. 32 | 33 | {docstring OptionT} 34 | 35 | {docstring OptionT.run} 36 | 37 | {docstring OptionT.lift} 38 | 39 | {docstring OptionT.mk} 40 | 41 | {docstring OptionT.pure} 42 | 43 | {docstring OptionT.bind} 44 | 45 | {docstring OptionT.fail} 46 | 47 | {docstring OptionT.orElse} 48 | 49 | {docstring OptionT.tryCatch} 50 | -------------------------------------------------------------------------------- /Manual/Monads/Zoo/Reader.lean: -------------------------------------------------------------------------------- 1 | /- 2 | Copyright (c) 2024 Lean FRO LLC. All rights reserved. 3 | Released under Apache 2.0 license as described in the file LICENSE. 4 | Author: David Thrane Christiansen 5 | -/ 6 | 7 | import VersoManual 8 | 9 | import Manual.Meta 10 | 11 | import Lean.Parser.Command 12 | 13 | open Manual 14 | 15 | open Verso.Genre 16 | open Verso.Genre.Manual 17 | open Verso.Genre.Manual.InlineLean 18 | 19 | set_option pp.rawOnError true 20 | 21 | set_option linter.unusedVariables false 22 | 23 | #doc (Manual) "Reader" => 24 | %%% 25 | tag := "reader-monad" 26 | %%% 27 | 28 | {docstring MonadReader} 29 | 30 | {docstring MonadReaderOf} 31 | 32 | {docstring readThe} 33 | 34 | {docstring MonadWithReader} 35 | 36 | {docstring MonadWithReaderOf} 37 | 38 | {docstring withTheReader} 39 | 40 | {docstring ReaderT} 41 | 42 | {docstring ReaderM} 43 | 44 | {docstring ReaderT.run} 45 | 46 | {docstring ReaderT.read} 47 | 48 | {docstring ReaderT.adapt} 49 | 50 | {docstring ReaderT.pure} 51 | 52 | {docstring ReaderT.bind} 53 | 54 | {docstring ReaderT.orElse} 55 | 56 | {docstring ReaderT.failure} 57 | -------------------------------------------------------------------------------- /Manual/NotationsMacros/Precedence.lean: -------------------------------------------------------------------------------- 1 | /- 2 | Copyright (c) 2024 Lean FRO LLC. All rights reserved. 3 | Released under Apache 2.0 license as described in the file LICENSE. 4 | Author: David Thrane Christiansen 5 | -/ 6 | 7 | import VersoManual 8 | 9 | import Manual.Meta 10 | 11 | import Lean.Parser.Command 12 | 13 | open Manual 14 | 15 | open Verso.Genre 16 | open Verso.Genre.Manual 17 | open Verso.Genre.Manual.InlineLean 18 | 19 | set_option pp.rawOnError true 20 | 21 | set_option linter.unusedVariables false 22 | 23 | #doc (Manual) "Precedence" => 24 | %%% 25 | tag := "precedence" 26 | %%% 27 | 28 | Infix operators, notations, and other syntactic extensions to Lean make use of explicit {tech}[precedence] annotations. 29 | While precedences in Lean can technically be any natural number, by convention they range from {evalPrec}`min` to {evalPrec}`max`, respectively denoted `min` and `max`.{TODO}[Fix the keywordOf operator and use it here] 30 | Function application has the highest precedence. 31 | 32 | :::syntax prec (open := false) (title := "Parser Precedences") 33 | Most operator precedences consist of explicit numbers. 34 | The named precedence levels denote the outer edges of the range, close to the minimum or maximum, and are typically used by more involved syntax extensions. 35 | ```grammar 36 | $n:num 37 | ``` 38 | 39 | Precedences may also be denoted as sums or differences of precedences; these are typically used to assign precedences that are relative to one of the named precedences. 40 | ```grammar 41 | $p + $p 42 | ``` 43 | ```grammar 44 | $p - $p 45 | ``` 46 | ```grammar 47 | ($p) 48 | ``` 49 | 50 | The maximum precedence is used to parse terms that occur in a function position. 51 | Operators should typically not use use this level, because it can interfere with users' expectation that function application binds more tightly than any other operator, but it is useful in more involved syntax extensions to indicate how other constructs interact with function application. 52 | ```grammar 53 | max 54 | ``` 55 | 56 | Argument precedence is one less than the maximum precedence. 57 | This level is useful for defining syntax that should be treated as an argument to a function, such as {keywordOf Lean.Parser.Term.fun}`fun` or {keywordOf Lean.Parser.Term.do}`do`. 58 | ```grammar 59 | arg 60 | ``` 61 | 62 | Lead precedence is less that argument precedence, and should be used for custom syntax that should not occur as a function argument, such as {keywordOf Lean.Parser.Term.let}`let`. 63 | ```grammar 64 | lead 65 | ``` 66 | 67 | The minimum precedence can be used to ensure that an operator binds less tightly than all other operators. 68 | ```grammar 69 | min 70 | ``` 71 | ::: 72 | -------------------------------------------------------------------------------- /Manual/RecursiveDefs/WF/GuessLexExample.lean: -------------------------------------------------------------------------------- 1 | /- 2 | Copyright (c) 2025 Lean FRO LLC. All rights reserved. 3 | Released under Apache 2.0 license as described in the file LICENSE. 4 | Author: Joachim Breitner 5 | -/ 6 | 7 | import VersoManual 8 | 9 | import Manual.Meta 10 | 11 | /-! 12 | This is extracted into its own file because line numbers show up in the error message, and we don't 13 | want to update it over and over again as we edit the large file. 14 | -/ 15 | 16 | open Verso.Genre Manual 17 | open Verso.Genre.Manual.InlineLean 18 | 19 | open Lean.Elab.Tactic.GuardMsgs.WhitespaceMode 20 | 21 | #doc (Manual) "Termination failure (for inclusion elsewhere)" => 22 | 23 | :::example "Termination failure" 24 | 25 | If there is no {keywordOf Lean.Parser.Command.declaration}`termination_by` clause, Lean attempts to infer a measure for well-founded recursion. 26 | If it fails, then it prints the table mentioned above. 27 | In this example, the {keywordOf Lean.Parser.Command.declaration}`decreasing_by` clause simply prevents Lean from also attempting structural recursion; this keeps the error message specific. 28 | 29 | ```lean (error := true) (keep := false) (name := badwf) 30 | def f : (n m l : Nat) → Nat 31 | | n+1, m+1, l+1 => [ 32 | f (n+1) (m+1) (l+1), 33 | f (n+1) (m-1) (l), 34 | f (n) (m+1) (l) ].sum 35 | | _, _, _ => 0 36 | decreasing_by all_goals decreasing_tactic 37 | ``` 38 | ```leanOutput badwf (whitespace := lax) 39 | Could not find a decreasing measure. 40 | The basic measures relate at each recursive call as follows: 41 | (<, ≤, =: relation proved, ? all proofs failed, _: no proof attempted) 42 | n m l 43 | 1) 32:6-25 = = = 44 | 2) 33:6-23 = < _ 45 | 3) 34:6-23 < _ _ 46 | Please use `termination_by` to specify a decreasing measure. 47 | ``` 48 | 49 | The three recursive calls are identified by their source positions. 50 | This message conveys the following facts: 51 | 52 | * In the first recursive call, all arguments are (provably) equal to the parameters 53 | * In the second recursive call, the first argument is equal to the first parameter and the second argument is provably smaller than the second parameter. 54 | The third parameter was not checked for this recursive call, because it was not necessary to determine that no suitable termination argument exists. 55 | * In the third recursive call, the first argument decreases strictly, and the other arguments were not checked. 56 | 57 | When termination proofs fail in this manner, a good technique to discover the problem is to explicitly indicate the expected termination argument using {keywordOf Lean.Parser.Command.declaration}`termination_by`. 58 | This will surface the messages from the failing tactic. 59 | 60 | ::: 61 | -------------------------------------------------------------------------------- /Manual/Releases/v4.0.0-m1.lean: -------------------------------------------------------------------------------- 1 | /- 2 | Copyright (c) 2025 Lean FRO LLC. All rights reserved. 3 | Released under Apache 2.0 license as described in the file LICENSE. 4 | Author: Joachim Breitner 5 | -/ 6 | 7 | import VersoManual 8 | 9 | import Manual.Meta.Markdown 10 | 11 | open Manual 12 | open Verso.Genre 13 | 14 | 15 | #doc (Manual) "Lean 4.0.0-m1 (2021-01-04)" => 16 | %%% 17 | tag := "release-v4.0.0-m1" 18 | file := "v4.0.0-m1" 19 | %%% 20 | 21 | `````markdown 22 | The Lean development team is proud to announce the first milestone release of Lean 4. This release is aimed at experimentation with the new features of Lean 4, eventually leading to a full release of 4.0.0 ready for general use. 23 | 24 | This release is the result of almost three years of work since the release of Lean 3.4.0, reworking, extending, and improving almost all aspects of Lean. More information about Lean 4 can be found in the [official documentation](https://leanprover.github.io/lean4/doc/) as well as in the introductory talk ["An overview of Lean 4"](https://www.youtube.com/watch?v=UeGvhfW1v9M) at Lean Together 2021. 25 | 26 | Leonardo de Moura & Sebastian Ullrich 27 | 28 | #### Acknowledgements 29 | * Daniel Selsam - type class resolution, feedback, design discussions 30 | * Marc Huisinga and Wojciech Nawrocki - Lean Server 31 | * Joe Hendrix, Andrew Kent, Rob Dockins, Simon Winwood (Galois Inc) - early adopters, suggestions, feedback 32 | * Daan Leijen, Simon Peyton Jones, Nikhil Swamy, Sebastian Graf, Max Wagner - design discussions, feedback, suggestions 33 | ````` 34 | -------------------------------------------------------------------------------- /Manual/Releases/v4.0.0-m2.lean: -------------------------------------------------------------------------------- 1 | /- 2 | Copyright (c) 2025 Lean FRO LLC. All rights reserved. 3 | Released under Apache 2.0 license as described in the file LICENSE. 4 | Author: Joachim Breitner 5 | -/ 6 | 7 | import VersoManual 8 | 9 | import Manual.Meta.Markdown 10 | 11 | open Manual 12 | open Verso.Genre 13 | 14 | 15 | #doc (Manual) "Lean 4.0.0-m2 (2021-03-02)" => 16 | %%% 17 | tag := "release-v4.0.0-m2" 18 | file := "v4.0.0-m2" 19 | %%% 20 | 21 | `````markdown 22 | This is the second milestone release of Lean 4. With too many improvements and bug fixes in almost all parts of the system to list, we would like to single out major improvements to `simp` and other built-in tactics as well as support for a goal view that make the proving experience more comfortable. 23 | ````` 24 | -------------------------------------------------------------------------------- /Manual/Releases/v4.0.0-m3.lean: -------------------------------------------------------------------------------- 1 | /- 2 | Copyright (c) 2025 Lean FRO LLC. All rights reserved. 3 | Released under Apache 2.0 license as described in the file LICENSE. 4 | Author: Joachim Breitner 5 | -/ 6 | 7 | import VersoManual 8 | 9 | import Manual.Meta.Markdown 10 | 11 | open Manual 12 | open Verso.Genre 13 | 14 | 15 | #doc (Manual) "Lean 4.0.0-m3 (2022-01-31)" => 16 | %%% 17 | tag := "release-v4.0.0-m3" 18 | file := "v4.0.0-m3" 19 | %%% 20 | 21 | `````markdown 22 | This is the third milestone release of Lean 4, and the last planned milestone before an official 23 | release. With almost 3000 commits improving and extending many parts of the system since the last 24 | milestone, we are now close to completing all main features we have envisioned for Lean 4. 25 | 26 | Contributors: 27 | ``` 28 | $ git shortlog -s -n v4.0.0-m2..v4.0.0-m3 29 | 1719 Leonardo de Moura 30 | 725 Sebastian Ullrich 31 | 149 Wojciech Nawrocki 32 | 93 Daniel Selsam 33 | 82 Gabriel Ebner 34 | 36 Joscha 35 | 35 Daniel Fabian 36 | 21 tydeu 37 | 14 Mario Carneiro 38 | 13 larsk21 39 | 12 Jannis Limperg 40 | 11 Chris Lovett 41 | 8 Henrik Böving 42 | 4 François G. Dorais 43 | 4 Siddharth 44 | 3 Joe Hendrix 45 | 3 Scott Morrison 46 | 3 ammkrn 47 | 2 Josh Levine 48 | 2 Mac 49 | 2 Mac Malone 50 | 2 Simon Hudon 51 | 2 pcpthm 52 | 1 Anders Christiansen Sørby 53 | 1 Andrei Cheremskoy 54 | 1 Arthur Paulino 55 | 1 Christian Pehle 56 | 1 Formally Verified Waffle Maker 57 | 1 Hunter Monroe 58 | 1 Jan Hrcek 59 | 1 Joshua Seaton 60 | 1 Kevin Buzzard 61 | 1 Lorenz Leutgeb 62 | 1 Mauricio Collares 63 | 1 Michael Burge 64 | 1 Paul Brinkmeier 65 | 1 Reijo Jaakkola 66 | 1 Severen Redwood 67 | 1 Siddharth Bhat 68 | 1 Tom Ball 69 | 1 Varun Gandhi 70 | 1 WojciechKarpiel 71 | 1 Xavier Noria 72 | 1 gabriel-doriath-dohler 73 | 1 zygi 74 | 1 Бакиновский Максим 75 | ``` 76 | ````` 77 | -------------------------------------------------------------------------------- /Manual/Releases/v4.1.0.lean: -------------------------------------------------------------------------------- 1 | /- 2 | Copyright (c) 2025 Lean FRO LLC. All rights reserved. 3 | Released under Apache 2.0 license as described in the file LICENSE. 4 | Author: Joachim Breitner 5 | -/ 6 | 7 | import VersoManual 8 | 9 | import Manual.Meta.Markdown 10 | 11 | open Manual 12 | open Verso.Genre 13 | 14 | 15 | #doc (Manual) "Lean 4.1.0 (2023-09-26)" => 16 | %%% 17 | tag := "release-v4.1.0" 18 | file := "v4.1.0" 19 | %%% 20 | 21 | `````markdown 22 | * The error positioning on missing tokens has been [improved](https://github.com/leanprover/lean4/pull/2393). In particular, this should make it easier to spot errors in incomplete tactic proofs. 23 | 24 | * After elaborating a configuration file, Lake will now cache the configuration to a `lakefile.olean`. Subsequent runs of Lake will import this OLean instead of elaborating the configuration file. This provides a significant performance improvement (benchmarks indicate that using the OLean cuts Lake's startup time in half), but there are some important details to keep in mind: 25 | + Lake will regenerate this OLean after each modification to the `lakefile.lean` or `lean-toolchain`. You can also force a reconfigure by passing the new `--reconfigure` / `-R` option to `lake`. 26 | + Lake configuration options (i.e., `-K`) will be fixed at the moment of elaboration. Setting these options when `lake` is using the cached configuration will have no effect. To change options, run `lake` with `-R` / `--reconfigure`. 27 | + **The `lakefile.olean` is a local configuration and should not be committed to Git. Therefore, existing Lake packages need to add it to their `.gitignore`.** 28 | 29 | * The signature of `Lake.buildO` has changed, `args` has been split into `weakArgs` and `traceArgs`. `traceArgs` are included in the input trace and `weakArgs` are not. See Lake's [FFI example](https://github.com/leanprover/lean4/blob/releases/v4.1.0/src/lake/examples/ffi/lib/lakefile.lean) for a demonstration of how to adapt to this change. 30 | 31 | * The signatures of `Lean.importModules`, `Lean.Elab.headerToImports`, and `Lean.Elab.parseImports` 32 | 33 | * There is now [an `occs` field](https://github.com/leanprover/lean4/pull/2470) 34 | in the configuration object for the `rewrite` tactic, 35 | allowing control of which occurrences of a pattern should be rewritten. 36 | This was previously a separate argument for `Lean.MVarId.rewrite`, 37 | and this has been removed in favour of an additional field of `Rewrite.Config`. 38 | It was not previously accessible from user tactics. 39 | 40 | ````` 41 | -------------------------------------------------------------------------------- /Manual/Releases/v4.2.0.lean: -------------------------------------------------------------------------------- 1 | /- 2 | Copyright (c) 2025 Lean FRO LLC. All rights reserved. 3 | Released under Apache 2.0 license as described in the file LICENSE. 4 | Author: Joachim Breitner 5 | -/ 6 | 7 | import VersoManual 8 | 9 | import Manual.Meta.Markdown 10 | 11 | open Manual 12 | open Verso.Genre 13 | 14 | 15 | #doc (Manual) "Lean 4.2.0 (2023-10-31)" => 16 | %%% 17 | tag := "release-v4.2.0" 18 | file := "v4.2.0" 19 | %%% 20 | 21 | `````markdown 22 | * [isDefEq cache for terms not containing metavariables.](https://github.com/leanprover/lean4/pull/2644). 23 | * Make [`Environment.mk`](https://github.com/leanprover/lean4/pull/2604) and [`Environment.add`](https://github.com/leanprover/lean4/pull/2642) private, and add [`replay`](https://github.com/leanprover/lean4/pull/2617) as a safer alternative. 24 | * `IO.Process.output` no longer inherits the standard input of the caller. 25 | * [Do not inhibit caching](https://github.com/leanprover/lean4/pull/2612) of default-level `match` reduction. 26 | * [List the valid case tags](https://github.com/leanprover/lean4/pull/2629) when the user writes an invalid one. 27 | * The derive handler for `DecidableEq` [now handles](https://github.com/leanprover/lean4/pull/2591) mutual inductive types. 28 | * [Show path of failed import in Lake](https://github.com/leanprover/lean4/pull/2616). 29 | * [Fix linker warnings on macOS](https://github.com/leanprover/lean4/pull/2598). 30 | * **Lake:** Add `postUpdate?` package configuration option. Used by a package to specify some code which should be run after a successful `lake update` of the package or one of its downstream dependencies. ([lake#185](https://github.com/leanprover/lake/issues/185)) 31 | * Improvements to Lake startup time ([#2572](https://github.com/leanprover/lean4/pull/2572), [#2573](https://github.com/leanprover/lean4/pull/2573)) 32 | * `refine e` now replaces the main goal with metavariables which were created during elaboration of `e` and no longer captures pre-existing metavariables that occur in `e` ([#2502](https://github.com/leanprover/lean4/pull/2502)). 33 | * This is accomplished via changes to `withCollectingNewGoalsFrom`, which also affects `elabTermWithHoles`, `refine'`, `calc` (tactic), and `specialize`. Likewise, all of these now only include newly-created metavariables in their output. 34 | * Previously, both newly-created and pre-existing metavariables occurring in `e` were returned inconsistently in different edge cases, causing duplicated goals in the infoview (issue [#2495](https://github.com/leanprover/lean4/issues/2495)), erroneously closed goals (issue [#2434](https://github.com/leanprover/lean4/issues/2434)), and unintuitive behavior due to `refine e` capturing previously-created goals appearing unexpectedly in `e` (no issue; see PR). 35 | 36 | ````` 37 | -------------------------------------------------------------------------------- /Manual/Tactics/Reference/Simp.lean: -------------------------------------------------------------------------------- 1 | /- 2 | Copyright (c) 2024 Lean FRO LLC. All rights reserved. 3 | Released under Apache 2.0 license as described in the file LICENSE. 4 | Author: David Thrane Christiansen 5 | -/ 6 | 7 | import VersoManual 8 | 9 | import Lean.Parser.Term 10 | 11 | import Manual.Meta 12 | 13 | open Verso.Genre Manual 14 | open Verso.Genre.Manual.InlineLean 15 | 16 | set_option pp.rawOnError true 17 | 18 | set_option linter.unusedVariables false 19 | 20 | #doc (Manual) "Simplification" => 21 | %%% 22 | tag := "simp-tactics" 23 | %%% 24 | 25 | The simplifier is described in greater detail in {ref "the-simplifier"}[its dedicated chapter]. 26 | 27 | :::tactic "simp" 28 | ::: 29 | 30 | :::tactic "simp!" 31 | ::: 32 | 33 | :::tactic "simp?" 34 | ::: 35 | 36 | :::tactic "simp?!" 37 | ::: 38 | 39 | :::tactic "simp_arith" 40 | ::: 41 | 42 | :::tactic "simp_arith!" 43 | ::: 44 | 45 | :::tactic "dsimp" 46 | ::: 47 | 48 | :::tactic "dsimp!" 49 | ::: 50 | 51 | :::tactic "dsimp?" 52 | ::: 53 | 54 | :::tactic "dsimp?!" 55 | ::: 56 | 57 | 58 | :::tactic "simp_all" 59 | ::: 60 | 61 | :::tactic "simp_all!" 62 | ::: 63 | 64 | :::tactic "simp_all?" 65 | ::: 66 | 67 | :::tactic "simp_all?!" 68 | ::: 69 | 70 | 71 | :::tactic "simp_all_arith" 72 | ::: 73 | 74 | 75 | :::tactic "simp_all_arith!" 76 | ::: 77 | 78 | 79 | :::tactic "simpa" 80 | ::: 81 | 82 | 83 | :::tactic "simpa!" 84 | ::: 85 | 86 | :::tactic "simpa?" 87 | ::: 88 | 89 | :::tactic "simpa?!" 90 | ::: 91 | 92 | :::tactic "simp_wf" 93 | ::: 94 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Lean Language Reference 2 | 3 | The Lean Language Reference is intended as a comprehensive, precise description of Lean. It is first and foremost a reference work in which Lean users can look up detailed information, rather than a tutorial for new users. 4 | 5 | This new reference has been rebuilt from the ground up in Verso. This means that all example code is type checked, the source code contains tests to ensure that it stays up-to-date with respect to changes in Lean, and we can add any features that we need to improve the documentation. Verso also makes it easy to integrate tightly with Lean, so we can show function docstrings directly, mechanically check descriptions of syntax against the actual parser, and insert cross-references automatically. 6 | 7 | 8 | ## Reading the Manual 9 | 10 | The latest release of this reference manual can be read [here](https://lean-lang.org/doc/reference/latest/). 11 | 12 | For developers: 13 | * The output of building the current state of the `nightly-testing` branch can be read [here](https://lean-reference-manual-review.netlify.app/). 14 | * Each pull request in this repository causes two separate previews to be generated, one with extra information that's only useful to those actively working on the text, such as TODO notes and symbol coverage progress bars. These are posted by a bot to the PR after the first successful build. 15 | 16 | ## Building the Reference Manual Locally 17 | 18 | This reference manual contains figures that are built from LaTeX sources. To build them, you'll need the following: 19 | * A LaTeX installation, including LuaLaTeX and the following packages from TeXLive: 20 | + `scheme-minimal` 21 | + `latex-bin` 22 | + `fontspec` 23 | + `standalone` 24 | + `pgf` 25 | + `pdftexcmds` 26 | + `luatex85` 27 | + `lualatex-math` 28 | + `infwarerr` 29 | + `ltxcmds` 30 | + `xcolor` 31 | + `fontawesome` 32 | + `spath3` 33 | + `inter` 34 | + `epstopdf-pkg` 35 | + `tex-gyre` 36 | + `tex-gyre-math` 37 | + `unicode-math` 38 | + `amsmath` 39 | + `sourcecodepro` 40 | * `pdftocairo`, which can be found in the `poppler-utils` package on Debian-derived systems and the `poppler` package in Homebrew 41 | 42 | Additionally, to run the style checker locally, you'll need [Vale](https://vale.sh/). It runs in CI, so this is not a necessary step to contribute. 43 | 44 | To build the manual, run the following command: 45 | 46 | ``` 47 | lake exe generate-manual --depth 2 48 | ``` 49 | 50 | Then run a local web server on its output: 51 | ``` 52 | python3 ./server.py 8880 & 53 | ``` 54 | 55 | Then open in your browser. 56 | 57 | ## Contributing 58 | 59 | Please see [CONTRIBUTING.md](CONTRIBUTING.md) for more information. 60 | 61 | -------------------------------------------------------------------------------- /deploy/build.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | lake build 4 | -------------------------------------------------------------------------------- /deploy/generate.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | lake --quiet exe generate-manual --depth 2 --verbose --without-html-single --output "html" 4 | -------------------------------------------------------------------------------- /deploy/prep.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | sudo apt update && sudo apt install -y poppler-utils 4 | -------------------------------------------------------------------------------- /figures.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # FIXME: The Lake config doesn't seem to always build the figures. For now, this is a hack to work 4 | # around it, but it should be fixed when deadlines are over. 5 | 6 | shopt -s nullglob 7 | 8 | cd figures || exit 9 | for f in *.tex; do 10 | stem=${f%.*} 11 | lualatex "$stem" 12 | lualatex "$stem" 13 | lualatex "$stem" 14 | lualatex "$stem" 15 | pdftocairo -svg "$stem.pdf" "$stem.svg" 16 | done 17 | 18 | cd .. 19 | mkdir -p static/figures 20 | cp figures/*.pdf static/figures/ 21 | cp figures/*.svg static/figures/ 22 | -------------------------------------------------------------------------------- /figures/array.tex: -------------------------------------------------------------------------------- 1 | \documentclass{standalone} 2 | \usepackage{fontspec} 3 | \usepackage{sourcecodepro} 4 | \usepackage{tikz} 5 | 6 | \setmainfont{TeX Gyre Heros} 7 | \setmonofont{Source Code Pro} 8 | 9 | \usetikzlibrary{matrix, positioning, decorations.pathreplacing, calligraphy} 10 | 11 | \tikzset{ 12 | layout/.style={ 13 | matrix of nodes, 14 | thick, 15 | row sep=-\pgflinewidth, 16 | %column sep=-\pgflinewidth, 17 | column sep=2pt, 18 | nodes={rectangle, draw=black, align=center, font=\ttfamily}, 19 | minimum height=1.5em, 20 | text depth=0.5ex, 21 | text height=2ex, 22 | nodes in empty cells, 23 | }, 24 | descr/.style={ 25 | matrix of nodes, 26 | row sep=-\pgflinewidth, 27 | column sep=-\pgflinewidth, 28 | nodes={rectangle, align=right, draw=black}, 29 | minimum height=1.5em, 30 | text depth=0.5ex, 31 | text height=2ex, 32 | nodes in empty cells, 33 | column 1/.style={anchor=base east}, 34 | }, 35 | header/.style={ 36 | text width=10em 37 | }, 38 | sizet/.style={ 39 | text width=6.5em 40 | }, 41 | arr/.style={ 42 | text width=10em 43 | }, 44 | legend/.style={ 45 | decorate, decoration={calligraphic brace, amplitude=10pt, mirror}, line width=0.5pt, 46 | % node options 47 | align=center, midway, below 48 | } 49 | } 50 | 51 | \begin{document} 52 | \begin{tikzpicture} 53 | \matrix (array) [layout] { 54 | \node[header](array-1-1){m\_header}; & \node[sizet](array-1-2){m\_size}; & \node[sizet](array-1-3){m\_capacity}; & \node[arr](array-1-4){m\_data}; \\ 55 | }; 56 | \draw[legend] ([yshift=-2pt] array-1-1.south west) -- ([yshift=-2pt]array-1-1.south east) node [midway, below, yshift=-1em] {Lean object header}; 57 | \draw[legend] ([yshift=-2pt]array-1-2.south west) -- ([yshift=-2pt]array-1-2.south east) node [align=center,midway, below, yshift=-1em] {Size\\\texttt{size\_t}}; 58 | \draw[legend] ([yshift=-2pt]array-1-3.south west) -- ([yshift=-2pt]array-1-3.south east) node [midway, below, yshift=-1em] {Allocated space\\\texttt{size\_t}}; 59 | \draw[legend] ([yshift=-2pt]array-1-4.south west) -- ([yshift=-2pt]array-1-4.south east) node [midway, below, yshift=-1em] {Array data\\\texttt{lean\_object *} array}; 60 | \end{tikzpicture} 61 | \end{document} 62 | 63 | % Local Variables: 64 | % TeX-engine: luatex 65 | % End: 66 | -------------------------------------------------------------------------------- /figures/coe-chain.tex: -------------------------------------------------------------------------------- 1 | \documentclass{standalone} 2 | \usepackage{fontspec} 3 | \usepackage{sourcecodepro} 4 | \usepackage{tikz} 5 | \usepackage{unicode-math} 6 | 7 | \setmainfont{TeX Gyre Heros} 8 | \setmonofont{Source Code Pro} 9 | \setmathfont{TeX Gyre Schola Math} 10 | 11 | 12 | \usetikzlibrary{matrix, positioning, decorations.pathreplacing, calligraphy, calc} 13 | 14 | \tikzset{ 15 | layout/.style={ 16 | matrix of nodes, 17 | row sep=-\pgflinewidth, 18 | %column sep=-\pgflinewidth, 19 | column sep=2pt, 20 | nodes={rectangle, align=center, font=\ttfamily, text depth=0.25ex, text height=1em}, 21 | minimum height=1.5em, 22 | text depth=0.5ex, 23 | text height=2ex, 24 | nodes in empty cells, 25 | }, 26 | cls/.style={rectangle, align=center, font=\ttfamily, text depth=0.25ex, text height=1em}, 27 | arr/.style={ 28 | text width=10em 29 | }, 30 | slegend/.style={ 31 | decorate, decoration={calligraphic brace, amplitude=3pt, mirror}, line width=0.5pt, 32 | % node options 33 | align=center, midway, below, font=\ttfamily 34 | }, 35 | legend/.style={ 36 | decorate, decoration={calligraphic brace, amplitude=5pt, mirror}, line width=0.5pt, 37 | % node options 38 | align=center, midway, below, font=\ttfamily, text depth=0.25ex, text height=1em 39 | } 40 | } 41 | 42 | \begin{document} 43 | \begin{tikzpicture} 44 | \matrix (string) [layout] { % 45 | \node[](string-1-1){CoeHead$?$}; & \node[](string-1-2){CoeOut$^*$}; & \node[](string-1-3){Coe$^*$}; & \node[](string-1-4){CoeTail$?$};&\\% 46 | }; 47 | \draw[slegend] ([yshift=-2pt]string-1-3.south west) -- ([yshift=-2pt]string-1-3.south east) node (coetc) [midway, below, yshift=-0.3em] {CoeTC}; 48 | \draw[legend] ([yshift=-2.5em]string-1-2.south west) -- ([yshift=-2.5em]string-1-3.south east) node (coeotc) [midway, below, yshift=-0.5em] {CoeOTC}; 49 | \draw[legend] ([yshift=-5em]string-1-1.south west) -- ([yshift=-5em]string-1-3.south east) node (coehtc) [midway, below, yshift=-0.5em] {CoeHTC}; 50 | \draw[legend] ([yshift=-7.5em]string-1-1.south west) -- ([yshift=-7.5em]string-1-4.south east) node (coehtct) [midway, below, yshift=-0.5em] {CoeHTCT}; 51 | \node[cls, right=9em of coehtct](coedep){CoeDep}; 52 | \node(or) at ([yshift=-1.5em] $(coehtct)!0.5!(coedep)$){\textit{or}}; 53 | \draw (coehtct.south) |- (or.west); 54 | \draw (coedep.south) |- (or.east); 55 | \node[cls, below=1em of or](coet){CoeT}; 56 | \draw (or.south) -- (coet.north); 57 | \end{tikzpicture} 58 | \end{document} 59 | 60 | % Local Variables: 61 | % TeX-engine: luatex 62 | % End: 63 | -------------------------------------------------------------------------------- /figures/string.tex: -------------------------------------------------------------------------------- 1 | \documentclass{standalone} 2 | \usepackage{fontspec} 3 | \usepackage{sourcecodepro} 4 | \usepackage{tikz} 5 | 6 | \setmainfont{TeX Gyre Heros} 7 | \setmonofont{Source Code Pro} 8 | 9 | \usetikzlibrary{matrix, positioning, decorations.pathreplacing, calligraphy} 10 | 11 | \tikzset{ 12 | layout/.style={ 13 | matrix of nodes, 14 | thick, 15 | row sep=-\pgflinewidth, 16 | %column sep=-\pgflinewidth, 17 | column sep=2pt, 18 | nodes={rectangle, draw=black, align=center, font=\ttfamily}, 19 | minimum height=1.5em, 20 | text depth=0.5ex, 21 | text height=2ex, 22 | nodes in empty cells, 23 | }, 24 | descr/.style={ 25 | matrix of nodes, 26 | row sep=-\pgflinewidth, 27 | column sep=-\pgflinewidth, 28 | nodes={rectangle, align=right, draw=black}, 29 | minimum height=1.5em, 30 | text depth=0.5ex, 31 | text height=2ex, 32 | nodes in empty cells, 33 | column 1/.style={anchor=base east}, 34 | }, 35 | header/.style={ 36 | text width=10em 37 | }, 38 | sizet/.style={ 39 | text width=6.5em 40 | }, 41 | arr/.style={ 42 | text width=10em 43 | }, 44 | legend/.style={ 45 | decorate, decoration={calligraphic brace, amplitude=10pt, mirror}, line width=0.5pt, 46 | % node options 47 | align=center, midway, below 48 | } 49 | } 50 | 51 | \begin{document} 52 | \begin{tikzpicture} 53 | \matrix (string) [layout] { 54 | \node[header](string-1-1){m\_header}; & \node[sizet](string-1-2){m\_size}; & \node[sizet](string-1-3){m\_capacity}; & \node[sizet](string-1-4){m\_length}; & \node[arr](string-1-5){m\_data}; & '\textbackslash{}0'\\ 55 | }; 56 | \draw[legend] ([yshift=-2pt] string-1-1.south west) -- ([yshift=-2pt]string-1-1.south east) node [midway, below, yshift=-1em] {Lean object header}; 57 | \draw[legend] ([yshift=-2pt]string-1-2.south west) -- ([yshift=-2pt]string-1-2.south east) node [align=center,midway, below, yshift=-1em] {Byte count\\\texttt{size\_t}}; 58 | \draw[legend] ([yshift=-2pt]string-1-3.south west) -- ([yshift=-2pt]string-1-3.south east) node [midway, below, yshift=-1em] {Allocated space\\\texttt{size\_t}}; 59 | \draw[legend] ([yshift=-2pt]string-1-4.south west) -- ([yshift=-2pt]string-1-4.south east) node [midway, below, yshift=-1em] {Characters\\\texttt{size\_t}}; 60 | \draw[legend] ([yshift=-2pt]string-1-5.south west) -- ([yshift=-2pt]string-1-5.south east) node [midway, below, yshift=-1em] {String data\\\texttt{char} array}; 61 | \end{tikzpicture} 62 | \end{document} 63 | 64 | % Local Variables: 65 | % TeX-engine: luatex 66 | % End: 67 | -------------------------------------------------------------------------------- /figures/thunk.tex: -------------------------------------------------------------------------------- 1 | \documentclass{standalone} 2 | \usepackage{fontspec} 3 | \usepackage{sourcecodepro} 4 | \usepackage{tikz} 5 | 6 | \setmainfont{TeX Gyre Heros} 7 | \setmonofont{Source Code Pro} 8 | 9 | \usetikzlibrary{matrix, positioning, decorations.pathreplacing, calligraphy} 10 | 11 | \tikzset{ 12 | layout/.style={ 13 | matrix of nodes, 14 | thick, 15 | row sep=-\pgflinewidth, 16 | %column sep=-\pgflinewidth, 17 | column sep=2pt, 18 | nodes={rectangle, draw=black, align=center, font=\ttfamily}, 19 | minimum height=1.5em, 20 | text depth=0.5ex, 21 | text height=2ex, 22 | nodes in empty cells, 23 | }, 24 | descr/.style={ 25 | matrix of nodes, 26 | row sep=-\pgflinewidth, 27 | column sep=-\pgflinewidth, 28 | nodes={rectangle, align=right, draw=black}, 29 | minimum height=1.5em, 30 | text depth=0.5ex, 31 | text height=2ex, 32 | nodes in empty cells, 33 | column 1/.style={anchor=base east}, 34 | }, 35 | header/.style={ 36 | text width=10em 37 | }, 38 | sizet/.style={ 39 | text width=10em 40 | }, 41 | arr/.style={ 42 | text width=10em 43 | }, 44 | legend/.style={ 45 | decorate, decoration={calligraphic brace, amplitude=10pt, mirror}, line width=0.5pt, 46 | % node options 47 | align=center, midway, below 48 | } 49 | } 50 | 51 | \begin{document} 52 | \begin{tikzpicture} 53 | \matrix (string) [layout] { 54 | \node[header](string-1-1){m\_header}; & \node[sizet](string-1-2){m\_value}; & \node[sizet](string-1-3){m\_closure}; \\ 55 | }; 56 | \draw[legend] ([yshift=-2pt] string-1-1.south west) -- ([yshift=-2pt]string-1-1.south east) node [midway, below, yshift=-1em] {Lean object header}; 57 | \draw[legend] ([yshift=-2pt]string-1-2.south west) -- ([yshift=-2pt]string-1-2.south east) node [align=center,midway, below, yshift=-1em] {Saved value\\\texttt{lean\_object *}}; 58 | \draw[legend] ([yshift=-2pt]string-1-3.south west) -- ([yshift=-2pt]string-1-3.south east) node [midway, below, yshift=-1em] {Closure\\\texttt{lean\_object *}}; 59 | \end{tikzpicture} 60 | \end{document} 61 | 62 | % Local Variables: 63 | % TeX-engine: luatex 64 | % End: 65 | -------------------------------------------------------------------------------- /flake.lock: -------------------------------------------------------------------------------- 1 | { 2 | "nodes": { 3 | "nixpkgs": { 4 | "locked": { 5 | "lastModified": 1736243181, 6 | "narHash": "sha256-yaAZO4ttZ3q9/U0zFVtzpVGO6B8+DMpshnF1+0E5Kkg=", 7 | "owner": "NixOS", 8 | "repo": "nixpkgs", 9 | "rev": "8bcd7d056d69e2e6c47ddf40c2c401cb173c0d67", 10 | "type": "github" 11 | }, 12 | "original": { 13 | "owner": "NixOS", 14 | "ref": "master", 15 | "repo": "nixpkgs", 16 | "type": "github" 17 | } 18 | }, 19 | "root": { 20 | "inputs": { 21 | "nixpkgs": "nixpkgs" 22 | } 23 | } 24 | }, 25 | "root": "root", 26 | "version": 7 27 | } 28 | -------------------------------------------------------------------------------- /flake.nix: -------------------------------------------------------------------------------- 1 | { 2 | inputs.nixpkgs.url = "github:NixOS/nixpkgs/master"; 3 | outputs = { self, nixpkgs }: 4 | let 5 | system = "x86_64-linux"; 6 | pkgs = import nixpkgs { inherit system; }; 7 | in 8 | { devShell.${system} = pkgs.stdenv.mkDerivation rec { 9 | name = "env"; 10 | buildInputs = with pkgs; [ 11 | elan 12 | python3 13 | ]; 14 | };}; 15 | } 16 | -------------------------------------------------------------------------------- /lake-manifest.json: -------------------------------------------------------------------------------- 1 | {"version": "1.1.0", 2 | "packagesDir": ".lake/packages", 3 | "packages": 4 | [{"url": "https://github.com/leanprover/verso.git", 5 | "type": "git", 6 | "subDir": null, 7 | "scope": "", 8 | "rev": "5ff418fa7932b3eefcc8858746ab5c52a0deb4f4", 9 | "name": "verso", 10 | "manifestFile": "lake-manifest.json", 11 | "inputRev": "main", 12 | "inherited": false, 13 | "configFile": "lakefile.lean"}, 14 | {"url": "https://github.com/acmepjz/md4lean", 15 | "type": "git", 16 | "subDir": null, 17 | "scope": "", 18 | "rev": "8ba0ef10d178ab95a5d6fe3cfbd586c6ecef2717", 19 | "name": "MD4Lean", 20 | "manifestFile": "lake-manifest.json", 21 | "inputRev": "main", 22 | "inherited": false, 23 | "configFile": "lakefile.lean"}, 24 | {"url": "https://github.com/leanprover/subverso", 25 | "type": "git", 26 | "subDir": null, 27 | "scope": "", 28 | "rev": "ee3f1993484407f46c3950301303417fecf930f2", 29 | "name": "subverso", 30 | "manifestFile": "lake-manifest.json", 31 | "inputRev": "main", 32 | "inherited": true, 33 | "configFile": "lakefile.lean"}], 34 | "name": "«verso-manual»", 35 | "lakeDir": ".lake"} 36 | -------------------------------------------------------------------------------- /lean-toolchain: -------------------------------------------------------------------------------- 1 | leanprover/lean4:v4.21.0-rc3 2 | -------------------------------------------------------------------------------- /server.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | # This wrapper turns off the Python HTTP server's overly aggressive 4 | # cache headers, which can get in the way of Verso hovers. 5 | 6 | from http import server # Python 3 7 | from http.server import ThreadingHTTPServer, test 8 | import os 9 | 10 | 11 | class NonCachingHTTPRequestHandler(server.SimpleHTTPRequestHandler): 12 | def end_headers(self): 13 | self.send_my_headers() 14 | server.SimpleHTTPRequestHandler.end_headers(self) 15 | 16 | def send_my_headers(self): 17 | self.send_header("Cache-Control", "no-cache, no-store, must-revalidate") 18 | self.send_header("Pragma", "no-cache") 19 | self.send_header("Expires", "0") 20 | 21 | if __name__ == '__main__': 22 | import argparse 23 | import contextlib 24 | 25 | parser = argparse.ArgumentParser() 26 | parser.add_argument('-b', '--bind', metavar='ADDRESS', 27 | help='bind to this address ' 28 | '(default: all interfaces)') 29 | parser.add_argument('-d', '--directory', default="_out/html-multi", 30 | help='serve this directory ' 31 | '(default: _out/html-multi)') 32 | parser.add_argument('-p', '--protocol', metavar='VERSION', 33 | default='HTTP/1.0', 34 | help='conform to this HTTP version ' 35 | '(default: %(default)s)') 36 | parser.add_argument('port', default=8000, type=int, nargs='?', 37 | help='bind to this port ' 38 | '(default: %(default)s)') 39 | args = parser.parse_args() 40 | 41 | # ensure dual-stack is not disabled; ref #38907 42 | class DualStackServer(ThreadingHTTPServer): 43 | 44 | def server_bind(self): 45 | # suppress exception when protocol is IPv4 46 | with contextlib.suppress(Exception): 47 | self.socket.setsockopt( 48 | socket.IPPROTO_IPV6, socket.IPV6_V6ONLY, 0) 49 | return super().server_bind() 50 | 51 | def finish_request(self, request, client_address): 52 | self.RequestHandlerClass(request, client_address, self, 53 | directory=args.directory) 54 | 55 | print(args) 56 | 57 | test( 58 | HandlerClass=NonCachingHTTPRequestHandler, 59 | ServerClass=DualStackServer, 60 | port=args.port, 61 | bind=args.bind, 62 | protocol=args.protocol, 63 | ) 64 | -------------------------------------------------------------------------------- /static/README.txt: -------------------------------------------------------------------------------- 1 | The directory `katex` contains KaTeX v0.16.11 (MIT license) 2 | -------------------------------------------------------------------------------- /static/colors.css: -------------------------------------------------------------------------------- 1 | /* CSS variables for each Lean branding color */ 2 | :root { 3 | /* Main color palette */ 4 | --lean-black: #000000; 5 | --lean-white: #ffffff; 6 | --lean-blue: #0073a3; 7 | 8 | /* Accent color palette */ 9 | /* This light blue should only be used as a background, and any text 10 | on it should be black to ensure sufficient contrast. */ 11 | --lean-accent-light-blue: #b0c5cd; 12 | /* This orange should be used only as an accent in small amounts. No 13 | small type. Bold subhead or larger for typography.*/ 14 | --lean-accent-orange: #f15732; 15 | 16 | /* Non-branding colors */ 17 | /* These colors should never be used as actual brand colors, but they 18 | are complementary to our colors and can be used for elements in 19 | presentations or charts or other peripheral materials. They are 20 | only to be used as an accent or a complementary design element, 21 | never as Lean branding. */ 22 | --lean-compl-orangered: #F15732; 23 | --lean-compl-yellow: #FDC05F; 24 | --lean-compl-green: #699E88; 25 | --lean-compl-bluegray: #A9C7C9; 26 | --lean-compl-darkgray: #354140; 27 | --lean-compl-gray: #96A0A5; 28 | --lean-compl-pink: #F05665; 29 | --lean-compl-lightpink: #F7A8B0; 30 | --lean-compl-darkblue: #005E7D; 31 | --lean-compl-turquoise: #48C6E2; 32 | } 33 | -------------------------------------------------------------------------------- /static/fonts/noto-sans-mono/NotoSansMono-VariableFont_wdth,wght.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/noto-sans-mono/NotoSansMono-VariableFont_wdth,wght.ttf -------------------------------------------------------------------------------- /static/fonts/noto-sans-mono/noto-sans-mono.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: 'Noto Sans Mono'; 3 | font-style: normal; 4 | font-display: swap; 5 | font-weight: 100 900; 6 | src: url('./NotoSansMono-VariableFont_wdth,wght.ttf') format('truetype'); 7 | unicode-range: U+207a-207F, U+208a-208f, U+2090-209c; 8 | } 9 | 10 | @font-face { 11 | font-family: 'Noto Sans Mono'; 12 | font-style: italic; 13 | font-display: swap; 14 | font-weight: 100 900; 15 | src: url('./NotoSansMono-VariableFont_wdth,wght.ttf') format('truetype'); 16 | unicode-range: U+207a-207F, U+208a-208f, U+2090-209c; 17 | } -------------------------------------------------------------------------------- /static/fonts/source-code-pro/OTF/SourceCodePro-Black.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-code-pro/OTF/SourceCodePro-Black.otf -------------------------------------------------------------------------------- /static/fonts/source-code-pro/OTF/SourceCodePro-BlackIt.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-code-pro/OTF/SourceCodePro-BlackIt.otf -------------------------------------------------------------------------------- /static/fonts/source-code-pro/OTF/SourceCodePro-Bold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-code-pro/OTF/SourceCodePro-Bold.otf -------------------------------------------------------------------------------- /static/fonts/source-code-pro/OTF/SourceCodePro-BoldIt.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-code-pro/OTF/SourceCodePro-BoldIt.otf -------------------------------------------------------------------------------- /static/fonts/source-code-pro/OTF/SourceCodePro-ExtraLight.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-code-pro/OTF/SourceCodePro-ExtraLight.otf -------------------------------------------------------------------------------- /static/fonts/source-code-pro/OTF/SourceCodePro-ExtraLightIt.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-code-pro/OTF/SourceCodePro-ExtraLightIt.otf -------------------------------------------------------------------------------- /static/fonts/source-code-pro/OTF/SourceCodePro-It.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-code-pro/OTF/SourceCodePro-It.otf -------------------------------------------------------------------------------- /static/fonts/source-code-pro/OTF/SourceCodePro-Light.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-code-pro/OTF/SourceCodePro-Light.otf -------------------------------------------------------------------------------- /static/fonts/source-code-pro/OTF/SourceCodePro-LightIt.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-code-pro/OTF/SourceCodePro-LightIt.otf -------------------------------------------------------------------------------- /static/fonts/source-code-pro/OTF/SourceCodePro-Medium.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-code-pro/OTF/SourceCodePro-Medium.otf -------------------------------------------------------------------------------- /static/fonts/source-code-pro/OTF/SourceCodePro-MediumIt.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-code-pro/OTF/SourceCodePro-MediumIt.otf -------------------------------------------------------------------------------- /static/fonts/source-code-pro/OTF/SourceCodePro-Regular.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-code-pro/OTF/SourceCodePro-Regular.otf -------------------------------------------------------------------------------- /static/fonts/source-code-pro/OTF/SourceCodePro-Semibold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-code-pro/OTF/SourceCodePro-Semibold.otf -------------------------------------------------------------------------------- /static/fonts/source-code-pro/OTF/SourceCodePro-SemiboldIt.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-code-pro/OTF/SourceCodePro-SemiboldIt.otf -------------------------------------------------------------------------------- /static/fonts/source-code-pro/TTF/SourceCodePro-Black.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-code-pro/TTF/SourceCodePro-Black.ttf -------------------------------------------------------------------------------- /static/fonts/source-code-pro/TTF/SourceCodePro-BlackIt.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-code-pro/TTF/SourceCodePro-BlackIt.ttf -------------------------------------------------------------------------------- /static/fonts/source-code-pro/TTF/SourceCodePro-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-code-pro/TTF/SourceCodePro-Bold.ttf -------------------------------------------------------------------------------- /static/fonts/source-code-pro/TTF/SourceCodePro-BoldIt.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-code-pro/TTF/SourceCodePro-BoldIt.ttf -------------------------------------------------------------------------------- /static/fonts/source-code-pro/TTF/SourceCodePro-ExtraLight.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-code-pro/TTF/SourceCodePro-ExtraLight.ttf -------------------------------------------------------------------------------- /static/fonts/source-code-pro/TTF/SourceCodePro-ExtraLightIt.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-code-pro/TTF/SourceCodePro-ExtraLightIt.ttf -------------------------------------------------------------------------------- /static/fonts/source-code-pro/TTF/SourceCodePro-It.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-code-pro/TTF/SourceCodePro-It.ttf -------------------------------------------------------------------------------- /static/fonts/source-code-pro/TTF/SourceCodePro-Light.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-code-pro/TTF/SourceCodePro-Light.ttf -------------------------------------------------------------------------------- /static/fonts/source-code-pro/TTF/SourceCodePro-LightIt.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-code-pro/TTF/SourceCodePro-LightIt.ttf -------------------------------------------------------------------------------- /static/fonts/source-code-pro/TTF/SourceCodePro-Medium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-code-pro/TTF/SourceCodePro-Medium.ttf -------------------------------------------------------------------------------- /static/fonts/source-code-pro/TTF/SourceCodePro-MediumIt.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-code-pro/TTF/SourceCodePro-MediumIt.ttf -------------------------------------------------------------------------------- /static/fonts/source-code-pro/TTF/SourceCodePro-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-code-pro/TTF/SourceCodePro-Regular.ttf -------------------------------------------------------------------------------- /static/fonts/source-code-pro/TTF/SourceCodePro-Semibold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-code-pro/TTF/SourceCodePro-Semibold.ttf -------------------------------------------------------------------------------- /static/fonts/source-code-pro/TTF/SourceCodePro-SemiboldIt.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-code-pro/TTF/SourceCodePro-SemiboldIt.ttf -------------------------------------------------------------------------------- /static/fonts/source-code-pro/WOFF/OTF/SourceCodePro-Black.otf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-code-pro/WOFF/OTF/SourceCodePro-Black.otf.woff -------------------------------------------------------------------------------- /static/fonts/source-code-pro/WOFF/OTF/SourceCodePro-BlackIt.otf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-code-pro/WOFF/OTF/SourceCodePro-BlackIt.otf.woff -------------------------------------------------------------------------------- /static/fonts/source-code-pro/WOFF/OTF/SourceCodePro-Bold.otf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-code-pro/WOFF/OTF/SourceCodePro-Bold.otf.woff -------------------------------------------------------------------------------- /static/fonts/source-code-pro/WOFF/OTF/SourceCodePro-BoldIt.otf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-code-pro/WOFF/OTF/SourceCodePro-BoldIt.otf.woff -------------------------------------------------------------------------------- /static/fonts/source-code-pro/WOFF/OTF/SourceCodePro-ExtraLight.otf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-code-pro/WOFF/OTF/SourceCodePro-ExtraLight.otf.woff -------------------------------------------------------------------------------- /static/fonts/source-code-pro/WOFF/OTF/SourceCodePro-ExtraLightIt.otf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-code-pro/WOFF/OTF/SourceCodePro-ExtraLightIt.otf.woff -------------------------------------------------------------------------------- /static/fonts/source-code-pro/WOFF/OTF/SourceCodePro-It.otf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-code-pro/WOFF/OTF/SourceCodePro-It.otf.woff -------------------------------------------------------------------------------- /static/fonts/source-code-pro/WOFF/OTF/SourceCodePro-Light.otf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-code-pro/WOFF/OTF/SourceCodePro-Light.otf.woff -------------------------------------------------------------------------------- /static/fonts/source-code-pro/WOFF/OTF/SourceCodePro-LightIt.otf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-code-pro/WOFF/OTF/SourceCodePro-LightIt.otf.woff -------------------------------------------------------------------------------- /static/fonts/source-code-pro/WOFF/OTF/SourceCodePro-Medium.otf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-code-pro/WOFF/OTF/SourceCodePro-Medium.otf.woff -------------------------------------------------------------------------------- /static/fonts/source-code-pro/WOFF/OTF/SourceCodePro-MediumIt.otf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-code-pro/WOFF/OTF/SourceCodePro-MediumIt.otf.woff -------------------------------------------------------------------------------- /static/fonts/source-code-pro/WOFF/OTF/SourceCodePro-Regular.otf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-code-pro/WOFF/OTF/SourceCodePro-Regular.otf.woff -------------------------------------------------------------------------------- /static/fonts/source-code-pro/WOFF/OTF/SourceCodePro-Semibold.otf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-code-pro/WOFF/OTF/SourceCodePro-Semibold.otf.woff -------------------------------------------------------------------------------- /static/fonts/source-code-pro/WOFF/OTF/SourceCodePro-SemiboldIt.otf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-code-pro/WOFF/OTF/SourceCodePro-SemiboldIt.otf.woff -------------------------------------------------------------------------------- /static/fonts/source-code-pro/WOFF/TTF/SourceCodePro-Black.ttf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-code-pro/WOFF/TTF/SourceCodePro-Black.ttf.woff -------------------------------------------------------------------------------- /static/fonts/source-code-pro/WOFF/TTF/SourceCodePro-BlackIt.ttf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-code-pro/WOFF/TTF/SourceCodePro-BlackIt.ttf.woff -------------------------------------------------------------------------------- /static/fonts/source-code-pro/WOFF/TTF/SourceCodePro-Bold.ttf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-code-pro/WOFF/TTF/SourceCodePro-Bold.ttf.woff -------------------------------------------------------------------------------- /static/fonts/source-code-pro/WOFF/TTF/SourceCodePro-BoldIt.ttf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-code-pro/WOFF/TTF/SourceCodePro-BoldIt.ttf.woff -------------------------------------------------------------------------------- /static/fonts/source-code-pro/WOFF/TTF/SourceCodePro-ExtraLight.ttf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-code-pro/WOFF/TTF/SourceCodePro-ExtraLight.ttf.woff -------------------------------------------------------------------------------- /static/fonts/source-code-pro/WOFF/TTF/SourceCodePro-ExtraLightIt.ttf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-code-pro/WOFF/TTF/SourceCodePro-ExtraLightIt.ttf.woff -------------------------------------------------------------------------------- /static/fonts/source-code-pro/WOFF/TTF/SourceCodePro-It.ttf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-code-pro/WOFF/TTF/SourceCodePro-It.ttf.woff -------------------------------------------------------------------------------- /static/fonts/source-code-pro/WOFF/TTF/SourceCodePro-Light.ttf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-code-pro/WOFF/TTF/SourceCodePro-Light.ttf.woff -------------------------------------------------------------------------------- /static/fonts/source-code-pro/WOFF/TTF/SourceCodePro-LightIt.ttf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-code-pro/WOFF/TTF/SourceCodePro-LightIt.ttf.woff -------------------------------------------------------------------------------- /static/fonts/source-code-pro/WOFF/TTF/SourceCodePro-Medium.ttf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-code-pro/WOFF/TTF/SourceCodePro-Medium.ttf.woff -------------------------------------------------------------------------------- /static/fonts/source-code-pro/WOFF/TTF/SourceCodePro-MediumIt.ttf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-code-pro/WOFF/TTF/SourceCodePro-MediumIt.ttf.woff -------------------------------------------------------------------------------- /static/fonts/source-code-pro/WOFF/TTF/SourceCodePro-Regular.ttf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-code-pro/WOFF/TTF/SourceCodePro-Regular.ttf.woff -------------------------------------------------------------------------------- /static/fonts/source-code-pro/WOFF/TTF/SourceCodePro-Semibold.ttf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-code-pro/WOFF/TTF/SourceCodePro-Semibold.ttf.woff -------------------------------------------------------------------------------- /static/fonts/source-code-pro/WOFF/TTF/SourceCodePro-SemiboldIt.ttf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-code-pro/WOFF/TTF/SourceCodePro-SemiboldIt.ttf.woff -------------------------------------------------------------------------------- /static/fonts/source-code-pro/WOFF2/OTF/SourceCodePro-Black.otf.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-code-pro/WOFF2/OTF/SourceCodePro-Black.otf.woff2 -------------------------------------------------------------------------------- /static/fonts/source-code-pro/WOFF2/OTF/SourceCodePro-BlackIt.otf.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-code-pro/WOFF2/OTF/SourceCodePro-BlackIt.otf.woff2 -------------------------------------------------------------------------------- /static/fonts/source-code-pro/WOFF2/OTF/SourceCodePro-Bold.otf.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-code-pro/WOFF2/OTF/SourceCodePro-Bold.otf.woff2 -------------------------------------------------------------------------------- /static/fonts/source-code-pro/WOFF2/OTF/SourceCodePro-BoldIt.otf.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-code-pro/WOFF2/OTF/SourceCodePro-BoldIt.otf.woff2 -------------------------------------------------------------------------------- /static/fonts/source-code-pro/WOFF2/OTF/SourceCodePro-ExtraLight.otf.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-code-pro/WOFF2/OTF/SourceCodePro-ExtraLight.otf.woff2 -------------------------------------------------------------------------------- /static/fonts/source-code-pro/WOFF2/OTF/SourceCodePro-ExtraLightIt.otf.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-code-pro/WOFF2/OTF/SourceCodePro-ExtraLightIt.otf.woff2 -------------------------------------------------------------------------------- /static/fonts/source-code-pro/WOFF2/OTF/SourceCodePro-It.otf.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-code-pro/WOFF2/OTF/SourceCodePro-It.otf.woff2 -------------------------------------------------------------------------------- /static/fonts/source-code-pro/WOFF2/OTF/SourceCodePro-Light.otf.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-code-pro/WOFF2/OTF/SourceCodePro-Light.otf.woff2 -------------------------------------------------------------------------------- /static/fonts/source-code-pro/WOFF2/OTF/SourceCodePro-LightIt.otf.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-code-pro/WOFF2/OTF/SourceCodePro-LightIt.otf.woff2 -------------------------------------------------------------------------------- /static/fonts/source-code-pro/WOFF2/OTF/SourceCodePro-Medium.otf.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-code-pro/WOFF2/OTF/SourceCodePro-Medium.otf.woff2 -------------------------------------------------------------------------------- /static/fonts/source-code-pro/WOFF2/OTF/SourceCodePro-MediumIt.otf.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-code-pro/WOFF2/OTF/SourceCodePro-MediumIt.otf.woff2 -------------------------------------------------------------------------------- /static/fonts/source-code-pro/WOFF2/OTF/SourceCodePro-Regular.otf.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-code-pro/WOFF2/OTF/SourceCodePro-Regular.otf.woff2 -------------------------------------------------------------------------------- /static/fonts/source-code-pro/WOFF2/OTF/SourceCodePro-Semibold.otf.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-code-pro/WOFF2/OTF/SourceCodePro-Semibold.otf.woff2 -------------------------------------------------------------------------------- /static/fonts/source-code-pro/WOFF2/OTF/SourceCodePro-SemiboldIt.otf.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-code-pro/WOFF2/OTF/SourceCodePro-SemiboldIt.otf.woff2 -------------------------------------------------------------------------------- /static/fonts/source-code-pro/WOFF2/OTF/SourceCodeVF-Italic.otf.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-code-pro/WOFF2/OTF/SourceCodeVF-Italic.otf.woff2 -------------------------------------------------------------------------------- /static/fonts/source-code-pro/WOFF2/OTF/SourceCodeVF-Upright.otf.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-code-pro/WOFF2/OTF/SourceCodeVF-Upright.otf.woff2 -------------------------------------------------------------------------------- /static/fonts/source-code-pro/WOFF2/TTF/SourceCodePro-Black.ttf.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-code-pro/WOFF2/TTF/SourceCodePro-Black.ttf.woff2 -------------------------------------------------------------------------------- /static/fonts/source-code-pro/WOFF2/TTF/SourceCodePro-BlackIt.ttf.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-code-pro/WOFF2/TTF/SourceCodePro-BlackIt.ttf.woff2 -------------------------------------------------------------------------------- /static/fonts/source-code-pro/WOFF2/TTF/SourceCodePro-Bold.ttf.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-code-pro/WOFF2/TTF/SourceCodePro-Bold.ttf.woff2 -------------------------------------------------------------------------------- /static/fonts/source-code-pro/WOFF2/TTF/SourceCodePro-BoldIt.ttf.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-code-pro/WOFF2/TTF/SourceCodePro-BoldIt.ttf.woff2 -------------------------------------------------------------------------------- /static/fonts/source-code-pro/WOFF2/TTF/SourceCodePro-ExtraLight.ttf.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-code-pro/WOFF2/TTF/SourceCodePro-ExtraLight.ttf.woff2 -------------------------------------------------------------------------------- /static/fonts/source-code-pro/WOFF2/TTF/SourceCodePro-ExtraLightIt.ttf.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-code-pro/WOFF2/TTF/SourceCodePro-ExtraLightIt.ttf.woff2 -------------------------------------------------------------------------------- /static/fonts/source-code-pro/WOFF2/TTF/SourceCodePro-It.ttf.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-code-pro/WOFF2/TTF/SourceCodePro-It.ttf.woff2 -------------------------------------------------------------------------------- /static/fonts/source-code-pro/WOFF2/TTF/SourceCodePro-Light.ttf.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-code-pro/WOFF2/TTF/SourceCodePro-Light.ttf.woff2 -------------------------------------------------------------------------------- /static/fonts/source-code-pro/WOFF2/TTF/SourceCodePro-LightIt.ttf.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-code-pro/WOFF2/TTF/SourceCodePro-LightIt.ttf.woff2 -------------------------------------------------------------------------------- /static/fonts/source-code-pro/WOFF2/TTF/SourceCodePro-Medium.ttf.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-code-pro/WOFF2/TTF/SourceCodePro-Medium.ttf.woff2 -------------------------------------------------------------------------------- /static/fonts/source-code-pro/WOFF2/TTF/SourceCodePro-MediumIt.ttf.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-code-pro/WOFF2/TTF/SourceCodePro-MediumIt.ttf.woff2 -------------------------------------------------------------------------------- /static/fonts/source-code-pro/WOFF2/TTF/SourceCodePro-Regular.ttf.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-code-pro/WOFF2/TTF/SourceCodePro-Regular.ttf.woff2 -------------------------------------------------------------------------------- /static/fonts/source-code-pro/WOFF2/TTF/SourceCodePro-Semibold.ttf.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-code-pro/WOFF2/TTF/SourceCodePro-Semibold.ttf.woff2 -------------------------------------------------------------------------------- /static/fonts/source-code-pro/WOFF2/TTF/SourceCodePro-SemiboldIt.ttf.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-code-pro/WOFF2/TTF/SourceCodePro-SemiboldIt.ttf.woff2 -------------------------------------------------------------------------------- /static/fonts/source-code-pro/WOFF2/TTF/SourceCodeVF-Italic.ttf.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-code-pro/WOFF2/TTF/SourceCodeVF-Italic.ttf.woff2 -------------------------------------------------------------------------------- /static/fonts/source-code-pro/WOFF2/TTF/SourceCodeVF-Upright.ttf.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-code-pro/WOFF2/TTF/SourceCodeVF-Upright.ttf.woff2 -------------------------------------------------------------------------------- /static/fonts/source-sans/OTF/SourceSans3-Black.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/OTF/SourceSans3-Black.otf -------------------------------------------------------------------------------- /static/fonts/source-sans/OTF/SourceSans3-BlackIt.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/OTF/SourceSans3-BlackIt.otf -------------------------------------------------------------------------------- /static/fonts/source-sans/OTF/SourceSans3-Bold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/OTF/SourceSans3-Bold.otf -------------------------------------------------------------------------------- /static/fonts/source-sans/OTF/SourceSans3-BoldIt.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/OTF/SourceSans3-BoldIt.otf -------------------------------------------------------------------------------- /static/fonts/source-sans/OTF/SourceSans3-ExtraLight.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/OTF/SourceSans3-ExtraLight.otf -------------------------------------------------------------------------------- /static/fonts/source-sans/OTF/SourceSans3-ExtraLightIt.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/OTF/SourceSans3-ExtraLightIt.otf -------------------------------------------------------------------------------- /static/fonts/source-sans/OTF/SourceSans3-It.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/OTF/SourceSans3-It.otf -------------------------------------------------------------------------------- /static/fonts/source-sans/OTF/SourceSans3-Light.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/OTF/SourceSans3-Light.otf -------------------------------------------------------------------------------- /static/fonts/source-sans/OTF/SourceSans3-LightIt.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/OTF/SourceSans3-LightIt.otf -------------------------------------------------------------------------------- /static/fonts/source-sans/OTF/SourceSans3-Medium.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/OTF/SourceSans3-Medium.otf -------------------------------------------------------------------------------- /static/fonts/source-sans/OTF/SourceSans3-MediumIt.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/OTF/SourceSans3-MediumIt.otf -------------------------------------------------------------------------------- /static/fonts/source-sans/OTF/SourceSans3-Regular.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/OTF/SourceSans3-Regular.otf -------------------------------------------------------------------------------- /static/fonts/source-sans/OTF/SourceSans3-Semibold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/OTF/SourceSans3-Semibold.otf -------------------------------------------------------------------------------- /static/fonts/source-sans/OTF/SourceSans3-SemiboldIt.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/OTF/SourceSans3-SemiboldIt.otf -------------------------------------------------------------------------------- /static/fonts/source-sans/TTF/SourceSans3-Black.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/TTF/SourceSans3-Black.ttf -------------------------------------------------------------------------------- /static/fonts/source-sans/TTF/SourceSans3-BlackIt.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/TTF/SourceSans3-BlackIt.ttf -------------------------------------------------------------------------------- /static/fonts/source-sans/TTF/SourceSans3-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/TTF/SourceSans3-Bold.ttf -------------------------------------------------------------------------------- /static/fonts/source-sans/TTF/SourceSans3-BoldIt.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/TTF/SourceSans3-BoldIt.ttf -------------------------------------------------------------------------------- /static/fonts/source-sans/TTF/SourceSans3-ExtraLight.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/TTF/SourceSans3-ExtraLight.ttf -------------------------------------------------------------------------------- /static/fonts/source-sans/TTF/SourceSans3-ExtraLightIt.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/TTF/SourceSans3-ExtraLightIt.ttf -------------------------------------------------------------------------------- /static/fonts/source-sans/TTF/SourceSans3-It.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/TTF/SourceSans3-It.ttf -------------------------------------------------------------------------------- /static/fonts/source-sans/TTF/SourceSans3-Light.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/TTF/SourceSans3-Light.ttf -------------------------------------------------------------------------------- /static/fonts/source-sans/TTF/SourceSans3-LightIt.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/TTF/SourceSans3-LightIt.ttf -------------------------------------------------------------------------------- /static/fonts/source-sans/TTF/SourceSans3-Medium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/TTF/SourceSans3-Medium.ttf -------------------------------------------------------------------------------- /static/fonts/source-sans/TTF/SourceSans3-MediumIt.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/TTF/SourceSans3-MediumIt.ttf -------------------------------------------------------------------------------- /static/fonts/source-sans/TTF/SourceSans3-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/TTF/SourceSans3-Regular.ttf -------------------------------------------------------------------------------- /static/fonts/source-sans/TTF/SourceSans3-Semibold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/TTF/SourceSans3-Semibold.ttf -------------------------------------------------------------------------------- /static/fonts/source-sans/TTF/SourceSans3-SemiboldIt.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/TTF/SourceSans3-SemiboldIt.ttf -------------------------------------------------------------------------------- /static/fonts/source-sans/VF/SourceSans3VF-Italic.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/VF/SourceSans3VF-Italic.otf -------------------------------------------------------------------------------- /static/fonts/source-sans/VF/SourceSans3VF-Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/VF/SourceSans3VF-Italic.ttf -------------------------------------------------------------------------------- /static/fonts/source-sans/VF/SourceSans3VF-Upright.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/VF/SourceSans3VF-Upright.otf -------------------------------------------------------------------------------- /static/fonts/source-sans/VF/SourceSans3VF-Upright.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/VF/SourceSans3VF-Upright.ttf -------------------------------------------------------------------------------- /static/fonts/source-sans/WOFF/OTF/SourceSans3-Black.otf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/WOFF/OTF/SourceSans3-Black.otf.woff -------------------------------------------------------------------------------- /static/fonts/source-sans/WOFF/OTF/SourceSans3-BlackIt.otf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/WOFF/OTF/SourceSans3-BlackIt.otf.woff -------------------------------------------------------------------------------- /static/fonts/source-sans/WOFF/OTF/SourceSans3-Bold.otf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/WOFF/OTF/SourceSans3-Bold.otf.woff -------------------------------------------------------------------------------- /static/fonts/source-sans/WOFF/OTF/SourceSans3-BoldIt.otf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/WOFF/OTF/SourceSans3-BoldIt.otf.woff -------------------------------------------------------------------------------- /static/fonts/source-sans/WOFF/OTF/SourceSans3-ExtraLight.otf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/WOFF/OTF/SourceSans3-ExtraLight.otf.woff -------------------------------------------------------------------------------- /static/fonts/source-sans/WOFF/OTF/SourceSans3-ExtraLightIt.otf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/WOFF/OTF/SourceSans3-ExtraLightIt.otf.woff -------------------------------------------------------------------------------- /static/fonts/source-sans/WOFF/OTF/SourceSans3-It.otf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/WOFF/OTF/SourceSans3-It.otf.woff -------------------------------------------------------------------------------- /static/fonts/source-sans/WOFF/OTF/SourceSans3-Light.otf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/WOFF/OTF/SourceSans3-Light.otf.woff -------------------------------------------------------------------------------- /static/fonts/source-sans/WOFF/OTF/SourceSans3-LightIt.otf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/WOFF/OTF/SourceSans3-LightIt.otf.woff -------------------------------------------------------------------------------- /static/fonts/source-sans/WOFF/OTF/SourceSans3-Medium.otf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/WOFF/OTF/SourceSans3-Medium.otf.woff -------------------------------------------------------------------------------- /static/fonts/source-sans/WOFF/OTF/SourceSans3-MediumIt.otf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/WOFF/OTF/SourceSans3-MediumIt.otf.woff -------------------------------------------------------------------------------- /static/fonts/source-sans/WOFF/OTF/SourceSans3-Regular.otf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/WOFF/OTF/SourceSans3-Regular.otf.woff -------------------------------------------------------------------------------- /static/fonts/source-sans/WOFF/OTF/SourceSans3-Semibold.otf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/WOFF/OTF/SourceSans3-Semibold.otf.woff -------------------------------------------------------------------------------- /static/fonts/source-sans/WOFF/OTF/SourceSans3-SemiboldIt.otf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/WOFF/OTF/SourceSans3-SemiboldIt.otf.woff -------------------------------------------------------------------------------- /static/fonts/source-sans/WOFF/TTF/SourceSans3-Black.ttf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/WOFF/TTF/SourceSans3-Black.ttf.woff -------------------------------------------------------------------------------- /static/fonts/source-sans/WOFF/TTF/SourceSans3-BlackIt.ttf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/WOFF/TTF/SourceSans3-BlackIt.ttf.woff -------------------------------------------------------------------------------- /static/fonts/source-sans/WOFF/TTF/SourceSans3-Bold.ttf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/WOFF/TTF/SourceSans3-Bold.ttf.woff -------------------------------------------------------------------------------- /static/fonts/source-sans/WOFF/TTF/SourceSans3-BoldIt.ttf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/WOFF/TTF/SourceSans3-BoldIt.ttf.woff -------------------------------------------------------------------------------- /static/fonts/source-sans/WOFF/TTF/SourceSans3-ExtraLight.ttf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/WOFF/TTF/SourceSans3-ExtraLight.ttf.woff -------------------------------------------------------------------------------- /static/fonts/source-sans/WOFF/TTF/SourceSans3-ExtraLightIt.ttf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/WOFF/TTF/SourceSans3-ExtraLightIt.ttf.woff -------------------------------------------------------------------------------- /static/fonts/source-sans/WOFF/TTF/SourceSans3-It.ttf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/WOFF/TTF/SourceSans3-It.ttf.woff -------------------------------------------------------------------------------- /static/fonts/source-sans/WOFF/TTF/SourceSans3-Light.ttf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/WOFF/TTF/SourceSans3-Light.ttf.woff -------------------------------------------------------------------------------- /static/fonts/source-sans/WOFF/TTF/SourceSans3-LightIt.ttf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/WOFF/TTF/SourceSans3-LightIt.ttf.woff -------------------------------------------------------------------------------- /static/fonts/source-sans/WOFF/TTF/SourceSans3-Medium.ttf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/WOFF/TTF/SourceSans3-Medium.ttf.woff -------------------------------------------------------------------------------- /static/fonts/source-sans/WOFF/TTF/SourceSans3-MediumIt.ttf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/WOFF/TTF/SourceSans3-MediumIt.ttf.woff -------------------------------------------------------------------------------- /static/fonts/source-sans/WOFF/TTF/SourceSans3-Regular.ttf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/WOFF/TTF/SourceSans3-Regular.ttf.woff -------------------------------------------------------------------------------- /static/fonts/source-sans/WOFF/TTF/SourceSans3-Semibold.ttf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/WOFF/TTF/SourceSans3-Semibold.ttf.woff -------------------------------------------------------------------------------- /static/fonts/source-sans/WOFF/TTF/SourceSans3-SemiboldIt.ttf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/WOFF/TTF/SourceSans3-SemiboldIt.ttf.woff -------------------------------------------------------------------------------- /static/fonts/source-sans/WOFF/VF/SourceSans3VF-Italic.otf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/WOFF/VF/SourceSans3VF-Italic.otf.woff -------------------------------------------------------------------------------- /static/fonts/source-sans/WOFF/VF/SourceSans3VF-Italic.ttf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/WOFF/VF/SourceSans3VF-Italic.ttf.woff -------------------------------------------------------------------------------- /static/fonts/source-sans/WOFF/VF/SourceSans3VF-Upright.otf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/WOFF/VF/SourceSans3VF-Upright.otf.woff -------------------------------------------------------------------------------- /static/fonts/source-sans/WOFF/VF/SourceSans3VF-Upright.ttf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/WOFF/VF/SourceSans3VF-Upright.ttf.woff -------------------------------------------------------------------------------- /static/fonts/source-sans/WOFF2/OTF/SourceSans3-Black.otf.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/WOFF2/OTF/SourceSans3-Black.otf.woff2 -------------------------------------------------------------------------------- /static/fonts/source-sans/WOFF2/OTF/SourceSans3-BlackIt.otf.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/WOFF2/OTF/SourceSans3-BlackIt.otf.woff2 -------------------------------------------------------------------------------- /static/fonts/source-sans/WOFF2/OTF/SourceSans3-Bold.otf.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/WOFF2/OTF/SourceSans3-Bold.otf.woff2 -------------------------------------------------------------------------------- /static/fonts/source-sans/WOFF2/OTF/SourceSans3-BoldIt.otf.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/WOFF2/OTF/SourceSans3-BoldIt.otf.woff2 -------------------------------------------------------------------------------- /static/fonts/source-sans/WOFF2/OTF/SourceSans3-ExtraLight.otf.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/WOFF2/OTF/SourceSans3-ExtraLight.otf.woff2 -------------------------------------------------------------------------------- /static/fonts/source-sans/WOFF2/OTF/SourceSans3-ExtraLightIt.otf.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/WOFF2/OTF/SourceSans3-ExtraLightIt.otf.woff2 -------------------------------------------------------------------------------- /static/fonts/source-sans/WOFF2/OTF/SourceSans3-It.otf.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/WOFF2/OTF/SourceSans3-It.otf.woff2 -------------------------------------------------------------------------------- /static/fonts/source-sans/WOFF2/OTF/SourceSans3-Light.otf.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/WOFF2/OTF/SourceSans3-Light.otf.woff2 -------------------------------------------------------------------------------- /static/fonts/source-sans/WOFF2/OTF/SourceSans3-LightIt.otf.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/WOFF2/OTF/SourceSans3-LightIt.otf.woff2 -------------------------------------------------------------------------------- /static/fonts/source-sans/WOFF2/OTF/SourceSans3-Medium.otf.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/WOFF2/OTF/SourceSans3-Medium.otf.woff2 -------------------------------------------------------------------------------- /static/fonts/source-sans/WOFF2/OTF/SourceSans3-MediumIt.otf.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/WOFF2/OTF/SourceSans3-MediumIt.otf.woff2 -------------------------------------------------------------------------------- /static/fonts/source-sans/WOFF2/OTF/SourceSans3-Regular.otf.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/WOFF2/OTF/SourceSans3-Regular.otf.woff2 -------------------------------------------------------------------------------- /static/fonts/source-sans/WOFF2/OTF/SourceSans3-Semibold.otf.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/WOFF2/OTF/SourceSans3-Semibold.otf.woff2 -------------------------------------------------------------------------------- /static/fonts/source-sans/WOFF2/OTF/SourceSans3-SemiboldIt.otf.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/WOFF2/OTF/SourceSans3-SemiboldIt.otf.woff2 -------------------------------------------------------------------------------- /static/fonts/source-sans/WOFF2/TTF/SourceSans3-Black.ttf.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/WOFF2/TTF/SourceSans3-Black.ttf.woff2 -------------------------------------------------------------------------------- /static/fonts/source-sans/WOFF2/TTF/SourceSans3-BlackIt.ttf.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/WOFF2/TTF/SourceSans3-BlackIt.ttf.woff2 -------------------------------------------------------------------------------- /static/fonts/source-sans/WOFF2/TTF/SourceSans3-Bold.ttf.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/WOFF2/TTF/SourceSans3-Bold.ttf.woff2 -------------------------------------------------------------------------------- /static/fonts/source-sans/WOFF2/TTF/SourceSans3-BoldIt.ttf.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/WOFF2/TTF/SourceSans3-BoldIt.ttf.woff2 -------------------------------------------------------------------------------- /static/fonts/source-sans/WOFF2/TTF/SourceSans3-ExtraLight.ttf.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/WOFF2/TTF/SourceSans3-ExtraLight.ttf.woff2 -------------------------------------------------------------------------------- /static/fonts/source-sans/WOFF2/TTF/SourceSans3-ExtraLightIt.ttf.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/WOFF2/TTF/SourceSans3-ExtraLightIt.ttf.woff2 -------------------------------------------------------------------------------- /static/fonts/source-sans/WOFF2/TTF/SourceSans3-It.ttf.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/WOFF2/TTF/SourceSans3-It.ttf.woff2 -------------------------------------------------------------------------------- /static/fonts/source-sans/WOFF2/TTF/SourceSans3-Light.ttf.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/WOFF2/TTF/SourceSans3-Light.ttf.woff2 -------------------------------------------------------------------------------- /static/fonts/source-sans/WOFF2/TTF/SourceSans3-LightIt.ttf.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/WOFF2/TTF/SourceSans3-LightIt.ttf.woff2 -------------------------------------------------------------------------------- /static/fonts/source-sans/WOFF2/TTF/SourceSans3-Medium.ttf.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/WOFF2/TTF/SourceSans3-Medium.ttf.woff2 -------------------------------------------------------------------------------- /static/fonts/source-sans/WOFF2/TTF/SourceSans3-MediumIt.ttf.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/WOFF2/TTF/SourceSans3-MediumIt.ttf.woff2 -------------------------------------------------------------------------------- /static/fonts/source-sans/WOFF2/TTF/SourceSans3-Regular.ttf.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/WOFF2/TTF/SourceSans3-Regular.ttf.woff2 -------------------------------------------------------------------------------- /static/fonts/source-sans/WOFF2/TTF/SourceSans3-Semibold.ttf.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/WOFF2/TTF/SourceSans3-Semibold.ttf.woff2 -------------------------------------------------------------------------------- /static/fonts/source-sans/WOFF2/TTF/SourceSans3-SemiboldIt.ttf.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/WOFF2/TTF/SourceSans3-SemiboldIt.ttf.woff2 -------------------------------------------------------------------------------- /static/fonts/source-sans/WOFF2/VF/SourceSans3VF-Italic.otf.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/WOFF2/VF/SourceSans3VF-Italic.otf.woff2 -------------------------------------------------------------------------------- /static/fonts/source-sans/WOFF2/VF/SourceSans3VF-Italic.ttf.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/WOFF2/VF/SourceSans3VF-Italic.ttf.woff2 -------------------------------------------------------------------------------- /static/fonts/source-sans/WOFF2/VF/SourceSans3VF-Upright.otf.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/WOFF2/VF/SourceSans3VF-Upright.otf.woff2 -------------------------------------------------------------------------------- /static/fonts/source-sans/WOFF2/VF/SourceSans3VF-Upright.ttf.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-sans/WOFF2/VF/SourceSans3VF-Upright.ttf.woff2 -------------------------------------------------------------------------------- /static/fonts/source-sans/source-sans-3VF.css: -------------------------------------------------------------------------------- 1 | @font-face{ 2 | font-family: 'Source Sans 3 VF'; 3 | font-weight: 200 900; 4 | font-style: normal; 5 | font-stretch: normal; 6 | src: url('WOFF2/VF/SourceSans3VF-Upright.ttf.woff2') format('woff2-variations'), 7 | url('WOFF/VF/SourceSans3VF-Upright.ttf.woff') format('woff-variations'), 8 | url('VF/SourceSans3VF-Upright.ttf') format('truetype-variations'); 9 | } 10 | 11 | @font-face{ 12 | font-family: 'Source Sans 3 VF'; 13 | font-weight: 200 900; 14 | font-style: italic; 15 | font-stretch: normal; 16 | src: url('WOFF2/VF/SourceSans3VF-Italic.ttf.woff2') format('woff2-variations'), 17 | url('WOFF/VF/SourceSans3VF-Italic.ttf.woff') format('woff-variations'), 18 | url('VF/SourceSans3VF-Italic.ttf') format('truetype-variations'); 19 | } 20 | -------------------------------------------------------------------------------- /static/fonts/source-serif/OTF/SourceSerif4-Black.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-serif/OTF/SourceSerif4-Black.otf -------------------------------------------------------------------------------- /static/fonts/source-serif/OTF/SourceSerif4-BlackIt.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-serif/OTF/SourceSerif4-BlackIt.otf -------------------------------------------------------------------------------- /static/fonts/source-serif/OTF/SourceSerif4-Bold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-serif/OTF/SourceSerif4-Bold.otf -------------------------------------------------------------------------------- /static/fonts/source-serif/OTF/SourceSerif4-BoldIt.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-serif/OTF/SourceSerif4-BoldIt.otf -------------------------------------------------------------------------------- /static/fonts/source-serif/OTF/SourceSerif4-ExtraLight.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-serif/OTF/SourceSerif4-ExtraLight.otf -------------------------------------------------------------------------------- /static/fonts/source-serif/OTF/SourceSerif4-ExtraLightIt.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-serif/OTF/SourceSerif4-ExtraLightIt.otf -------------------------------------------------------------------------------- /static/fonts/source-serif/OTF/SourceSerif4-It.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-serif/OTF/SourceSerif4-It.otf -------------------------------------------------------------------------------- /static/fonts/source-serif/OTF/SourceSerif4-Light.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-serif/OTF/SourceSerif4-Light.otf -------------------------------------------------------------------------------- /static/fonts/source-serif/OTF/SourceSerif4-LightIt.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-serif/OTF/SourceSerif4-LightIt.otf -------------------------------------------------------------------------------- /static/fonts/source-serif/OTF/SourceSerif4-Regular.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-serif/OTF/SourceSerif4-Regular.otf -------------------------------------------------------------------------------- /static/fonts/source-serif/OTF/SourceSerif4-Semibold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-serif/OTF/SourceSerif4-Semibold.otf -------------------------------------------------------------------------------- /static/fonts/source-serif/OTF/SourceSerif4-SemiboldIt.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-serif/OTF/SourceSerif4-SemiboldIt.otf -------------------------------------------------------------------------------- /static/fonts/source-serif/TTF/SourceSerif4-Black.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-serif/TTF/SourceSerif4-Black.ttf -------------------------------------------------------------------------------- /static/fonts/source-serif/TTF/SourceSerif4-BlackIt.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-serif/TTF/SourceSerif4-BlackIt.ttf -------------------------------------------------------------------------------- /static/fonts/source-serif/TTF/SourceSerif4-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-serif/TTF/SourceSerif4-Bold.ttf -------------------------------------------------------------------------------- /static/fonts/source-serif/TTF/SourceSerif4-BoldIt.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-serif/TTF/SourceSerif4-BoldIt.ttf -------------------------------------------------------------------------------- /static/fonts/source-serif/TTF/SourceSerif4-ExtraLight.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-serif/TTF/SourceSerif4-ExtraLight.ttf -------------------------------------------------------------------------------- /static/fonts/source-serif/TTF/SourceSerif4-ExtraLightIt.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-serif/TTF/SourceSerif4-ExtraLightIt.ttf -------------------------------------------------------------------------------- /static/fonts/source-serif/TTF/SourceSerif4-It.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-serif/TTF/SourceSerif4-It.ttf -------------------------------------------------------------------------------- /static/fonts/source-serif/TTF/SourceSerif4-Light.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-serif/TTF/SourceSerif4-Light.ttf -------------------------------------------------------------------------------- /static/fonts/source-serif/TTF/SourceSerif4-LightIt.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-serif/TTF/SourceSerif4-LightIt.ttf -------------------------------------------------------------------------------- /static/fonts/source-serif/TTF/SourceSerif4-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-serif/TTF/SourceSerif4-Regular.ttf -------------------------------------------------------------------------------- /static/fonts/source-serif/TTF/SourceSerif4-Semibold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-serif/TTF/SourceSerif4-Semibold.ttf -------------------------------------------------------------------------------- /static/fonts/source-serif/TTF/SourceSerif4-SemiboldIt.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-serif/TTF/SourceSerif4-SemiboldIt.ttf -------------------------------------------------------------------------------- /static/fonts/source-serif/WOFF/OTF/SourceSerif4-Black.otf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-serif/WOFF/OTF/SourceSerif4-Black.otf.woff -------------------------------------------------------------------------------- /static/fonts/source-serif/WOFF/OTF/SourceSerif4-BlackIt.otf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-serif/WOFF/OTF/SourceSerif4-BlackIt.otf.woff -------------------------------------------------------------------------------- /static/fonts/source-serif/WOFF/OTF/SourceSerif4-Bold.otf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-serif/WOFF/OTF/SourceSerif4-Bold.otf.woff -------------------------------------------------------------------------------- /static/fonts/source-serif/WOFF/OTF/SourceSerif4-BoldIt.otf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-serif/WOFF/OTF/SourceSerif4-BoldIt.otf.woff -------------------------------------------------------------------------------- /static/fonts/source-serif/WOFF/OTF/SourceSerif4-ExtraLight.otf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-serif/WOFF/OTF/SourceSerif4-ExtraLight.otf.woff -------------------------------------------------------------------------------- /static/fonts/source-serif/WOFF/OTF/SourceSerif4-ExtraLightIt.otf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-serif/WOFF/OTF/SourceSerif4-ExtraLightIt.otf.woff -------------------------------------------------------------------------------- /static/fonts/source-serif/WOFF/OTF/SourceSerif4-It.otf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-serif/WOFF/OTF/SourceSerif4-It.otf.woff -------------------------------------------------------------------------------- /static/fonts/source-serif/WOFF/OTF/SourceSerif4-Light.otf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-serif/WOFF/OTF/SourceSerif4-Light.otf.woff -------------------------------------------------------------------------------- /static/fonts/source-serif/WOFF/OTF/SourceSerif4-LightIt.otf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-serif/WOFF/OTF/SourceSerif4-LightIt.otf.woff -------------------------------------------------------------------------------- /static/fonts/source-serif/WOFF/OTF/SourceSerif4-Regular.otf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-serif/WOFF/OTF/SourceSerif4-Regular.otf.woff -------------------------------------------------------------------------------- /static/fonts/source-serif/WOFF/OTF/SourceSerif4-Semibold.otf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-serif/WOFF/OTF/SourceSerif4-Semibold.otf.woff -------------------------------------------------------------------------------- /static/fonts/source-serif/WOFF/OTF/SourceSerif4-SemiboldIt.otf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-serif/WOFF/OTF/SourceSerif4-SemiboldIt.otf.woff -------------------------------------------------------------------------------- /static/fonts/source-serif/WOFF/TTF/SourceSerif4-Black.ttf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-serif/WOFF/TTF/SourceSerif4-Black.ttf.woff -------------------------------------------------------------------------------- /static/fonts/source-serif/WOFF/TTF/SourceSerif4-BlackIt.ttf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-serif/WOFF/TTF/SourceSerif4-BlackIt.ttf.woff -------------------------------------------------------------------------------- /static/fonts/source-serif/WOFF/TTF/SourceSerif4-Bold.ttf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-serif/WOFF/TTF/SourceSerif4-Bold.ttf.woff -------------------------------------------------------------------------------- /static/fonts/source-serif/WOFF/TTF/SourceSerif4-BoldIt.ttf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-serif/WOFF/TTF/SourceSerif4-BoldIt.ttf.woff -------------------------------------------------------------------------------- /static/fonts/source-serif/WOFF/TTF/SourceSerif4-ExtraLight.ttf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-serif/WOFF/TTF/SourceSerif4-ExtraLight.ttf.woff -------------------------------------------------------------------------------- /static/fonts/source-serif/WOFF/TTF/SourceSerif4-ExtraLightIt.ttf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-serif/WOFF/TTF/SourceSerif4-ExtraLightIt.ttf.woff -------------------------------------------------------------------------------- /static/fonts/source-serif/WOFF/TTF/SourceSerif4-It.ttf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-serif/WOFF/TTF/SourceSerif4-It.ttf.woff -------------------------------------------------------------------------------- /static/fonts/source-serif/WOFF/TTF/SourceSerif4-Light.ttf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-serif/WOFF/TTF/SourceSerif4-Light.ttf.woff -------------------------------------------------------------------------------- /static/fonts/source-serif/WOFF/TTF/SourceSerif4-LightIt.ttf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-serif/WOFF/TTF/SourceSerif4-LightIt.ttf.woff -------------------------------------------------------------------------------- /static/fonts/source-serif/WOFF/TTF/SourceSerif4-Regular.ttf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-serif/WOFF/TTF/SourceSerif4-Regular.ttf.woff -------------------------------------------------------------------------------- /static/fonts/source-serif/WOFF/TTF/SourceSerif4-Semibold.ttf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-serif/WOFF/TTF/SourceSerif4-Semibold.ttf.woff -------------------------------------------------------------------------------- /static/fonts/source-serif/WOFF/TTF/SourceSerif4-SemiboldIt.ttf.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-serif/WOFF/TTF/SourceSerif4-SemiboldIt.ttf.woff -------------------------------------------------------------------------------- /static/fonts/source-serif/WOFF2/OTF/SourceSerif4-Black.otf.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-serif/WOFF2/OTF/SourceSerif4-Black.otf.woff2 -------------------------------------------------------------------------------- /static/fonts/source-serif/WOFF2/OTF/SourceSerif4-BlackIt.otf.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-serif/WOFF2/OTF/SourceSerif4-BlackIt.otf.woff2 -------------------------------------------------------------------------------- /static/fonts/source-serif/WOFF2/OTF/SourceSerif4-Bold.otf.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-serif/WOFF2/OTF/SourceSerif4-Bold.otf.woff2 -------------------------------------------------------------------------------- /static/fonts/source-serif/WOFF2/OTF/SourceSerif4-BoldIt.otf.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-serif/WOFF2/OTF/SourceSerif4-BoldIt.otf.woff2 -------------------------------------------------------------------------------- /static/fonts/source-serif/WOFF2/OTF/SourceSerif4-ExtraLight.otf.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-serif/WOFF2/OTF/SourceSerif4-ExtraLight.otf.woff2 -------------------------------------------------------------------------------- /static/fonts/source-serif/WOFF2/OTF/SourceSerif4-ExtraLightIt.otf.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-serif/WOFF2/OTF/SourceSerif4-ExtraLightIt.otf.woff2 -------------------------------------------------------------------------------- /static/fonts/source-serif/WOFF2/OTF/SourceSerif4-It.otf.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-serif/WOFF2/OTF/SourceSerif4-It.otf.woff2 -------------------------------------------------------------------------------- /static/fonts/source-serif/WOFF2/OTF/SourceSerif4-Light.otf.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-serif/WOFF2/OTF/SourceSerif4-Light.otf.woff2 -------------------------------------------------------------------------------- /static/fonts/source-serif/WOFF2/OTF/SourceSerif4-LightIt.otf.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-serif/WOFF2/OTF/SourceSerif4-LightIt.otf.woff2 -------------------------------------------------------------------------------- /static/fonts/source-serif/WOFF2/OTF/SourceSerif4-Regular.otf.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-serif/WOFF2/OTF/SourceSerif4-Regular.otf.woff2 -------------------------------------------------------------------------------- /static/fonts/source-serif/WOFF2/OTF/SourceSerif4-Semibold.otf.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-serif/WOFF2/OTF/SourceSerif4-Semibold.otf.woff2 -------------------------------------------------------------------------------- /static/fonts/source-serif/WOFF2/OTF/SourceSerif4-SemiboldIt.otf.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-serif/WOFF2/OTF/SourceSerif4-SemiboldIt.otf.woff2 -------------------------------------------------------------------------------- /static/fonts/source-serif/WOFF2/TTF/SourceSerif4-Black.ttf.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-serif/WOFF2/TTF/SourceSerif4-Black.ttf.woff2 -------------------------------------------------------------------------------- /static/fonts/source-serif/WOFF2/TTF/SourceSerif4-BlackIt.ttf.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-serif/WOFF2/TTF/SourceSerif4-BlackIt.ttf.woff2 -------------------------------------------------------------------------------- /static/fonts/source-serif/WOFF2/TTF/SourceSerif4-Bold.ttf.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-serif/WOFF2/TTF/SourceSerif4-Bold.ttf.woff2 -------------------------------------------------------------------------------- /static/fonts/source-serif/WOFF2/TTF/SourceSerif4-BoldIt.ttf.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-serif/WOFF2/TTF/SourceSerif4-BoldIt.ttf.woff2 -------------------------------------------------------------------------------- /static/fonts/source-serif/WOFF2/TTF/SourceSerif4-ExtraLight.ttf.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-serif/WOFF2/TTF/SourceSerif4-ExtraLight.ttf.woff2 -------------------------------------------------------------------------------- /static/fonts/source-serif/WOFF2/TTF/SourceSerif4-ExtraLightIt.ttf.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-serif/WOFF2/TTF/SourceSerif4-ExtraLightIt.ttf.woff2 -------------------------------------------------------------------------------- /static/fonts/source-serif/WOFF2/TTF/SourceSerif4-It.ttf.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-serif/WOFF2/TTF/SourceSerif4-It.ttf.woff2 -------------------------------------------------------------------------------- /static/fonts/source-serif/WOFF2/TTF/SourceSerif4-Light.ttf.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-serif/WOFF2/TTF/SourceSerif4-Light.ttf.woff2 -------------------------------------------------------------------------------- /static/fonts/source-serif/WOFF2/TTF/SourceSerif4-LightIt.ttf.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-serif/WOFF2/TTF/SourceSerif4-LightIt.ttf.woff2 -------------------------------------------------------------------------------- /static/fonts/source-serif/WOFF2/TTF/SourceSerif4-Regular.ttf.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-serif/WOFF2/TTF/SourceSerif4-Regular.ttf.woff2 -------------------------------------------------------------------------------- /static/fonts/source-serif/WOFF2/TTF/SourceSerif4-Semibold.ttf.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-serif/WOFF2/TTF/SourceSerif4-Semibold.ttf.woff2 -------------------------------------------------------------------------------- /static/fonts/source-serif/WOFF2/TTF/SourceSerif4-SemiboldIt.ttf.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/fonts/source-serif/WOFF2/TTF/SourceSerif4-SemiboldIt.ttf.woff2 -------------------------------------------------------------------------------- /static/print.css: -------------------------------------------------------------------------------- 1 | @media print { 2 | /* Get rid of frames emulation, which breaks printing */ 3 | .with-toc { 4 | display: block; 5 | height: unset; 6 | } 7 | .with-toc > * { 8 | grid-area: unset; 9 | } 10 | .with-toc > header { 11 | display: none; 12 | } 13 | #toc { 14 | display: none; 15 | } 16 | 17 | /* Improve layout on paper*/ 18 | h1, h2, h3, h4, h5, h6, summary { 19 | break-after: avoid-page; 20 | } 21 | main > section > section { 22 | break-before: page; 23 | } 24 | p { 25 | orphans: 3; 26 | widows: 3; 27 | } 28 | } -------------------------------------------------------------------------------- /static/print.js: -------------------------------------------------------------------------------- 1 | // Open all details tags when printing. 2 | // 3 | // From https://stackoverflow.com/questions/19646684/force-open-the-details-summary-tag-for-print-in-chrome 4 | 5 | window.matchMedia("print").addEventListener("change", evt => { 6 | if (evt.matches) { 7 | elms = document.body.querySelectorAll("details:not([open])"); 8 | for (e of elms) { 9 | e.setAttribute("open", ""); 10 | e.dataset.wasclosed = ""; 11 | } 12 | } else { 13 | elms = document.body.querySelectorAll("details[data-wasclosed]"); 14 | for (e of elms) { 15 | e.removeAttribute("open"); 16 | delete e.dataset.wasclosed; 17 | } 18 | } 19 | }) 20 | -------------------------------------------------------------------------------- /static/screenshots/do-return-hl-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/screenshots/do-return-hl-1.png -------------------------------------------------------------------------------- /static/screenshots/do-return-hl-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/leanprover/reference-manual/8ffede0193860d5d2c10d5262f03950eb7054e95/static/screenshots/do-return-hl-2.png -------------------------------------------------------------------------------- /static/search/README.txt: -------------------------------------------------------------------------------- 1 | # Search bar for LEAN 2 | 3 | To type check: `tsc -p ./jsconfig.json`. 4 | 5 | To run: `python -m http.server 8870` and go to `localhost:8870`. 6 | 7 | ## Libraries 8 | 9 | I've added a few libraries to develop faster. 10 | 11 | I picked up `fuzzysort` for fuzzy sorting from the github page 12 | (https://github.com/farzher/fuzzysort) where he has a minified version next to 13 | the implementation. 14 | 15 | I picked up `unicode-input.min.js` from 16 | https://cdn.skypack.dev/@leanprover/unicode-input - had to download it from the 17 | network tab in the browser. It's a dependency of `unicode-input-component.js`. 18 | 19 | I picked up `unicode-input-component.js` from 20 | https://github.com/leanprover/vscode-lean4/blob/master/lean4-unicode-input-component/src/index.ts, 21 | but that needs to changed some in order for it to work without compiling, so if 22 | it needs to be updated look at the diff to understand what's required. 23 | 24 | # Research 25 | 26 | The LEAN search bar has some properties that make it hard to use already 27 | existing libraries for search bars directly. Almost all online search bars 28 | require multiple libraries - I haven't been able to find one that didn't. And we 29 | don't want dependents on this component to have to install node/npm/tonnes of 30 | libraries in order to use it. It should be simple. 31 | 32 | Additionally, the data is in a complex format, and has to be able to run 33 | locally, so doing serverside search is off the table. 34 | 35 | ## Fuzzy search js library investigation 36 | 37 | Looking at fuzzy search libraries. The important things are: 38 | 39 | - Size - it should be small. 40 | - Correctness - it should work. 41 | - Single word/multiword? 42 | - Offload to web worker? 43 | 44 | #### https://www.npmjs.com/package/fuzzysort 45 | 46 | Looks slick. Same kind of search as in Sublime Text. Probably makes more sense 47 | for programming things than the other things here. 48 | 49 | ## Combobox libraries 50 | 51 | Maybe have a look at 52 | https://www.digitala11y.com/accessible-ui-component-libraries-roundup/ 53 | 54 | https://webaim.org/ is a good place to look 55 | 56 | ### https://www.w3.org/WAI/ARIA/apg/patterns/combobox/examples/combobox-autocomplete-both/ 57 | 58 | I've found this w3 aria example, which I'm going to use and adjust to our needs. 59 | That's a good place to start. 60 | -------------------------------------------------------------------------------- /static/search/jsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "typeRoots": ["."], 4 | "lib": ["ES2024", "DOM", "DOM.Iterable"], 5 | "target": "ES2024", 6 | "noEmit": true 7 | } 8 | } -------------------------------------------------------------------------------- /static/search/licenses.md: -------------------------------------------------------------------------------- 1 | # 3rd party copyright statement 2 | 3 | The following third party software is included in the search box, and is 4 | provided under the following license terms. 5 | 6 | ## W3 combobox 7 | 8 | By obtaining and/or copying this work, you (the licensee) agree that you have 9 | read, understood, and will comply with the following terms and conditions. 10 | 11 | Permission to copy, modify, and distribute this work, with or without 12 | modification, for any purpose and without fee or royalty is hereby granted, 13 | provided that you include the following on ALL copies of the work or portions 14 | thereof, including modifications: 15 | 16 | The full text of this NOTICE in a location viewable to users of the redistributed or derivative work. 17 | Any pre-existing intellectual property disclaimers, notices, or terms and conditions. If none exist, the W3C software and document short notice should be included. 18 | Notice of any changes or modifications, through a copyright statement on the new code or document such as "This software or document includes material copied from or derived from [title and URI of the W3C document]. Copyright © [$year-of-document] World Wide Web Consortium. https://www.w3.org/copyright/software-license-2023/" 19 | 20 | ## Fuzzysort 21 | 22 | MIT License 23 | 24 | Copyright (c) 2018 Stephen Kamenar 25 | 26 | Permission is hereby granted, free of charge, to any person obtaining a copy of 27 | this software and associated documentation files (the "Software"), to deal in 28 | the Software without restriction, including without limitation the rights to 29 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 30 | the Software, and to permit persons to whom the Software is furnished to do so, 31 | subject to the following conditions: 32 | 33 | The above copyright notice and this permission notice shall be included in all 34 | copies or substantial portions of the Software. 35 | 36 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 37 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 38 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 39 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 40 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 41 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 42 | -------------------------------------------------------------------------------- /static/search/search-init.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2024 Lean FRO LLC. All rights reserved. 3 | * Released under Apache 2.0 license as described in the file LICENSE. 4 | * Author: David Thrane Christiansen 5 | */ 6 | 7 | import {domainMappers} from './domain-mappers.js'; 8 | import {registerSearch} from './search-box.js'; 9 | 10 | let siteRoot = typeof __versoSiteRoot !== 'undefined' ? __versoSiteRoot : ""; 11 | 12 | // The search box itself. TODO: add to template 13 | // autocorrect is a safari-only attribute. It is required to prevent autocorrect on iOS. 14 | const searchHTML = `
15 |
16 |
17 | 33 |
34 |
    35 |
    36 |
    37 | `; 38 | 39 | // Initialize search box 40 | const data = fetch(siteRoot + "/xref.json").then((data) => data.json()) 41 | window.addEventListener("load", () => { 42 | const main = document.querySelector("header"); 43 | main.insertAdjacentHTML("beforeend", searchHTML); 44 | const searchWrapper = document.querySelector(".combobox-list"); 45 | data.then((data) => { 46 | registerSearch({searchWrapper, data, domainMappers}); 47 | }); 48 | }); 49 | --------------------------------------------------------------------------------