繁体   English   中英

Agda中有哪些大小的类型?

[英]What are sized types in Agda?

Agda中有哪些大小的类型? 我试图阅读有关MiniAgda的文章,但由于以下几点未能继续:

  1. 为什么数据类型超出其大小? 据我所知,大小是感应树的深度。
  2. 为什么数据类型在其大小上是协变的,即i <= j - > T_i <= T_j?
  3. >#模式意味着什么?
  1. 这个想法是一个大小的类型只是一个由大小索引的类型系列,它们基本上是序数。 当将归纳类型定义为sized data ,编译器会检查结果是否是具有正确大小的类型,例如, SNat succ SNat增加1的大小。这样,对于大小类型S (i : Size) -> S i本质上是尺寸为iS元素。 我觉得奇怪的是为什么SNatzero : (i : Size) -> SNat ($ i)定义zero : (i : Size) -> SNat ($ i)而不是zero : (i : Size) -> SNat ($ 0)
  2. 对于大小的电感类型,这是有意义的,因为T_i是尺寸小于 i的T的元素类型,因此如果i≤j则T_i≤T_j; 构造函数必须增加递归调用的大小。
  3. 如2.3节所述, #相当于T_∞,T的元素类型没有已知的大小限制; 这是子类型预订中T_i的顶级元素。 模式(i> j)用于绑定大小j,同时保持j <i的信息。 文章中关于减号的例子清楚地说明了这一点:

     fun minus : [i : Size] -> SNat i -> SNat # -> SNat i { minus i (zero (i > j)) y = zero j ; minus ix (zero .#) = x ; minus i (succ (i > j) x) (succ .# y) = minus jxy } 

    首先,签名意味着减去任意数量( SNat #是一个没有大小限制信息的数字)来自多个大小的数量i(这就是SNat i所说的SNat i )最多返回一个大小的数量i; 对于>模式,在最后一行,我们使用它来匹配最多j的数量,并且由于子类型,递归调用类型检查: SNat j ≤ SNat i

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM