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的多态宇宙扩展(尚未)支持归纳类型的累积性。我上面的定义类似于他们的小合奏的例子。