回答
Set
在Coq和HoTT中意味着相當不同的東西。
在Coq中,每個對象都有一個類型,包括類型本身。類型的類型通常被稱爲類,種或宇宙。在Coq中,(計算相關的)宇宙是Set
和Type_i
,其中i
覆蓋自然數(0,1,2,3,...)。我們有以下的夾雜物:
Set <= Type_0 <= Type_1 <= Type_2 <= ...
這些Universe類型如下:
Set : Type_i for any i
Type_i : Type_j for any i < j
像HOTT,需要這種分層,以確保邏輯一致性。 As Antal指出,Set
的行爲大多像最小的Type
,但有一個例外:當您使用-impredicative-set
選項調用coqtop
時,可以將其作爲impregnicative。具體而言,這意味着forall X : Set, A
的類型是Set
,只要A
是。相反,forall X : Type_i, A
類型爲Type_(i + 1)
,即使當A
具有類型Type_i
時也是如此。
造成這種差異的原因是,由於邏輯上的矛盾,只有這樣的層次結構的最低級別可以被認爲是不可預測的。那麼你可能會想知道爲什麼Set
默認情況下沒有被預測到。這是因爲impredicative Set
與排中的公理的強式不一致:
forall P : Prop, {P} + {~ P}.
什麼這個公理允許你做的是編寫一個可以決定任意命題功能。請注意,類型生活在Set
中,而不是Prop
。排除中間的通常形式forall P : Prop, P \/ ~ P
不能以相同的方式使用,因爲生活在Prop
中的事物不能以計算相關的方式使用。
這是否意味着如果我不需要不確定性,我不需要Set類? – Cryptostasis
我會這樣說,除非有一些我不知道的理論怪異的角落案例。我總是使用Type來代替。 –
除了亞瑟的答案:
的事實,Set
位於層次結構的底部,
接下去
Set
是「小」的數據類型和函數類型的類型即那些其值不直接或間接涉及類型的那些。
這意味着以下將失敗:
Fail Inductive Ts : Set :=
| constrS : Set -> Ts.
與此錯誤消息:
大的非命題歸納類型必須是
Type
。
作爲消息表明,我們可以通過使用Type
修改它:
Inductive Tt : Type :=
| constrT : Set -> Tt.
參考:
- 勒柯克的本質由B. Jacobs的一個形式系統(2013), pdf。
- 1. 時究竟是
- 2. 究竟是一個Python庫?
- 3. 究竟是委託在C#
- 4. 究竟是MySQL中的「尾隨空間」究竟是什麼?
- 5. 究竟是一個獲取的屬性?
- 6. 這究竟是一種病毒?
- 7. 「句柄」究竟是什麼?
- 8. getGlobalVisibleRect()究竟是什麼?
- 9. Werkzeug究竟是什麼?
- 10. 究竟是什麼@ ViewDebug.ExportedProperty?
- 11. .parentNode究竟是什麼?
- 12. Heroku究竟是什麼?
- 13. session_hash究竟是什麼?
- 14. 究竟是什麼awakeFromNib?
- 15. 究竟是什麼任務
- 16. cout/cin究竟是什麼?
- 17. SKEmitterNode particleLifetime究竟是什麼?
- 18. 代表究竟是什麼?
- 19. 究竟是什麼情景
- 20. 究竟是什麼php.ini memory_limit?
- 21. 資源究竟是什麼?
- 22. App Pool究竟是什麼?
- 23. Erlang OTP究竟是什麼?
- 24. NoSQL究竟是什麼?
- 25. 雅典究竟是什麼?
- 26. ContextStaticAttribute究竟是什麼?
- 27. 「OAuth Provider」究竟是什麼?
- 28. 究竟是什麼插座
- 29. targetSdkVersion究竟是什麼?
- 30. CGContextRef究竟是什麼?
它是sorta-kinda(heh)'Type 0',其中'Type 0:Type 1:Type 2:...'。 –