参数化感应类型

请参见官方用户手册获取此页面上信息的最新版本。

示例

数据类型声明可以依赖于参数。例如,列表的类型在类型A的元素上参数化:

数据列表(A:Set):设置位置[]:列表A_::_:A->列表A->列表A

这将引入构造函数(***注意,这指的是隐式参数!***)

[]:{A:Set}->列表A_::_:{A:Set}->A->列表A->列表A

一个数据类型声明可以依赖于多个参数。例如,Martin-Löf的wellordering类型是一种具有可变分支因子的树类型,定义如下:

data W(A:集合)(B:A->集合):集合,其中sup:(x:A)->(Bx->W A B)->W A B

节点sup x f具有分支类型B x。类型W A B有两个参数:由x:A索引的分支类型族B x和索引集A。

一般形式

参数可以有任意类型,后面的参数可以取决于前面参数的元素(参见W示例)。

(简单)参数化类型声明的一般形式是

数据D(p1:P1)。。。(第页n个:Pn个):设置位置c(c)1:A1...c(c)n个:An个

数据类型的名称D和名称c1, ..., c(c)n个构造函数必须是新的,写入当前签名和上下文。

Agda检查参数类型P1, ..., P(P)n个是写入当前上下文的正确类型。(后面的参数类型可能取决于前面的参数。)它还检查A1, ..., A类n个:设置wrt当前签名和用p扩展的上下文1:P1,... ,第页n个:Pn个.

此外,每个A有表单

(年)1:B1) -> ... -> (年):B)->D p1…第页n个 

其中参数类型为B构造函数的

  • 非传导性的(a)侧面状况)根本没有提到D,
  • 感应的并具有表单
(z)1:C1) -> ... -> (z)k个:Ck个)->D p1…第页n个 

其中D不能出现在任何C中j个.

注意,D的所有出现都是D p的形式1…第页n个-参数如下常数超出定义!在下一节中,我们将介绍“归纳族”(索引集合族)如果不需要这样做。

参数化归纳族和归纳递归类型

下面我们将介绍更一般的数据类型类别:归纳族、归纳-递归类型和归纳-递归族。此类数据类型的声明可以采用与上述类似的方式进行参数化。

页面上次修改时间:2018年12月14日下午06:26
技术支持私人维基