(true = true)的所有证明都是一样的吗?

时间:2018-06-13 23:29:03

标签: coq

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

Lemma bool_uip (H1 : true = true): H1 = eq_refl true.

即。 true = true的所有证据是否相同?

以下是例如forall c (H1 H2: c = true), H1 = H2.

不必添加任何公理(如UIP)会很好。我发现以下帖子暗示可能是这种情况:

Proof in COQ that equality is reflexivity

1 个答案:

答案 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 = bin子句),并在每个分支中实例化索引b

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

我们可以使用相同的技术来证明身份证明的唯一性,无论什么类型的" equalees" (这里true类型bool)是可判定的。