为 Lean 中的自然数定义前置函数(pred 0 = 0)

Defining the predecessor function (with pred 0 = 0) for the natural numbers in Lean

我正在学习精益证明助手。 https://leanprover.github.io/theorem_proving_in_lean/inductive_types.html 中的一个练习是为自然数定义前置函数。有人可以帮我吗?

您可能熟悉精益模式匹配或某些函数式编程语言,因此这里有一个使用此机制的解决方案:

open nat

definition pred : ℕ → ℕ
| zero     := zero
| (succ n) := n

另一种方法是使用像这样的递归:

def pred (n : ℕ) : ℕ :=
  nat.rec_on n 0 (λ p _, p)

在这里,0 是我们 return 如果参数为零, (λ p _, p) 是一个匿名函数,它有两个参数:前身(pn 和递归调用的结果 pred p。匿名函数忽略第二个参数和 return 前导。