├── .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 = `
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 |
--------------------------------------------------------------------------------