类型2007年暑期学校

这个2007年暑期学校类型8月19日至31日在意大利贝蒂诺罗举行。

课堂上的例子可以在这里找到:示例/暑期学校07/讲座

练习

1.自然数

1.1. 定义的数据类型国家带构造函数的自然数苏克.

1.2. 定义加法函数_+_在自然数上,通过对第一个参数的递归。

1.3. 定义乘法。

1.4. 给定身份类型

data_==_{A:Set}(x:A):A->设置位置回流:x==x

证明3+是结合的,即给出一个函数

关联:(xyz:Nat)->(x+(y+z))==((x+y)+z)

2.矢量

向量是固定长度的列表:

data Vec(A:设置):自然->设置位置ε:Vec A零_►_:{n:Nat}->A->Vec A n->Vec A(例如)

2.1. 定义函数血管内皮细胞它计算所有元素都相同的向量。

向量:{A:Set}{n:Nat}->A->向量A n

提示:您需要对n执行递归

2.2. 定义函数_<*>_将函数向量指向参数向量。

__:{AB:集合}{n:Nat}->Vec(A->B)n->Vec A n->Vec B n

2.3. 使用血管内皮细胞_<*>_定义函数

地图:{AB:Set}{n:Nat}->(A->B)->Vec A n->Vec B n

2.4. 使用血管内皮细胞_<*>_定义函数

zip:{ABC:Set}{n:Nat}->(A->B->C)->Vec A n->Vec B n->Vec C n

3.有限集

按大小索引的有限集族定义为:

data Fin:Nat->设置位置fzero:{n:Nat}->Fin(例如n)fsuc:{n:Nat}->Fin n->Fin(例如n)

的元素财务报表n自然数小于吗n个(但构造函数的名称不同)。

3.1. 显示中没有元素翅片归零,即给定一个函数

空:Fin zero->False

哪里

data False:设置位置

是空数据类型。提示:使用荒谬的模式().

3.2. 我们可以使用有限集的元素作为向量中的位置。定义查找函数

_!_ : {A:集合}{n:Nat}->Vec A n->Fin n->A

3.3. 事实上,_!_是之间的同构兽医翅片n->A.定义其反转

表格:{A:Set}{n:Nat}->(Fin n->A)->Vec A n

4.列表上的谓词

列表数据类型由

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

4.1. 定义地图_++_用于列表。

映射:{AB:Set}->(A->B)->列表A->B_++_:{A:Set}->列表A->列表A->List A

4.2. 定义数据类型族所有P这证明了P(P)保留列表的所有元素

data All{A:Set}(P:A->Set):列表A->Set where

4.3. 定义数据类型族一些P这证明了P(P)保留列表的某些元素

数据某些{A:Set}(P:A->Set):列出A->Set其中

4.4. 陈述并证明关于相互作用的一些有趣的引理全部有些和列表函数地图_++_.

4.5. 根据定义列表成员身份有些.

_∈_:{A:Set}->A->List A->Set

提示:您需要使用练习1.4中的身份类型。

4.6. 我们可以将自然数定义为列表:

record True:设置位置tt:对tt=记录{}--True的唯一元素Nat=列表正确零:自然零=[]例如:Nat->Natsuc n=tt::n

现在定义Vec公司翅片使用全部有些.

4.7. 依赖对可以定义为

data_×_(A:设置)(B:A->设置):设置,其中_,_:(x:A)->B x->A×B

我们可以恢复简单类型的对:

_∧_:(A B:集合)->集合A∧B=A×\_->B

现在如果你知道所有Pxs一些Q-xs然后你可以得到一个A类使两者都满意P(P)。通过定义以下查找函数来证明这一点:

_!_ : {A:Set}{P:A->Set}{Q:A->Set}{xs:List A}->所有P xs->Some Q xs->A×(\z->P z∧Q z)

4.8. (更努力)对于可判定谓词,它要么对列表中的每个元素都有效,要么对某个元素无效。鉴于

_:设置->设置P=P->错误data_∨_(A B:设置):设置位置inl:A->A∨Binr:B->A∨Bdata Bool:设置位置假:布尔真的:布尔data IsTrue:Bool->设置位置isTrue:isTrue为true保持:{A:Set}->(A->Bool)->A->Set保持px=IsTrue(px)

定义函数全部的:

全部:{A:Set}(p:A->Bool)(xs:List A)->所有(保持p)xs∨某些(\x->-保持p x)xs

提示:您可能会找到该函数决定有益的

决定:{A:Set}(p:A->Bool)(x:A)->Holds px∧-Holds px
页面上次修改时间:2019年10月29日上午09:31
技术支持私人维基