我有以下代码段。
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).
我的第一个想法是X
中的funWrap
无法用Wrap A
实例化,因为对归纳类型有严格的积极性限制。是这种情况还是存在不一致的另一个原因(可能有不同的方法来定义函数specialWrap
)?
编辑:第二个定义的解释在所选答案的注释中给出。
答案 0 :(得分:3)
我认为你的第一个定义的问题是缺乏宇宙多态性。如果您启用Set Universe Polymorphism.
,它将会通过。
这是因为常规的归纳定义是宇宙单态的#34;所以在这种情况下,由于共享的Universe级别,您会遇到Universe问题。