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
has
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
?