我知道在建构的逻辑中,排除中间是不可能的。但是,当我试图在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
我该怎么办? 感谢
答案 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.