为 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)
是一个匿名函数,它有两个参数:前身(p
) n
和递归调用的结果 pred p
。匿名函数忽略第二个参数和 return 前导。
我正在学习精益证明助手。 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)
是一个匿名函数,它有两个参数:前身(p
) n
和递归调用的结果 pred p
。匿名函数忽略第二个参数和 return 前导。