是否有一种简单的方法来证明Coq中的以下内容,例如仅使用假设?
(P -> (Q /\ R)) -> (~Q) -> ~P
答案 0 :(得分:0)
问题有点含糊……您是否想知道(是),答案是什么(请参见上面的亚瑟评论),或者如何考虑解决这些问题?
在后一种情况下,请记住目标是创建具有指定类型的“ lambda项”。您可以使用“策略”来帮助您构筑“从内而外”的术语。最好是手动操作几次,以了解正在发生的事情以及该策略的实际作用,我认为这是为什么要进行此练习。
如果您查看示例,
(P -> (Q /\ R)) -> (~Q) -> ~P
您可以看到它是三个(!)参数的函数。这是因为最后一个类型~P
的确是P -> False
,所以您需要创建的函数的参数的类型是
P -> (Q /\ R)
Q -> False
P
并且该函数应构造类型
的术语False
您可以创建一个术语fun A B C => _
,其中A, B, C
具有上述类型(这是策略intros
的作用),并且您需要提出一个应该使用的术语通过结合术语_
和原始Gallina结构,将其插入孔A, B, C
中。
在这种情况下,当您设法创建类型为Q /\ R
的术语时,您将必须对其进行“销毁”以获得类型为Q
的术语,(提示:为此,您将拥有使用match
结构)。
希望这不会破坏乐趣!