通过Coq中的反例证明

时间:2016-03-01 15:19:48

标签: coq proof quantifiers negation

在命题和谓词演算中证明了数十个引理(一些比其他人更具挑战性,但通常在intro-apply-destruct自动驾驶仪上仍然是可证明的)我打了一个起始w / ~forall并立即被抓住了。显然,我对Coq的理解和知识缺乏。因此,我要求使用低级Coq技术来证明一般形式的陈述

~forall A [B].., C -> D.  
exists A [B].., ~(C -> D).

用语言来说,我希望有一个普通的Coq收件人来设置和解雇反例。 (量化上述函数的主要原因是它是Coq中的一个(或)原始连接词。)如果你想要例子,我建议例如。

~forall P Q: Prop, P -> Q.
~forall P: Prop, P -> ~P.

有一个related question既没有提出也没有回答我的,所以我认为它不是重复的。

1 个答案:

答案 0 :(得分:4)

回想一下,~ P被定义为P -> False。换句话说,为了表明这样的陈述,就足以假设P并导致矛盾。关键的一点是,您可以以任何您喜欢的方式使用P作为假设。在普遍量化的陈述的特定情况下,specialize策略可能会派上用场。这种策略允许我们实例化具有特定值的通用量化变量。例如,

Goal ~ forall P Q, P -> Q.
Proof.
  intros contra.
  specialize (contra True False). (* replace the hypothesis 
                                     by [True -> False] *)
  apply contra. (* At this point the goal becomes [True] *)
  trivial.
Qed.