如何在Coq中创建元组并将其用作新的数据类型

如何在Coq中创建元组并将其用作新的数据类型,coq,Coq,我试图将以下ML代码作为Coq代码来编写:(此ML代码来自Ryheard和Burstall的《计算范畴理论》一书) 这就是我想到的: Definition setArrow := (Set, Set -> Set, Set). Definition setSource (arrow: setArrow ): Set := match arrow with |(a,b,c) => a end. 这就是出现的错误: Error: The term "setA

我试图将以下ML代码作为Coq代码来编写:(此ML代码来自Ryheard和Burstall的《计算范畴理论》一书)

这就是我想到的:

Definition setArrow := (Set, Set -> Set, Set).

Definition setSource (arrow: setArrow ): Set :=
  match arrow with
    |(a,b,c) => a
  end.
这就是出现的错误:

Error: The term "setArrow" has type "(Type * Type * Type)%type"
which should be Set, Prop or Type.

我不知道为什么会出现这个错误,但我认为这是由于我构造元组的方式造成的。我一直在阅读有关元组以及如何在Coq中构造新的非归纳数据类型的文档,但我还没有找到正确的方法。

以下内容对我有用

Definition setArrow := (Set * (Set -> Set) * Set)%type.

Definition setSource (arrow: setArrow ): Set :=
  match arrow with
    |(a,b,c) => a
  end.

*
是类型级别的Pair的构造函数,而
是如何构建具体实例的

Definition setArrow := (Set * (Set -> Set) * Set)%type.

Definition setSource (arrow: setArrow ): Set :=
  match arrow with
    |(a,b,c) => a
  end.
*
是类型级别的Pair的构造函数,而
是构建具体实例的方式