Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Types Agda中的尺寸类型是什么?_Types_Agda_Type Systems_Induction_Totality - Fatal编程技术网

Types 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

Agda中的尺寸类型是什么?我曾尝试阅读有关的论文,但由于以下几点而未能继续:

  • 为什么数据类型比其大小更通用?据我所知,大小是归纳树的深度
  • 为什么数据类型在其大小上是协变的,即i T_i和
    模式意味着什么
  • 其思想是,大小类型只是由大小索引的一系列类型,它们本质上是序数。当将归纳类型定义为
    大小数据
    时,编译器会检查结果是否为大小正确的类型,例如,
    SNat
    中的
    succ
    会增加1中的大小。这样,对于大小为
    S
    (i:Size)->S的类型,i
    本质上是大小为
    i
    S
    元素。我觉得奇怪的是,为什么
    SNat
    的零定义是
    zero:(i:Size)->SNat($i)
    而不是
    zero:(i:Size)->SNat($0)
  • 对于大小感应类型,这是有意义的,因为T_i是T的元素类型,其大小小于i,因此如果i≤ j然后T_i≤ T_j;构造函数必须增加递归调用的大小
  • 如第2.3节所述,
    #
    相当于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