我可以在Coq
中证明以下内容吗?
Lemma bool_uip (H1 : true = true): H1 = eq_refl true.
即。 true = true
的所有证据是否相同?
以下是例如forall c (H1 H2: c = true), H1 = H2.
不必添加任何公理(如UIP)会很好。我发现以下帖子暗示可能是这种情况:
答案 0 :(得分:5)
这是一个明确的术语。
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
(in
子句),并在每个分支中实例化索引b
。
要克服的主要障碍是这种泛化H1 : true = b
使结果类型H1 = eq_refl true
不再是良好类型(双方有不同的类型)。解决方案是在b
上进行模式匹配以重新排列类型(在一个分支中;另一个分支未使用,我们实际上可以放置任何内容而不是False
)。
我们可以使用相同的技术来证明身份证明的唯一性,无论什么类型的" equalees" (这里true
类型bool
)是可判定的。