如何定义一般参数N:nat,N个元素的有限集合,$ A_ {0},... A_ {N-1} $? 是否有一种优雅的方式通过递归定义来做到这一点?有人能指出我对这种结构进行推理的好例子吗?
答案 0 :(得分:5)
一个非常方便的解决方案是将n
序数'I_n
定义为记录:
Record ordinal n := {
val :> nat;
_ : val < n;
}.
也就是说,一对自然数,加上证明这样的自然数小于n
,其中< : nat -> nat -> bool
。在这里使用可计算的比较运算符非常方便,特别是意味着证明本身不是非常“重要”,这是你通常想要的。
这是math-comp中使用的解决方案,它具有很好的属性,主要是val
,val_inj : injective val
的注入性,这意味着您可以重用{{1}上的大部分标准操作1}}使用您的新数据类型。请注意,您可能希望将添加定义为nat
或add i j := max n.-1 (i+j)
。
此外,上面链接的库提供了使用有限类型的一般定义,包括将它们双射到它们的基数序数。