Lean 4新战术
介绍
Lean4 是一个功能强大的交互式定理证明器,广泛用于形式化数学和编程语言理论。Lean4 引入了许多新战术(tactics),这些战术可以帮助用户更高效地构建证明。战术是 Lean4 中的核心概念之一,它们是指令或策略,用于自动化或简化证明过程。
本文将介绍 Lean4 中的一些新战术,并通过代码示例和实际案例展示它们的用法。
新战术概览
Lean4 中的新战术包括但不限于:
simp
:简化表达式。rw
:重写表达式。induction
:进行归纳证明。cases
:分解数据结构。exact
:精确匹配目标。
接下来,我们将逐步讲解这些战术,并通过代码示例展示它们的用法。
simp
战术
simp
是 Lean4 中最常用的战术之一,它用于简化表达式。simp
会自动应用一系列预定义的简化规则,从而减少用户手动操作的步骤。
示例
example : (1 + 2) * 3 = 9 := by
simp
在这个例子中,simp
自动将 (1 + 2) * 3
简化为 9
,从而完成了证明。
rw
战术
rw
是重写战术,它允许用户根据等式或定理重写目标表达式。
示例
example (a b : Nat) : a + b = b + a := by
rw [Nat.add_comm]
在这个例子中,rw [Nat.add_comm]
使用了加法交换律 Nat.add_comm
来重写目标表达式,从而完成了证明。
induction
战术
induction
是归纳战术,它用于对自然数或数据结构进行归纳证明。
示例
example (n : Nat) : n + 0 = n := by
induction n with
| zero => simp
| succ n ih => simp [ih]
在这个例子中,induction
战术对 n
进行了归纳证明。zero
情况通过 simp
自动完成,succ
情况则使用了归纳假设 ih
。
cases
战术
cases
是分解战术,它用于分解数据结构,如列表、自然数等。
示例
example (n : Nat) : n = 0 ∨ n > 0 := by
cases n with
| zero => left; rfl
| succ n => right; exact Nat.succ_pos n
在这个例子中,cases
战术将 n
分解为 zero
和 succ n
两种情况,并分别进行了处理。
exact
战术
exact
是精确匹配战术,它用于精确匹配目标表达式。
示例
example : 2 + 2 = 4 := by
exact rfl
在这个例子中,exact rfl
精确匹配了目标表达式 2 + 2 = 4
,从而完成了证明。
实际案例
案例:证明斐波那契数列的性质
让我们通过一个实际案例来展示这些战术的应用。我们将证明斐波那契数列的一个性质:fib (n + 2) = fib (n + 1) + fib n
。
def fib : Nat → Nat
| 0 => 0
| 1 => 1
| n + 2 => fib (n + 1) + fib n
example (n : Nat) : fib (n + 2) = fib (n + 1) + fib n := by
induction n with
| zero => simp [fib]
| succ n ih => simp [fib, ih]
在这个案例中,我们首先定义了斐波那契数列 fib
,然后使用 induction
战术对 n
进行归纳证明。zero
情况通过 simp [fib]
自动完成,succ
情况则使用了归纳假设 ih
。
总结
Lean4 中的新战术为用户提供了强大的工具,可以显著简化证明过程并提高效率。通过本文的介绍和示例,您应该已经对这些战术有了初步的了解。接下来,您可以尝试在自己的项目中使用这些战术,并探索更多高级功能。
附加资源与练习
- 练习 1:尝试使用
simp
和rw
战术证明(a + b) * c = a * c + b * c
。 - 练习 2:使用
induction
战术证明n + m = m + n
。 - 练习 3:使用
cases
战术证明n = 0 ∨ n > 0
。
如果您在练习中遇到困难,可以参考 Lean4 的官方文档或社区论坛,那里有丰富的资源和讨论。