2017-01-12 29 views
3

我有以下代碼片段。宇宙不一致(由於嚴格的積極性限制?)

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). 

我首先想到的是,在funWrapX不能Wrap A被實例化,因爲歸納類型嚴格限制陽性的。是這種情況還是存在不一致的另一個原因(也可能採用不同的方法來定義功能specialWrap)?

編輯:第二個定義的解釋在所選答案的評論中給出。

回答

3

你的第一個定義的問題是缺乏宇宙多態性,我認爲。如果你啓用Set Universe Polymorphism.它會通過。

這是因爲規則歸納定義是「宇宙單形」,所以在這種情況下,由於共享的宇宙級別,你會得到一個宇宙問題。

+2

我想補充一點,我想明白爲什麼第二個定義不起作用(即使是你的宇宙多態擴展)。正如[Timany和Jacobs最近的論文](https://lirias.kuleuven.be/bitstream/123456789/513812/2/CIT.pdf)中所提到的,Coq的多態宇宙擴展並不支持歸納的歸納類型。我上面的定義類似於他們小組合的例子。 – ichistmeinname