如何在 LEAN theorem prover 中证明数学归纳公式?
How to prove mathematical induction formulae in LEAN theorem prover?
谁能帮我理解如何写一个可以很容易通过归纳得到的简单结果的证明,例如前n
个自然数之和的公式:1+2+...+n = n(n+1)/2
, 使用 LEAN 定理证明器?
这是我的证明。您需要 mathlib 才能正常工作。
import algebra.big_operators tactic.ring
open finset
example (n : ℕ) : 2 * (range (n + 1)).sum id = n * (n + 1) :=
begin
induction n with n ih,
{ refl },
{ rw [sum_range_succ, mul_add, ih, id.def, nat.succ_eq_add_one],
ring }
end
range (n + 1)
是小于n + 1
的自然数集合,即0到n。
我使用了finset.sum
函数。如果 s
是一个鳍集并且 f
是一个函数,那么
s.sum f
是 $\sum_{x \in s} f(x)$.
induction
策略进行归纳。那么有两种情况。 n = 0
的情况可以用 refl
来完成,因为这只不过是一个计算。
归纳步骤可以用rw
完成。使用 VSCode,您可以在我的证明中的每个逗号后单击以查看每个 rw
的作用。这使其成为 ring
策略将解决的形式。
谁能帮我理解如何写一个可以很容易通过归纳得到的简单结果的证明,例如前n
个自然数之和的公式:1+2+...+n = n(n+1)/2
, 使用 LEAN 定理证明器?
这是我的证明。您需要 mathlib 才能正常工作。
import algebra.big_operators tactic.ring
open finset
example (n : ℕ) : 2 * (range (n + 1)).sum id = n * (n + 1) :=
begin
induction n with n ih,
{ refl },
{ rw [sum_range_succ, mul_add, ih, id.def, nat.succ_eq_add_one],
ring }
end
range (n + 1)
是小于n + 1
的自然数集合,即0到n。
我使用了finset.sum
函数。如果 s
是一个鳍集并且 f
是一个函数,那么
s.sum f
是 $\sum_{x \in s} f(x)$.
induction
策略进行归纳。那么有两种情况。 n = 0
的情况可以用 refl
来完成,因为这只不过是一个计算。
归纳步骤可以用rw
完成。使用 VSCode,您可以在我的证明中的每个逗号后单击以查看每个 rw
的作用。这使其成为 ring
策略将解决的形式。