Coq中的简单身份

时间:2016-09-24 09:06:43

标签: coq theorem-proving

我可能遗漏了一些基本的东西。

我可以证明以下“身份”:

Theorem identity_simple : forall a : Prop, a -> a.

intro. intro. assumption.

然而,我似乎无法证明:

Theorem identity : forall a : Prop, a.

当然我可以做intro,但这让我失望:

a : Prop
_________(1/1)
a

我不知道该怎么办。
第一种形式似乎是多余的,表明对于所有aa暗示a

1 个答案:

答案 0 :(得分:6)

forall a : Prop, a -> a.

读作“给定一些命题的证明a我们可以构建同一命题的证明”。这是真的,因为我们可以返回原始证明。

让我们用Coq检查:

Print identity_simple.
(* 
output:

identity_simple = fun (a : Prop) (H : a) => H
     : forall a : Prop, a -> a
*)

证明词fun (a : Prop) (H : a) => H完全表达了所描述的行为。

  

第一种形式似乎是多余的,要说明对于所有aa暗示a

从某种意义上说,你是对的 - 非常明显。您可以将其视为测试 - 如果您无法证明它,那么逻辑肯定存在问题。

<小时/>

forall a : Prop, a.

读作“我们可以构建任何命题的证明”。这不是真的,因为例如,你不能构造False的证据(在空的上下文中)。这将是一场灾难 - 我们不希望使用所有可证明的逻辑。