缺失的德摩根定律

The missing De Morgan's law

Coq 使用建设性逻辑,这意味着如果您尝试填写 德摩根定律,你最终会错过 2。 也就是说,你无法证明:

Theorem deMorgan_nand P Q (andPQ : ~(P /\ Q)) : P \/ Q.
Abort.

Theorem deMorgan_nall {A} (P : A -> Prop) (allPa : ~forall a, P a) : exists a, ~P a.
Abort.

这是有道理的,因为你必须计算它是否是 or 的左项或右项,一般情况下是做不到的。

正在看 “建设性世界的经典数学” (https://arxiv.org/pdf/1008.1213.pdf) 有定义

Definition orW P Q := ~(~P /\ ~Q).
Definition exW {A} (P : A -> Prop) := ~forall a, ~P a.

类似于德摩根定律。这表明了另一种表述方式。

Theorem deMorgan_nand P Q (andPQ : ~(P /\ Q)) : orW (~P) (~Q).
  hnf; intros nnPQ; destruct nnPQ as [ nnP nnQ ].
  apply nnP; clear nnP; hnf; intros p.
  apply nnQ; clear nnQ; hnf; intros q.
  apply (andPQ (conj p q)).  
Qed.

Theorem deMorgan_nall {A} (P : A -> Prop) (allPa : ~forall a, P a) : exW (fun a => ~P a).
Abort.

但是,它不适用于否定 forall。特别是,它卡在 试图将 ~~P a 转换为 P a。所以,尽管在 nand 的情况下 将 ~~P 转换为 P,它似乎不适用于 forall。 您还可以证明 a 的某些元素具有 P a.

同样,你可以尝试显示

Theorem deMorgan_nexn {A} (P : A -> Prop) (exPa : ~exists a, ~P a) : ~~forall a, P a.
Abort.

但是一旦你有了论点a,它就会陷入困境, 结论不再是False,所以不能用~~P -> P.

所以,如果你不能证明deMorgan_nall,有没有类似的定理? 还是 ~forall a, P a 已经尽可能简化了? 更一般地,当结论是 False 时,允许使用 排中律 (P \/ ~P)。有没有对应的 到当命题进行论证时有效的那个,那就是 P : A -> Prop 而不是 P : Prop ?

您要查找的原理称为 double negation shift。一般来说,它在直觉逻辑中有效。尽管起初看起来相当无害,但由于它的结论是一个双重否定公式,它实际上非常有效。事实上,DNS 本质上是通过双重否定翻译来解释选择公理所需要的。

scubed编辑:

所以,这意味着我必须添加一个公理来处理这种情况。使用公理,

Axiom deMorgan_allnn : forall {A} (P : A -> Prop) (allPa : forall a, ~~P a), ~~forall a, P a.

Theorem deMorgan_nall {A} (P : A -> Prop) (allPa : ~forall a, P a) : exW (fun a => ~P a).
  hnf; intros ex1; apply deMorgan_allnn in ex1.
  apply ex1; clear ex1; hnf; intros all2.
  apply (allPa all2).
Qed.