回答
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:...'。 –