什么是eq_rect以及它在Coq中定义的位置?

时间:2018-01-20 05:35:40

标签: equality coq

从我所读到的,eq_rect和平等似乎是相互关联的。奇怪的是,我无法在手册中找到它的定义。

它来自哪里,它的含义是什么?

1 个答案:

答案 0 :(得分:4)

如果您使用Locate eq_rect,则会发现eq_rect位于Coq.Init.Logic,但如果您查看该文件,则其中没有eq_rect。那么,发生了什么?

当您定义归纳类型时,Coq在很多情况下会自动为您生成 3归纳原则,并将_rect_rec_ind添加到名称中类型。

要了解eq_rect表示您需要其类型的内容,

Check eq_rect.

我们走了:

eq_rect
     : forall (A : Type) (x : A) (P : A -> Type),
       P x -> forall y : A, x = y -> P y

您需要了解Leibniz's equality

的概念
  

莱布尼兹将平等概念描述如下:   给定任何xyx = y当且仅当给出任何谓词P时,P(x)当且仅当P(y)

     

在这项法律中,{" P(x)当且仅当P(y)"如果P(x)"可以被削弱为" P(y);修改后的法律等同于原件,因为适用于任何xy"同样适用于"任何yx"。

不太正式地说,上面的引文说如果xy相等,那么他们的"行为"因为每个谓词都是一样的。

为了更清楚地看到莱布尼茨的平等与eq_rect直接对应,我们可以将eq_rect的参数顺序重新排列为以下等效公式:

eq_rect_reorder
     : forall (A : Type) (P : A -> Type) (x y : A), 
         x = y -> P x -> P y