在Agda中,有Set n
。据我所知,Set n
将Haskell风格的值类型类层次结构扩展到无限级别。也就是说,Set 0
是普通类型的宇宙,Set 1
是普通类型的宇宙,Set 2
是正常类型的宇宙,等等。
相比之下,伊德里斯拥有所谓的累积宇宙层次&#34;。似乎对a < b
,Type a: Type b
和Universe级别进行了推断。但它在现实世界的节目中意味着什么?我们不能定义只能在更高但不低的宇宙上运行的东西吗?
顺便说一句,我知道它在逻辑上是不一致的,但与上述一致的解决方案相比,* : *
是什么?
答案 0 :(得分:7)
在Agda中使用*:*将对应于Set n:Set n,此时您可能只是删除了级别并且只有Set:Set,您可以使用--type-in-来实现这一点类型标志。
但是你不应该真正画出Set 0,Set 1,Set 2 ...和类型,种类,排序之间的平行线;因为haskell中的种类带有直觉,即它们只是在类型检查期间才有用,而你可以拥有完全有效的运行时数据,其类型为Set 1。
累积性是指Set n是Set(n + 1)的子类型,因此如果您在Set 0中定义类型,您也可以在需要Set 1或Set 2的地方使用它。在Agda&#中39; s标准库在模块Level中有一个Lift类型来实现类似的东西,但它不能很好地工作。 将积累性添加到Agda是有意义的。
Idris此外还有典型的歧义&#34;宇宙级别对于用户来说并不明显,但不知何故,类型检查器应该检查您是否以不一致的方式使用Universe。
目前在伊德里斯实施的内容实际上不足以排除悖论: https://github.com/idris-lang/Idris-dev/issues/287
但是,Coq也允许你在某些情况下省略宇宙级别,我相信它们没有与之相关的已知不一致。