Answers:
您无法在“普通” Coq中证明它,因为它基于直觉逻辑:
从证明理论的角度来看,直觉逻辑是经典逻辑的一种局限,在这种逻辑中,排除中和双重否定法则不是有效的逻辑规则。
您可以通过多种方式来处理这种情况。
介绍排除中间定律作为公理:
Axiom excluded_middle : forall P:Prop, P \/ ~ P.
在此之后,不再需要证明任何东西。
介绍一些等效于排除中间定律的公理,并证明它们的等价性。这里只是几个例子。
双重否定消除就是这样一种公理:
Axiom dne : forall P:Prop, ~~P -> P.
皮尔斯定律是另一个例子:
Axiom peirce : forall P Q:Prop, ((P -> Q) -> P) -> P.
或使用De Morgan的法律之一:
Axiom de_morgan_and : forall P Q:Prop, ~(~P /\ ~Q) -> P \/ Q.
Axiom peirce
:就目前而言,这不是皮尔斯的定律(并且实际上是trivial
要证明)。
正如其他人所告知的那样,除非您假设经典逻辑,否则您的重言式不是重言式。但是,由于您要对可确定的真值进行重言式,因此可以使用bool
代替Prop
。然后,您的重言式成立了:
Require Import Bool.
Lemma how_about_bool: forall (p : bool), Is_true (p || negb p).
Proof.
now intros [|].
Qed.
NNPP
的类型是forall p:Prop, ~ ~ p -> p.
,因此使用它来证明是骗人的T7
。导入时,Classical_Prop
您会得到Axiom classic : forall P:Prop, P \/ ~ P.