Coq 宇宙不一致性(因为严格的正性限制?)
我有以下代码片段Coq 宇宙不一致性(因为严格的正性限制?),coq,Coq,我有以下代码片段 Set Implicit Arguments. Inductive Simple (A: Type) := simple : Simple A. Inductive Wrap (A: Type) := | wrap : A -> Wrap A | funWrap : forall X, Simple X -> (X -> Wrap A) -> Wrap A. Definition anotherWrap A : Wrap A := funWrap
Set Implicit Arguments.
Inductive Simple (A: Type) := simple : Simple A.
Inductive Wrap (A: Type) :=
| wrap : A -> Wrap A
| funWrap : forall X, Simple X -> (X -> Wrap A) -> Wrap A.
Definition anotherWrap A : Wrap A :=
funWrap (simple A) (fun x => wrap x).
Fail Definition specialWrap1 A : Wrap (Wrap A) :=
funWrap (simple (Wrap A)) (fun x => wrap x).
Fail Definition specialWrap A : Wrap A :=
funWrap (simple (Wrap A)) (fun x => x).
我的第一个想法是funWrap
中的X
不能用Wrap A
实例化,因为归纳类型有严格的正性限制。是这种情况还是存在不一致的另一个原因(可能是定义函数specialWrap
的不同方法)
编辑:第二个定义的解释在所选答案的注释中给出。我认为,第一个定义的问题是缺乏宇宙多态性。如果启用
设置宇宙多态性。
它将通过
这是因为常规归纳定义是“宇宙单态的”,所以在这种情况下,由于共享宇宙级别,您会遇到一个宇宙问题。我想补充一点,我发现了第二个定义不起作用的原因(即使使用您的宇宙多态性扩展)。如a中所述,Coq的多态宇宙扩展(尚未)支持归纳类型的累积性。我上面的定义类似于他们的小合奏的例子。