为什么可以使用归纳法中的IHn'(n'= n'+ 0)来证明Coq中的n = n + 0?

时间:2018-08-30 16:05:25

标签: logic coq coq-tactic

在Software Foundations的Logical Foundations中,他们使用归纳的思想来证明事物。通过逐步进行以下证明,很难理解为什么可以用原始假设重写要证明的内容。为什么可以用归纳法得出的IHn'(n'= n'+ 0)来证明n = n + 0?

它们在本质上是否是相同的陈述?

Theorem plus_n_O : ∀ n:nat, n = n + 0.
Proof.
  intros n. induction n as [| n' IHn'].
  - (* n = 0 *) reflexivity.
  - (* n = S n' *) simpl. rewrite <- IHn'. reflexivity. Qed.

Image of proof in CoqIDE

1 个答案:

答案 0 :(得分:3)

它们是相同的陈述,但数字不同:一个大约是n',另一个大约是n,与目标中的S n'相对应。归纳法就是通过知道某事物对S n'成立,来证明某事物对n'是有效的。它们数目不同的事实使得这一点变得微不足道。例如,即使两个语句“相同”,假设S n'是奇数,也不可能显示n'是奇数。

您询问了重写的机制。简化后,您的目标如下所示:

n' : nat
IHn' : n' = n' + O
---------------------------------------
S n' = S (n' + O)

致电rewrite时,是在告诉Coq目标中的n' + O替换为n'。这导致了语句S n' = S n',这是一个简单的等式,可以通过自反性公理来消除。

修改

这是思考归纳的另一种方式。让我们暂时忘记induction策略。有可能证明0 = 0 + 0

Lemma plus_0_0 : 0 = 0 + 0.
Proof. reflexivity. Qed.

我们可以证明有关任何具体自然数的类似陈述:

Lemma plus_1_0 : 1 = 1 + 0.
Proof. reflexivity. Qed.

Lemma plus_2_0 : 2 = 2 + 0.
Proof. reflexivity. Qed.

但是,我们可以以不同的方式获得这些证明,因此对所讨论数字的形状的假设较少。首先,我们证明以下条件语句。

Lemma plus_Sn_0 : forall n', n' = n' + 0 -> S n' = S n' + 0.
Proof. intros n' Hn'. simpl. rewrite <- Hn'. reflexivity. Qed.

这个引理陈述了归纳证明的归纳步骤。请注意,并不是说n = n + 0适用于所有自然数n,而是只适用于n = S n'形式的数字只要 {{1 }}。我们知道这适用于n' = n' + 0,因为我们已经在上面进行了证明。结合n' = 0,我们可以获得plus_Sn_0的另一个证明。

1 = 1 + 0

现在,我们知道该语句适用于Lemma plus_1_0' : 1 = 1 + 0. Proof. apply plus_Sn_0. apply plus_0_0. Qed. ,我们可以对n' = 1起到相同的作用:

n = 2

该证明不直接使用Lemma plus_2_0' : 2 = 2 + 0. Proof. apply plus_Sn_0. apply plus_1_0'. Qed. 这一事实。这就是为什么我们证明基本情况与证明归纳步骤无关的事实:我们只需要知道感兴趣的数字的前身-在这种情况下,这个前身是0 = 0 + 0

自然地,我们可以将1的证明扩展到plus_1_0'的证明中:

plus_2_0'

更一般地说,给定任何自然数常数Lemma plus_2_0'' : 2 = 2 + 0. Proof. apply plus_Sn_0. apply plus_Sn_0. apply plus_0_0. Qed. ,我们可以通过应用n n = n + 0次然后加上plus_Sn_0次来证明n 无归纳 plus_0_0。数学归纳法的原理将这种直观观察推论到表示自然数的 any 表达式n,而不仅仅是常数。