从我所读到的,eq_rect
和平等似乎是相互关联的。奇怪的是,我无法在手册中找到它的定义。
它来自哪里,它的含义是什么?
答案 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:
的概念莱布尼兹将平等概念描述如下: 给定任何
x
和y
,x = y
当且仅当给出任何谓词P
时,P(x)
当且仅当P(y)
。在这项法律中,{"
P(x)
当且仅当P(y)
"如果P(x)
"可以被削弱为"P(y)
;修改后的法律等同于原件,因为适用于任何x
和y
"同样适用于"任何y
和x
"。
不太正式地说,上面的引文说如果x
和y
相等,那么他们的"行为"因为每个谓词都是一样的。
为了更清楚地看到莱布尼茨的平等与eq_rect
直接对应,我们可以将eq_rect
的参数顺序重新排列为以下等效公式:
eq_rect_reorder
: forall (A : Type) (P : A -> Type) (x y : A),
x = y -> P x -> P y