繁体   English   中英

如何证明排除中间在Coq中无可辩驳?

[英]How to prove excluded middle is irrefutable in Coq?

我试图从一个排除中间的在线课程中证明以下简单定理是无可辩驳的,但在第1步被卡住了:

Theorem excluded_middle_irrefutable: forall (P:Prop), ~~(P \/ ~ P).
Proof.
  intros P. unfold not. intros H.

现在我得到:

1 subgoals
P : Prop
H : P \/ (P -> False) -> False
______________________________________(1/1)
False

如果我apply H ,那么目标就是P \\/ ~P ,它被排除在中间,无法建设性地证明。 但除了apply ,我不知道可以做什么关于假设P \\/ (P -> False) -> False :暗示->是原始的,我不知道如何destruct或分解它。 这是唯一的假设。

我的问题是,如何才能使用原始战术证明这一点( 如此处所表征的 ,即没有神秘的auto )?

谢谢。

我不是这方面的专家,但最近在Coq邮件列表上进行了讨论。 我将从这个帖子中总结出结论。 如果你想更彻底地理解这些问题,你应该看看双重否定翻译

问题属于直觉主义命题演算,因此可以由tauto决定。

Theorem excluded_middle_irrefutable: forall (P:Prop), ~~(P \/ ~ P).
  tauto.
Qed.

该线程还提供了更精细的证据。 我将尝试解释如何提出这个证据。 请注意,我通常更容易处理lemmas的编程语言解释,所以这就是我要做的:

Theorem excluded_middle_irrefutable: forall (P:Prop), ~~(P \/ ~ P).
  unfold not.
  intros P f.

我们被要求编写一个函数,它接受函数f并产生一个False类型的值。 此时获取False的唯一方法是调用函数f

 apply f.

因此,我们被要求提供函数f的参数。 我们有两个选择,传递PP -> False 我没有看到构建P所以我选择了第二个选项。

  right.
  intro p.

我们回到了第一个方向,除了我们现在有一个合作p 因此我们应用f因为这是我们唯一可以做的事情。

  apply f.

再次,我们被要求提供f的论点。 现在这很容易,因为我们有一个p可以使用。

  left.
  apply p.
Qed. 

该线程还提到了一个基于一些更简单的引理的证明。 第一个引理是~(P /\\ ~P)

Lemma lma (P:Prop) : ~(P /\ ~P).
  unfold not.
  intros H.
  destruct H as [p].
  apply H.
  apply p.
Qed.

第二个引理是~(P \\/ Q) -> ~P /\\ ~Q

Lemma lma' (P Q:Prop) : ~(P \/ Q) -> ~P /\ ~Q.
  unfold not.
  intros H.
  constructor.
  - intro p.
    apply H.
    left.
    apply p.
  - intro q.
    apply H.
    right.
    apply q.
Qed.   

这些lemmas足以显示:

Theorem excluded_middle_irrefutable: forall (P:Prop), ~~(P \/ ~ P).
  intros P H.
  apply lma' in H.
  apply lma in H.
  apply H.
Qed.

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM