如果我不导入经典逻辑,你能证明排除中间在Coq中是错误的

时间:2018-04-28 16:04:43

标签: logic coq

我知道在建构的逻辑中,排除中间是不可能的。但是,当我试图在Coq中显示它时,我感到困惑。

Theorem em: forall P : Prop, ~P \/ P -> False.

我的方法是:

intros P H.
unfold not in H.
intuition.

系统说:

2 subgoals
P : Prop
H0 : P -> False
______________________________________(1/2)
False
______________________________________(2/2)
False

我该怎么办? 感谢

2 个答案:

答案 0 :(得分:4)

你想要构建的不是对LEM的否定,LEM会说“存在某些P使EM不能保持”,但声称没有命题是可判定的,这当然会导致琐碎的不一致:

Axiom not_lem : forall (P : Prop), ~ (P \/ ~ P).

Goal False.
now apply (not_lem True); left.

无需使用花哨的双重否定引理;因为这显然是不一致的[想象它会持有!]

LEM的“经典”否定确实是:

Axiom not_lem : exists (P : Prop), ~ (P \/ ~ P).

并且它不可证明[否则EM不可接受],但你可以安全地假设它;但是它对你来说没什么用处。

答案 1 :(得分:2)

无法驳斥Coq中排除中间(LEM)的定律。 让我们假设你证明了你对LEM的反驳。我们通过将其假设为公理来模拟这种情况:

Axiom not_lem : forall (P : Prop), ~ (P \/ ~ P).

但是我们还有一个较弱的LEM版本(双重否定):

Lemma not_not_lem (P : Prop) :
  ~ ~ (P \/ ~ P).
Proof.
  intros nlem. apply nlem.
  right. intros p. apply nlem.
  left. exact p.
Qed.

这两个事实将使Coq的逻辑不一致:

Lemma Coq_would_be_inconsistent :
  False.
Proof.
  apply (not_not_lem True).
  apply not_lem.
Qed.