问题:
Coq中的类型是否互斥?
例如在该问题的公认答案中:
What exactly is a Set in COQ
提到“ Set <= Type_0”。 (这是否意味着Set类型的任何东西也都是Type类型的?)
另一方面,输入该问题的答案:
Making and comparing Sets in Coq
提到“语言的每个有效元素都只有一种类型”。
我的动机:
Coq中的关系(在关系中:Coq.Relations.Relation_Definitions)定义为:
Variable A : Type.
Definition relation := A -> A -> Prop.
我的意图是表达对某些“较小” B的关系限制。如果类型是互斥的,则可能没有任何意义。
答案 0 :(得分:1)
从某种意义上说,是的,类型是排他的。
您不能表达对某些较小<w:rFonts w:cs="Arial"/>
的限制,至少不能在B
之类的类别之间表达限制-一种类别中的所有内容也包含在较大类别中。
Coq中的子类型与传统语言略有不同。 Set/Prop/Type(0)
意味着类型Set <= Type(0)
的任何事物都可以提升为类型Set
,而不是总是具有Type(0)
。 Coq Manual的CIC / Sorts部分中说明了类别之间的子类型。
但是,如果使用类型类,则可以定义子类之间的关系限制!例如,您可以定义一个带有“ +”运算符的类型类,并定义一个与“ +”运算符相关联的子类。