我是Agda的新手。我正在阅读Ana Bove和Peter Dybjer的论文“工作中的依赖类型”。我不理解有限集的讨论(我的副本中的第15页)。
本文定义了Fin
类型:
data Fin : Nat -> Set where
fzero : {n : Nat} -> Fin (succ n)
fsucc : {n : Nat} -> Fin n -> Fin (succ n)
我必须遗漏一些明显的东西。我不明白这个定义是如何工作的。有人可以简单地将Fin
的定义翻译成日常英语吗?这可能就是我需要理解本文的这一部分。
感谢您抽出宝贵时间阅读我的问题。我很感激。
答案 0 :(得分:21)
data Fin : Nat -> Set where
Fin是一个由自然数参数化的数据类型(或:Fin
是一个类型级函数,它接受Nat
并返回Set
(基本类型),即任何自然数n
Fin n
都是Set
)。
fzero : {n : Nat} -> Fin (succ n)
对于所有自然数n
fzero
是类型/集合Fin (succ n)
的成员(对于所有正数(即除了零之外的所有自然数据)都遵循该成员{{1} } n
是fzero
)的成员。
Fin n
对于所有自然数 fsucc : {n : Nat} -> Fin n -> Fin (succ n)
以及n
类型的所有值m
,Fin n
都是fsucc m
类型的成员。
所以Fin (succ n)
是所有fzero
Fin n
的成员,除了零,n
是所有fsucc m
Fin n
的成员表示大于n
的数字。
基本上fsucc m
表示小于Fin n
的所有自然数的集合,即大小为n
的列表的所有有效索引。