为什么此coq程序无法运行?

时间:2020-03-18 09:09:05

标签: coq

我是Coq的初学者,正在学习如何使用视频https://www.youtube.com/watch?v=oJm5TH0GdSo&list=PLt7hcIEdZLAnCoZePG60qgVP4ddP0s3WZ&index=2编写代码。

我在该视频之后制作了一个程序(一个从29分钟的视频开始),但是没有按预期运行。你能告诉我为什么会这样吗?我总是被卡斯卡住。

我制作的程序如下:

Theorem shugouonajidesho : 
  forall P Q : Prop,
    P/\Q->Q/\P.
Proof. 
  intros P Q H. split.
  Case "Q".
  inversion H as [HP HQ]. imply HQ.
  Case "P".  inversion H as {HP HQ]. imply HP. 
Qed.

1 个答案:

答案 0 :(得分:0)

您的证明中有三个问题,但它们大多是句法上的。

Case "Q"Case "P"语法来自Software Foundations。您需要导入some particular library才能使用它。如果您不想这样做,则没有必要。要聚焦目标,可以使用项目符号(通常为-+*)。也有其他方法,但这是最典型的。

imply策略不存在(至少在标准库中)。但是,您使用它的方式使我认为您的意思是apply

inversion H as {HP HQ].中,两个方括号都应为方括号。


进行这些更改可以使该定理起作用,但我还建议针对习惯用法进行一些更改。

在这里使用inversion可能会过大。您要做的只是将连接分解为各个部分,因此destruct H as [HP HQ].也可以正常工作。

我也强烈建议您使用换行符将证明分开,而不是将所有内容都放在一行上(这可能只是问题格式的一种人工产物。如果是这样,请忽略这一点)。将一些策略放在同一行是可以的,但是应该将其分为逻辑部分。

最后,一个较小的问题:我建议在->周围放置空格。它只是使事情更容易阅读。

Theorem shugouonajidesho: forall P Q : Prop, P/\Q -> Q/\P.
Proof.
  intros P Q H.
  split.
  - inversion H as [HP HQ].
    apply HQ.
  - inversion H as [HP HQ].
    apply HP.
Qed.