数据类型和函数定义

函数可以通过给出类型和定义来引入。例如多态身份函数可以定义为

id:{A:Set}->A->Aid x=x

请注意隐式论证在左手边。如在lambda抽象可以通过将其括在花括号中显式给出:

id:{A:Set}->A->Aid{A}x=x

数据类型由引入数据声明。例如,天然数字可以定义为

data Nat:设置位置零:自然例如:Nat->Nat

为确保正常化,归纳事件必须严格为正数位置。例如,不允许使用以下数据类型:

数据错误:设置位置坏:(->坏)->坏

因为在对构造函数。

可以使用模式匹配和结构递归。自然数的加法函数定义为

_+_:自然->自然->自然零+米=米suc n+m=suc(n+m)

这个运算符窗体可用于左侧和右侧在这里可以看到。

数据类型可以通过参数望远镜进行参数化。这些是写的在构造函数上的数据类型和范围的名称之后。

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

这将介绍构造函数

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

我们还可以定义数据类型族。对于例如,自然数上的族n个证明n个是均匀的。

data IsEven:Nat->设置位置evenZ:IsEven零evenSS:(n:Nat)->IsEven n->IsEver(suc(suc n))

注意第一个的左侧和右侧之间的差异:.左侧显示的类型是参数和构造函数的作用域。这些必须在构造函数的返回类型中保持不变。类型右边是不在施工人员范围内的指标,和在构造函数返回类型中接受任意值。

什么时候?模式匹配关于归纳族的一个元素,我们得到了信息关于索引。收件人区分由模式匹配确定的模式部分(无法访问的模式)和构成实际模式的部分匹配时,不可访问的模式以点作为前缀。例如,我们可以证明两个偶数之和也是偶数。

偶数+:(n m:Nat)->IsEven n->IsEver m->IsEvan(n+m)偶数+.0m偶数Z em=em偶数+。(suc(sucn))m(均匀SS n en)em=evenSS(n+m)(偶数+n m en em)

该证明是通过对以下证明的递归进行的n个是均匀的。上的模式匹配这个证明将迫使n个因此n个前缀为点,表示它们不是模式匹配的一部分。在这种情况下,我们可以n个隐式并将证明写为

偶数+:{nm:Nat}->IsEven n->IsEven m->IsEver(n+m)偶数+evenZ em=em偶数+(偶数SS n en)em=偶数SS _(偶数+en em)
页面上次修改时间:2007年10月19日上午10:01
由提供动力私人维基