Types Agda中的尺寸类型是什么?
Agda中的尺寸类型是什么?我曾尝试阅读有关的论文,但由于以下几点而未能继续:Types Agda中的尺寸类型是什么?,types,agda,type-systems,induction,totality,Types,Agda,Type Systems,Induction,Totality,Agda中的尺寸类型是什么?我曾尝试阅读有关的论文,但由于以下几点而未能继续: 为什么数据类型比其大小更通用?据我所知,大小是归纳树的深度 为什么数据类型在其大小上是协变的,即i T_i和模式意味着什么 其思想是,大小类型只是由大小索引的一系列类型,它们本质上是序数。当将归纳类型定义为大小数据时,编译器会检查结果是否为大小正确的类型,例如,SNat中的succ会增加1中的大小。这样,对于大小为S(i:Size)->S的类型,i本质上是大小为i的S元素。我觉得奇怪的是,为什么SNat的零定义是ze
模式意味着什么大小数据
时,编译器会检查结果是否为大小正确的类型,例如,SNat
中的succ
会增加1中的大小。这样,对于大小为S
(i:Size)->S的类型,i
本质上是大小为i
的S
元素。我觉得奇怪的是,为什么SNat
的零定义是zero:(i:Size)->SNat($i)
而不是zero:(i:Size)->SNat($0)
#
相当于T_∞, 没有已知大小界限的T元素的类型;这是子类型预排序中T_i的顶级元素。图案(i>j)用于绑定尺寸j,同时保持j
fun minus : [i : Size] -> SNat i -> SNat # -> SNat i
{ minus i (zero (i > j)) y = zero j
; minus i x (zero .#) = x
; minus i (succ (i > j) x) (succ .# y) = minus j x y
}
首先,签名意味着从最多i个大小的数字中减去任何数字(SNat#
是一个没有大小限制信息的数字)(这就是SNat i
的意思)返回最多i个大小的数字;对于
模式,在最后一行中,我们使用它来匹配最大为j的大小,并且递归调用类型检查,因为子类型:SNat j≤ SNat i