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具有可判定等式;标准库和Mathcopmeq\u axiomK
中都有证明。