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 当前环境。
为什么找不到定理?
答案 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]
感兴趣。它采用->
的结论(在所有forall
和prf
的右边),将其与目标进行匹配,并为所有假设提供子目标。另请参阅:the Coq tactic reference。