Natural number game 通关记录 | 教程
0x00 前言
Natural number game是最近发现的一款游戏。
游戏规则:用已知的内容去推导与证明未知的各种定理。
本游戏最好玩的地方在于:你需要从头开始证明各种各样的数学体系。
这意味着,刚开始的时候,你完全不知道什么加法交换律、结合律,你甚至不知道 \(a + 0 = a\),你只知道 \(a = a\)。
0x01 教程关卡 | Tutorial world
这一部分可以直接看这里的思路与答案。因为是起始关,而且游戏内说明是英文,并且很长。
Level 1
- 内容
求证:\(x \cdot y + z = x \cdot y + z\)。
- 思路
如果你的等式形如 \(x = x\) 的形式,那么就完成了证明。
在框框内输入 refl,
即可完成证明。
末尾逗号不能忘记。
- 代码
refl,
Level 2
- 内容
给定 \(y = x + 7\)。
求证 \(2 \cdot y = 2 \cdot (x + 7)\)。
- 思路
如果你已经证明(之前的关卡的结论;刚刚证明的内容)了一个定理 \(A\)。
那么你就可以使用 \(\operatorname{rw}(A)\) 语句。
含义:将 A 带进去等式里。
注意有点不智能,如果要代入多次,也要写多次。
例如本题已经告诉你了 \(h\)。那么直接将 \(h\) 带进去即可。
- 代码
rw h,
refl,
Level 3
- 内容
给定 \(\operatorname{succ}(a) = b\)。
求证 \(\operatorname{succ}(\operatorname{succ}(a)) = \operatorname{succ}(b)\)。
- 思路
和 \(\text{Level 2}\) 一模一样。
这一关是告诉你,\(\operatorname{succ}(x)\) 是指一个类似函数的东西。
- 代码
rw h,
refl,
Level 4
- 内容
求证 \(a + \operatorname{succ}(0) = \operatorname{succ}(a)\)。
- 思路
即将进入加法的世界!这一关是热身。
你又学会了两个操作:
- \(\operatorname{add\_zero}(x)\):\(x + 0 = x\)。
- \(\operatorname{add\_succ}(x, y)\):\(x + \operatorname{succ}(y) = \operatorname{succ}(x + y)\)。
首先,你 \(\operatorname{add\_succ}\),将求证式变成 \(\operatorname{succ}(a + 0) = \operatorname(a)\)。
然后,你 \(\operatorname{add\_zero}\),将求证式变成 \(\operatorname(a) = \operatorname(a)\)。
证毕。
- 代码
rw add_succ,
rw add_zero,
refl,
0x02 加法世界 | Addition world
Level 1
- 内容
求证 \(0 + n = n\)。
- 思路
你又学会了一个操作:\(\text{induction n with x A}\)。
表示将 \(n\) 以 \(0\) 表示,证明了这个后,称其为定理 \(A\),其中的 \(n\) 会变成 \(x\)。
但是原式的 \(n\) 会随之变成 \(\operatorname{succ}(x)\)。
第一次使用这个语句,我说得详细一些:
首先定义一下 \(n\) 的操作。现在需要证明 \(0 + 0 = 0\)。
很简单,\(\operatorname{add\_zero}\) 然后证毕。
接下来只需证 \(0 + \operatorname{succ}(x) = \operatorname{succ}(x)\)。
也非常简单,\(\operatorname{add\_succ}\) 即可。再代入 \(A\) 证毕。
- 代码
induction n with x A,
rw add_zero,
refl,
rw add_succ,
rw A,
refl,
Level 2
- 内容
证明 \((a + b) + c = a + (b + c)\)。
- 思路
把 \(c\) 换掉。只需证明 \(a + b + 0 = a + (b + 0)\)。两次 \(\operatorname{add\_zero}\) 证毕。
然后多进行几次 \(\operatorname{add\_succ}\),然后代入 \(A\),证毕。自己想。
- 代码
induction c with x A,
rw add_zero,
rw add_zero,
refl,
rw add_succ,
rw add_succ,
rw add_succ,
rw A,
refl,
注意:你完成一关后,标题的定理你是可以在之后的关卡使用的。
例如本关就是 \(\operatorname{add\_assoc}\)。
Level 3
- 内容
证明 \(\operatorname{succ}(a) + b = \operatorname{succ}(a + b)\)。
- 思路
把 \(b\) 换掉。和刚才一样,两次 \(\operatorname{add\_zero}\) 证毕。
然后再使用两次 \(\operatorname{add\_succ}\) 即可。
- 代码
induction b with x A,
rw add_zero,
rw add_zero,
refl,
rw add_succ,
rw add_succ,
rw A,
refl,
Level 4
- 内容
证明 \(a + b = b + a\)。
- 思路
换掉 \(a\)。证明 \(a + 0 = 0 + a\)。
一次 \(add\_zero\) 与一次 \(zero\_add\) 证毕。
然后你要证明 \(\operatorname{succ}(x) + b = b + \operatorname{succ}(x)\)。
同样的,一次 \(\operatorname{add\_succ}\) 与一次 \(\operatorname{succ\_add}\)。代回 \(A\) 证毕。
- 代码
induction a with x A,
rw add_zero,
rw zero_add,
refl,
rw add_succ,
rw succ_add,
rw A,
refl,
Level 5
- 内容
你又学会了 \(\operatorname{one\_eq\_succ\_zero}()\) 表示 \(\operatorname{succ}(0) = 1\)。
证明 \(\operatorname{succ}(n) = n + 1\)。
- 思路
换掉 \(n\)。用刚刚学的那个东西证掉。
然后 \(\operatorname{succ\_add}\) 再代回 \(A\),证毕。
- 代码
induction n with x A,
rw zero_add,
rw one_eq_succ_zero,
refl,
rw succ_add,
rw A,
refl,
Level 6
- 内容
证明 \(a + b + c = a + c + b\)。
- 思路
两次 \(\operatorname{add\_assoc}\) 后换掉 \(a\)。这个是非常好证明的。
然后随便 \(\operatorname{succ\_add}\) 一下。代回去,证毕。
- 代码
rw add_assoc,
rw add_assoc,
induction a with x A,
rw zero_add,
rw zero_add,
rw add_comm,
refl,
rw succ_add,
rw succ_add,
rw A,
refl,
现在你已经结束了加法世界!你学会了一个超级工具:
\(\operatorname{simp}()\) 可以直接帮你化简有关加法的部分!
0x03 乘法世界 | Multiplication world
Level 1
- 内容
你学会了两个有关乘法的操作:
- \(\operatorname{mul\_zero}(x)\):\(x \cdot 0 = 0\)。
- \(\operatorname{mul\_succ}(a, b)\):\(a \cdot \operatorname{succ}(b) = a \cdot b + a\)。
求证 \(0 \times m = 0\)。
- 思路
换掉 \(m\)。证明 \(0 \times 0 = 0\) 非常容易。
然后 \(\operatorname{mul\_succ}\) 一下。代回 \(A\)。然后直接使用高级的 \(\operatorname{simp}()\) 就搞定了。
- 代码
induction m with x A,
rw mul_zero,
refl,
rw mul_succ,
rw A,
simp,
Level 2
又咕掉了。