如何在精益中证明a = b → a + 1 = b + 1?
How to prove a = b → a + 1 = b + 1 in lean?
我正在学习 lean tutorial 的第 4 章。
我希望能够证明简单的等式,例如 a = b → a + 1 = b + 1
而 不必使用 calc 环境。换句话说,我想明确地构造证明项:
example (a b : nat) (H1 : a = b) : a + 1 = b + 1 := sorry
我最好的猜测是我需要使用 eq.subst
和标准库中关于自然数相等性的一些相关引理,但我不知所措。我能找到的最接近的精益示例是:
example (A : Type) (a b : A) (P : A → Prop) (H1 : a = b) (H2 : P a) : P b :=
eq.subst H1 H2
您可以使用 congr_arg
引理
lemma congr_arg {α : Sort u} {β : Sort v} {a₁ a₂ : α} (f : α → β) :
a₁ = a₂ → f a₁ = f a₂
这意味着如果您为函数提供相等的输入,输出值也将相等。
证明是这样的:
example (a b : nat) (H : a = b) : a + 1 = b + 1 :=
congr_arg (λ n, n + 1) H
注意,精益能够推断出我们的函数是λ n, n + 1
,所以证明可以简化为congr_arg _ H
。
虽然 congr_arg
通常是一个很好的解决方案,但这个具体示例确实可以通过 eq.subst
+ higher-order 统一(congr_arg
在内部使用)来解决。
example (a b : nat) (H1 : a = b) : a + 1 = b + 1 :=
eq.subst H1 rfl
更一般化:a = b -> a + c = b + c in a Ring
import algebra.ring
open algebra
variable {A : Type}
variables [s : ring A] (a b c : A)
include s
example (a b c : A) (H1 : a = b) : a + c = b + c :=
eq.subst H1 rfl
既然你有平等(a = b
),你也可以使用战术模式重写目标:
example (a b : nat) (H1 : a = b) : a + 1 = b + 1 :=
by rw H1
有关策略的介绍,请参阅 Chapter 5 of Theorem Proving in Lean。
我正在学习 lean tutorial 的第 4 章。
我希望能够证明简单的等式,例如 a = b → a + 1 = b + 1
而 不必使用 calc 环境。换句话说,我想明确地构造证明项:
example (a b : nat) (H1 : a = b) : a + 1 = b + 1 := sorry
我最好的猜测是我需要使用 eq.subst
和标准库中关于自然数相等性的一些相关引理,但我不知所措。我能找到的最接近的精益示例是:
example (A : Type) (a b : A) (P : A → Prop) (H1 : a = b) (H2 : P a) : P b :=
eq.subst H1 H2
您可以使用 congr_arg
引理
lemma congr_arg {α : Sort u} {β : Sort v} {a₁ a₂ : α} (f : α → β) :
a₁ = a₂ → f a₁ = f a₂
这意味着如果您为函数提供相等的输入,输出值也将相等。
证明是这样的:
example (a b : nat) (H : a = b) : a + 1 = b + 1 :=
congr_arg (λ n, n + 1) H
注意,精益能够推断出我们的函数是λ n, n + 1
,所以证明可以简化为congr_arg _ H
。
虽然 congr_arg
通常是一个很好的解决方案,但这个具体示例确实可以通过 eq.subst
+ higher-order 统一(congr_arg
在内部使用)来解决。
example (a b : nat) (H1 : a = b) : a + 1 = b + 1 :=
eq.subst H1 rfl
更一般化:a = b -> a + c = b + c in a Ring
import algebra.ring
open algebra
variable {A : Type}
variables [s : ring A] (a b c : A)
include s
example (a b c : A) (H1 : a = b) : a + c = b + c :=
eq.subst H1 rfl
既然你有平等(a = b
),你也可以使用战术模式重写目标:
example (a b : nat) (H1 : a = b) : a + 1 = b + 1 :=
by rw H1
有关策略的介绍,请参阅 Chapter 5 of Theorem Proving in Lean。