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

Logic 如何证明排除中间在Coq中是无可辩驳的?,logic,coq,coq-tactic,Logic,Coq,Coq Tactic,我试图从排除的中间证明以下简单定理是无可辩驳的,但在步骤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中几乎被卡住了:

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
如果我
应用H
,那么目标将是
p\/~p
,这被排除在中间,无法得到建设性的证明。但是除了应用之外,我不知道如何处理假设
P\/(P->False)->False
:隐含
->
是原始的,我不知道如何
分解它。这是唯一的假设

我的问题是,仅使用原始策略(即没有神秘的
auto
s)如何证明这一点


谢谢。

我不是这方面的专家,但最近在网上讨论过。我将总结这条线索的结论。如果你想更彻底地理解这类问题,你应该看看

这个问题属于直觉命题演算的范畴,因此可以由

该线程还提供了一个更详细的证明。我将试图解释我是如何得出这个证据的。请注意,对于我来说,处理引理的编程语言解释通常更容易,所以我将这样做:

Theorem excluded_middle_irrefutable: forall (P:Prop), ~~(P \/ ~ P).
  unfold not.
  intros P f.
我们被要求编写一个函数,该函数接受函数
f
,并生成类型为
False
的值。此时到达
False
的唯一方法是调用函数
f

 apply f.
因此,我们需要为函数
f
提供参数。我们有两种选择,要么通过
P
,要么通过
P->False
。我看不到构造
P
的方法,所以我选择了第二个选项

  right.
  intro p.
我们回到了原点,除了我们现在有一个
p
要处理! 所以我们应用
f
,因为这是我们唯一能做的事情

  apply f.
再次,我们被要求向
f
提供参数。不过现在这很容易,因为我们有一个
p
可以使用

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

第二个引理是
~(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.   
这些引理足以说明:

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

+1感谢指针。这是广告宣传的。但正如邮件列表所说,它仍然是神秘的。(邮件列表中的解释是用非英语字符书写的,数学部分确实很难阅读)。你有没有可能用英语来解释大局?也许看看这个证明词(用
tauto
和一些简化创建)会有一些意义:
Check-fun(P:Prop)(H:~(P\/~P))=>False\ind-False(H)(或_-intor(fun-H0=>H(或_-introl H0))。
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.   
Theorem excluded_middle_irrefutable: forall (P:Prop), ~~(P \/ ~ P).
  intros P H.
  apply lma' in H.
  apply lma in H.
  apply H.
Qed.