【问题标题】:How to define finite set of N elements in Coq?如何在 Coq 中定义 N 个元素的有限集?
【发布时间】:2017-08-09 20:44:20
【问题描述】:

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

【问题讨论】:

  • 查看标准库的Fin.t 了解递归定义。
  • 是的,我愿意。我正在寻找更简单的东西,没有这么多的依赖
  • 什么'大量依赖'?对不起,我不关注。它在标准库中。如果不想导入模块,可以复制定义。当然,与 ejgallego 的建议不同,这不是一种易于使用的类型。

标签: set coq


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 不应该是Record ordinal n吗?
  • 如何实例化这种类型的成员?
  • @apen 'I_n 有多个构造函数,通常可以使用@inord 9 3 来获取'I_10 的一个元素。
猜你喜欢
  • 1970-01-01
  • 2020-01-31
  • 1970-01-01
  • 2017-10-11
  • 1970-01-01
  • 2021-03-16
  • 2019-07-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多