宇宙不一致(因为严格的积极性限制?)

时间:2017-01-12 15:23:11

标签: 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 (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)?

编辑:第二个定义的解释在所选答案的注释中给出。

1 个答案:

答案 0 :(得分:3)

我认为你的第一个定义的问题是缺乏宇宙多态性。如果您启用Set Universe Polymorphism.,它将会通过。

这是因为常规的归纳定义是宇宙单态的#34;所以在这种情况下,由于共享的Universe级别,您会遇到Universe问题。