如何在Coq中定义N个元素的有限集?

时间:2017-03-18 08:04:35

标签: set coq

如何定义一般参数N:nat,N个元素的有限集合,$ A_ {0},... A_ {N-1} $? 是否有一种优雅的方式通过递归定义来做到这一点?有人能指出我对这种结构进行推理的好例子吗?

1 个答案:

答案 0 :(得分:5)

一个非常方便的解决方案是将n序数'I_n定义为记录:

Record ordinal n := {
    val :> nat;
    _   : val < n;
}.

也就是说,一对自然数,加上证明这样的自然数小于n,其中< : nat -> nat -> bool。在这里使用可计算的比较运算符非常方便,特别是意味着证明本身不是非常“重要”,这是你通常想要的。

这是math-comp中使用的解决方案,它具有很好的属性,主要是valval_inj : injective val的注入性,这意味着您可以重用{{1}上的大部分标准操作1}}使用您的新数据类型。请注意,您可能希望将添加定义为natadd i j := max n.-1 (i+j)

此外,上面链接的库提供了使用有限类型的一般定义,包括将它们双射到它们的基数序数。