1
- # elan 及 Lake 用法示例
1
+ # Lean 工具链使用指南
2
+
3
+ [ 上篇] ( ../install.md ) 安装 Lean4 提到了 Lean 项目开发的三件套:版本管理器 [ elan] ( https://github.com/leanprover/elan ) + 包管理器和构建工具 [ lake] ( https://github.com/leanprover/lake ) + 语言本身的核心组件 [ lean] ( https://github.com/leanprover/lean4 ) 。下边分别介绍这三个工具的基本用法。
4
+
5
+ > 这类设计与其他编程语言类似,如 Rust(rustup + cargo + rustc)或 Node.js(nvm + npm + node)。
2
6
3
7
## elan 常用功能
4
8
5
- [ elan] ( https://github.com/leanprover/elan ) 是 Lean 环境版本管理器,用于安装、管理和切换不同版本的 Lean。
9
+ [ elan] ( https://github.com/leanprover/elan ) 是 Lean 版本管理器,用于安装、管理和切换不同版本的 Lean。
10
+
11
+ 版本管理:
6
12
7
13
``` bash
8
14
elan --version # 输出版本号来测试安装是否成功
9
15
elan self update # 更新 elan
10
16
elan show # 显示已安装的 Lean 版本
11
17
12
- # 切换默认的 Lean 版本,例如 leanprover/lean4:v4.11.0-rc1
13
- # stable 是最新稳定版本,所有版本可见 https://github.com/leanprover/lean4/releases
18
+ # 下载指定 Lean 版本,所有版本可见 https://github.com/leanprover/lean4/releases
19
+ elan install leanprover/lean4:v4.10.0
20
+
21
+ # 下载最新稳定版本 stable
14
22
elan default leanprover/lean4:stable
15
23
16
- # 也可设置,只在当前目录下使用的 Lean 版本
24
+ # 切换默认的 Lean 版本
25
+ # 切换到 leanprover/lean4:v4.11.0-rc1
26
+ elan default leanprover/lean4:v4.11.0-rc1
27
+
28
+ # 设置在当前目录下使用的 Lean 版本
17
29
elan override set leanprover/lean4:stable
30
+ # info: info: override toolchain for 'xxx' set to 'leanprover/lean4:stable'
31
+ ```
32
+
33
+ 指定版本运行 ` lake ` 或 ` lean ` 命令:
34
+
35
+ ``` bash
36
+ lake --version # 使用 elan 默认版本
37
+ # 使用指定版本
38
+ elan run leanprover/lean4:v4.10.0 lake --version
39
+ elan run leanprover/lean4:v4.10.0 lean --version
40
+ # 创建指定版本的项目
41
+ elan run leanprover/lean4:v4.10.0 lake new package
18
42
```
19
43
20
- elan 在 Windows 下的管理目录为 ` %USERPROFILE%\.elan\bin ` ,在 Linux 下的管理目录为 ` $HOME/.elan ` ,内容形如
44
+ elan 配置记录可以在 ` ~/.elan/settings.toml ` 查看。
45
+
46
+ 具体地,Windows 下的 elan 管理目录为 ` %USERPROFILE%\.elan\bin ` ,Linux/Mac 下的管理目录为 ` $HOME/.elan ` ,内容形如
21
47
22
48
``` bash
23
49
❯ tree .elan -L 2
@@ -45,12 +71,12 @@ elan 在 Windows 下的管理目录为 `%USERPROFILE%\.elan\bin`,在 Linux 下
45
71
- ` settings.toml ` 是 elan 的配置文件。
46
72
- ` bin ` 存放常用的二进制文件,比如 ` lake ` 。
47
73
48
- ## 通过 Lake 创建 Lean 项目
49
-
50
- 对创建 Lean 项目的详细介绍参考[ 这个教程] ( https://www.leanprover.cn/fp-lean-zh/hello-world/starting-a-project.html ) 。此处演示最基本的用法。
74
+ ## Lake 基本用法
51
75
52
76
[ lake] ( https://github.com/leanprover/lake ) 全称 Lean Make,是 Lean 4 的包管理器,用于创建 Lean 项目,构建 Lean 包和编译 Lean 可执行文件。
53
77
78
+ 本节介绍 ` lake ` 的基本用法,[ Lean 函数式编程] ( https://www.leanprover.cn/fp-lean-zh/hello-world/starting-a-project.html ) 也提供了创建 Lean 项目的例子,而更全面的参数介绍可参考 [ lake 文档] ( ../references/lake-doc.md ) 。
79
+
54
80
在终端中运行(` your_project_name ` 替换为你自己起的名字)
55
81
56
82
``` bash
@@ -73,7 +99,8 @@ your_project_name
73
99
└── ...
74
100
```
75
101
76
- 其中 ` lakefile.lean ` 是当前项目的配置文件,` lean-toolchain ` 是当前项目使用的 Lean 版本。其他文件的功能以及更多细节请参考[ 这个教程] ( https://www.leanprover.cn/fp-lean-zh/hello-world/starting-a-project.html ) 。
102
+
103
+ 其中 ` lakefile.lean ` 是当前项目的配置文件,` lean-toolchain ` 是当前项目使用的 Lean 版本。
77
104
78
105
初次让 Lean Server 运行该项目时会添加
79
106
@@ -152,4 +179,47 @@ lake update
152
179
lake run < script>
153
180
```
154
181
155
- 关于 Lake 的更多用法可参考 [ lake 文档] ( ../references/lake-doc.md ) 。
182
+ ## lean
183
+
184
+ [ lean] ( https://github.com/leanprover/lean4 ) :语言本身的核心组件,通常不需要直接与 ` lean ` 交互。
185
+
186
+ 这里介绍常见的两个操作:运行 Lean 脚本,以及验证 Lean 代码。
187
+
188
+ 执行 Lean 脚本,入口为 ` main ` 函数:
189
+
190
+ ``` lean
191
+ -- hello.lean
192
+ def main : IO Unit := IO.println s!"Version: {Lean.versionString}"
193
+ ```
194
+
195
+ 在终端中运行:
196
+
197
+ ``` bash
198
+ elan default leanprover/lean4:v4.11.0-rc1
199
+ lean --run hello.lean
200
+ # Version: 4.11.0-rc1
201
+ elan run leanprover/lean4:v4.10.0 lean --run hello.lean
202
+ # Version: 4.10.0
203
+ ```
204
+
205
+ 验证 Lean 代码:
206
+
207
+ ``` lean
208
+ -- proof.lean
209
+ theorem my_first_theorem : 1 + 1 = 2 := by
210
+ simp
211
+
212
+ theorem my_false_theorem : 1 + 1 = 1 := by
213
+ simp
214
+
215
+ theorem my_syntax_error_themore 1 + 1 = 2 := by
216
+ simp
217
+ ```
218
+
219
+ 在终端中运行:` lean proof.lean ` ,返回错误信息:
220
+
221
+ ``` bash
222
+ hello.lean:5:40: error: unsolved goals
223
+ ⊢ False
224
+ hello.lean:8:31: error: unexpected token; expected ' :'
225
+ ```
0 commit comments