在几个参数的coq中应用原生归纳原理

时间:2015-03-11 10:20:57

标签: coq induction

我正在阅读软件基金会这本书。在“更多关于归纳”一章中,作者讨论了当定义归纳类型时由coq生成的归纳原理。

练习如下。在定义中封装“+”的关联概念,然后在其上应用nat_ind。

我对该定义的第一个猜测如下:

Definition P_plusassoc (n m o:nat) : Prop :=
  n + (m+ o) = (n+m) +o.

但是,当我想证明这一点时,我遇到了问题:

Theorem plus_assoct : forall o m n, P_plusassoc n m o.
Proof.
  apply nat_ind.

nat_ind不起作用。所以我认为这是因为P_plusassoc不仅仅依赖于一个整数而是三个。

所以我用这种方式重写P_plusassoc

Definition P_plusassoc (n:nat) : nat->nat->Prop :=
      fun (m o:nat) => n + (m+ o) = (n+m) +o.

但它仍然无效。问题出在哪儿 ?如何定义P_plusassoc以使用nat_ind

2 个答案:

答案 0 :(得分:1)

这本书给出了答案。定义可以是:

Definition P_plusassoc (n:nat) : Prop :=
      forall m o, n + (m+ o) = (n+m) +o.

答案 1 :(得分:0)

这个问题希望你证明一个引理。但是,您正在定义一个函数。你应该做的是定义类型为Prop的东西(如Definition P_plusassoc (n:nat) : Prop := forall m o, n + (m+ o) = (n+m) +o.)。

就个人而言,我会定义一个Lemma : forall m n o :nat, n+(m+o)=(n+m)+o. Coq然后会让你证明这个引理,你可以通过intros. apply (nat_ind n).

来做