不能使用PeanoNat.Nat.add_assoc作为证据

时间:2019-06-13 15:37:21

标签: coq

Require Import PeanoNat.

Check PeanoNat.Nat.add_assoc.

输出:

Nat.add_assoc
     : forall n m p : nat, n + (m + p) = n + m + p

因此,定理已定义。

但是当我创建一个定理并尝试使用它时,会出现错误:

Theorem a : forall a b c d e f,
    a + b + c + d + e = f.
Proof.
  intros.
  PeanoNat.Nat.add_assoc a (b + c) d.
  

错误:在以下位置找不到引用PeanoNat.Nat.add_assoc   当前环境。

为什么找不到定理?

1 个答案:

答案 0 :(得分:1)

Proof.之后不是证明本身。这是一系列称为策略的指令,告诉Coq如何构建证明。 add_assoc是一种证明,不是构建证明的策略。您将使用策略rewrite (Nat.add_assoc a (b + c) d)根据相等性重写目标的任何部分

Nat.add_assoc a (b + c) d
  : a + (b + c + d) = a + (b + c) + d

但是,您的目标a + b + c + d + e = f不包含以下两个术语中的任何一个-+都具有关联性,而您的目标实际上是(((a + b) + c) + d) + e = f-因此该策略将失败。实际上,您的目标是无法证明的,但是我认为这只是举例。您可能还对策略apply [prf]感兴趣。它采用->的结论(在所有forallprf的右边),将其与目标进行匹配,并为所有假设提供子目标。另请参阅:the Coq tactic reference