如何轻松地在Coq中证明以下内容,例如仅使用假设?

时间:2019-02-24 22:14:34

标签: logic coq

是否有一种简单的方法来证明Coq中的以下内容,例如仅使用假设?

(P -> (Q /\ R)) -> (~Q) -> ~P

1 个答案:

答案 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结构)。

希望这不会破坏乐趣!