在具有多个参数的coq中应用本机归纳原理 我正在读《软件基金会》。在“更多关于归纳”一章中,作者讨论了定义归纳类型时coq产生的归纳原理

在具有多个参数的coq中应用本机归纳原理 我正在读《软件基金会》。在“更多关于归纳”一章中,作者讨论了定义归纳类型时coq产生的归纳原理,coq,induction,Coq,Induction,练习如下。在定义中封装“+”的关联概念,然后对其应用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\u ind不起作用。所以我认为这是因为P_plu

练习如下。在定义中封装“+”的关联概念,然后对其应用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\u ind
不起作用。所以我认为这是因为P_plusassoc不仅仅依赖于一个整数,而是依赖于三个整数

因此,我重写了
p_plusassoc
如下:

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

但它仍然不起作用。问题在哪里?我如何定义
P\u plusassoc
以使用
nat\u ind

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

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

这个问题需要你证明一个引理。但是,您正在定义一个函数。您应该做的是定义Prop类型的东西(比如
定义P_plusassoc(n:nat):Prop:=对于所有的mo,n+(m+o)=(n+m)+o.

就个人而言,我会定义一个
引理:对于所有的mno:nat,n+(m+o)=(n+m)+o。
Coq将允许你证明这个引理,你可以通过
介绍来做。应用(自然索引)。