据我所了解,eq_rect
和等式密切相关。奇怪的是,我在手册上找不到它的定义。
它来自哪里?它的意思是什么?
Locate eq_rect
,您会发现eq_rect
位于Coq.Init.Logic
中,但是如果您查看该文件,其中没有eq_rect
。那么,这是怎么回事呢?_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
你需要理解莱布尼茨等式的概念:
莱布尼茨将等式的概念描述如下: 对于任意的
x
和y
,当且仅当对于任意的谓词P
,P(x)
等价于P(y)
,则有x = 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
_ind
是归纳原理。_rec
是什么? - Siddharth BhatP
的类型:对于eq_rect
,它是A -> Type
,对于eq_ind
,它是A -> Prop
,而对于eq_rec
,它是A -> Set
。实际上,eq_rec
只是eq_rect
的一个特例,您可以使用Print eq_rec
进行检查。 - Anton TrunovScheme eq_rect := Minimality for eq Sort Type
、Scheme eq_rec := Minimality for eq Sort Set
、Scheme eq_ind := Minimality for eq Sort Prop
的方式生成这些原则。还有一些依赖版本,您可以将Minimality
替换为Induction
,并获得诸如forall (A : Type) (x : A) (P : forall a : A, x = a -> Type), P x eq_refl -> forall (y : A) (e : x = y), P y e
这样的方案。我相信 Coq 会自动选择在Prop
中归纳的Minimality
,而在落入Set
和Type
中的归纳中选择Induction
。 - Jason Gross