Functional programming Coq:生活在集合中的非列表数据结构?

Functional programming Coq:生活在集合中的非列表数据结构?,functional-programming,coq,dependent-type,theorem-proving,Functional Programming,Coq,Dependent Type,Theorem Proving,如果我有以下行: Definition Foo : Set := list nat. 然后我编译没有问题 但是,假设我想对Coq.Lists.ListSet执行相同的操作,这是一个将有限集合表示为列表的库: (*Section first_definitions. Variable A : Type. Definition listset := list A.*) Definition Bar : Set := listset nat. 我得到以下错误: The term "listset

如果我有以下行:

Definition Foo : Set := list nat.
然后我编译没有问题

但是,假设我想对
Coq.Lists.ListSet
执行相同的操作,这是一个将有限集合表示为列表的库:

(*Section first_definitions.
 Variable A : Type.
Definition listset := list A.*)
Definition Bar : Set := listset nat.
我得到以下错误:

The term "listset nat" has type "Type" while it is expected to have type 
"Set" (universe inconsistency).
  • 是否有一种方法可以“强制转换”
    列表集
    ,使其位于
    集合
    中,而不是
    类型
    ?i、 e.如果我知道我将使用
    列表集
    类型的参数,有没有办法让它活在
    继承权中
  • 列表集
    定义为
    列表
    时,为什么
    列表集
    会发生错误,而
    列表
    不会发生错误
  • 注意:实际类型称为
    set
    ,但我已将其重命名为
    listset
    ,以避免与排序
    set
    混淆

    编辑:
    =
    替换为
    :=

  • 当listset被定义为list时,为什么listset会发生错误,而list不会发生错误
  • 因为
    list
    是一个归纳定义(请参见
    关于list.
    ),在本例中,这意味着如果
    list
    应用于
    Set
    中的某个类型,则结果仍在
    Set

  • 是否有一种方法可以“强制转换”
    列表集
    ,使其位于
    集合
    中,而不是
    类型
  • 好了,没有办法让定义模板宇宙多态,但你可以这样做:

    还有一个选项是使用
    Set-Universe-Polymorphic
    命令,这样您就不需要在定义前面加上
    Polymorphic
    关键字。
    在撰写本文时,此功能处于实验状态。而且它不具有追溯性,所以我想你需要拿出你自己的
    列表集

    @larsr我的错,我正试图得到一个关于这个问题的MWE。我已经用更多的上下文(即节变量)对其进行了更新,并修复了
    =
    :=
    混淆仅供参考:对于MWE,我认为导入列表集会更有帮助,这样我们就可以确切地知道您使用的定义。至于
    set
    vs
    set
    ,我认为大多数Coq用户都习惯于区分大小写,不会感到困惑如果一个定义最初不是这样声明的,并且我无法控制它的声明,那么有没有一种方法可以以宇宙多态的方式使用它?i、 如果我试图使用?我认为这是不可能的。另外,有人说
    Set
    是传统。我很好奇:您的用例是什么?我正在使用Ott从语言文件生成定义和LaTeX,它在任何地方都生成
    Set
    。我可能会运行一个后处理器,将
    设置
    更改为
    类型
    ,或者做一些可怕的事情,比如
    定义集:=类型
    ,如果Coq允许的话。我不知道
    Set
    是遗留的,这很好。您可能可以重用的方法。完美,看起来正是我需要的!
    Polymorphic Definition listset (A : Type) : Type := list A.
    Check listset nat : Set.