这个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