我是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.
答案 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.