| .. | ||
| leanpkg | ||
| .gitignore | ||
| leanpkg.path | ||
| leanpkg.toml | ||
| README.md | ||
leanpkg
leanpkg is the package manager for the Lean theorem prover. It downloads dependencies and manages what modules you can import in your Lean files.
There are two important files for leanpkg in each package:
leanpkg.toml: a manifest describing the package name, version, and dependenciesleanpkg.path: this file is created byleanpkg configureand should not be added to git. It contains the paths to the dependencies on the current machine.
Dependencies can be fetched from git repositories; in this case leanpkg will remember the current revision. You need to change the revision in the [dependencies] section manually if you want to update the dependency.
General guidelines
- Run the
leancommand-line tool from a directory inside your package. - In vscode, open the package as a folder.
Working on existing packages
You need to run leanpkg configure first, in order to download dependencies and generate the leanpkg.path file.
git clone https://github.com/leanprover/library_dev
cd library_dev
leanpkg configure
Creating new packages
The leanpkg new command creates a new package. You can use leanpkg add to add dependencies, or add them manually if you prefer:
leanpkg new my_awesome_pkg
cd my_awesome_pkg
leanpkg add https://github.com/leanprover/library_dev
You can now add new .lean files inside the my_awesome_pkg directory.
Files that are not in packages
It is reasonably common to have thousands of "scratch" files lying around that are not part of a package. Files that are not inside a package themselves can still use dependencies fetched via leanpkg. These dependencies are stored in ~/.lean/leanpkg.toml and can be modified with leanpkg install:
leanpkg install https://github.com/leanprover/smt2_interface
After this, you can use the smt2_interface package in all files that do not belong to a package themselves.
Format of leanpkg.toml
[package]
name = "my_awesome_pkg"
version = "0.1"
[dependencies]
demopkg = { path = "relative/path/to/demopkg" }
library_dev = { git = "https://github.com/leanprover/library_dev",
rev = "62f7883d937861b618ae8bd645ee16ec137dd0bd" }
By default source files are assumed to be directly in the root directory of the package. You can optionally add a path = "src" attribute to the [package] section that selects a different directory.
Import resolution
Lean supports two kinds of imports:
import theory.set_theory -- absolute
import .basic -- relative
Relative imports are always relative to the current file name.
Absolute imports are resolved according to the entries in the leanpkg.path file. That is, when executing import theory.set_theory, Lean looks for a file called theory/set_theory.lean in all (transitive) dependencies as well as the current package.