Coq (真=真)的所有证明都一样吗?

Coq (真=真)的所有证明都一样吗?,coq,Coq,我可以在Coq中证明以下内容吗 Lemma bool_uip (H1 : true = true): H1 = eq_refl true. i、 e.true=true的所有证明是否相同 例如,对于所有c(H1-H2:c=true),H1=H2,它遵循 不必添加任何公理(如UIP)就好了。我发现以下线索表明可能是这样的: 这里有一个作为明确术语编写的证明 Definition bool_uip (H1 : true = true): H1 = eq_refl true := match H

我可以在
Coq
中证明以下内容吗

Lemma bool_uip (H1 : true = true): H1 = eq_refl true.
i、 e.
true=true
的所有证明是否相同

例如,对于所有c(H1-H2:c=true),H1=H2,它遵循

不必添加任何公理(如UIP)就好了。我发现以下线索表明可能是这样的:


这里有一个作为明确术语编写的证明

Definition bool_uip (H1 : true = true): H1 = eq_refl true :=
  match H1 as H in _ = b
        return match b return (_ = b) -> Prop with
               | true => fun H => H = eq_refl true
               | false => fun _ => False
               end H with
  | eq_refl => eq_refl
  end.
H1:true=
的类型是一个索引(
)的归纳类型。模式匹配首先将该类型泛化为
true=b
子句中的
),并在每个分支中实例化索引
b

要克服的主要障碍是,这种泛化使得结果类型不再具有良好的类型(双方有不同的类型)。解决方案是在
b
上进行模式匹配,以重新对齐类型(在一个分支中;另一个分支未使用,实际上我们可以放置任何内容,而不是
False


我们可以使用同样的技术来证明身份证明的唯一性,只要“equales”(这里是
true
类型
bool
)的类型是可判定的。

例如,这个证明是图书馆的一个中心支柱。在Coq中,对于任何类型
a
,UIP具有可判定等式;标准库和Mathcopm
eq\u axiomK
中都有证明。