coq - Coq 的类型系统 CiC 和 lambda cube 有什么关系?
问题描述
我阅读了https://en.wikipedia.org/wiki/Lambda_cube#Formal_definition并对 CiC 和 lambda 立方体之间的关系感到困惑。据我了解,CiC 扩展了作为 lambda 立方体角的 CoC,因此在 Coq 中也应该满足 lambda 立方体的规则。
例如,coq 似乎接受 (*,*)。因为类型nat -> nat
是Set
哪个是nat
(右侧)的类型。
但似乎 Coq 不接受 (□,*)。如果是,那么 的类型Set -> nat
必须是Set
,而不是Type
。但 Coq 的答案Check (Set -> nat)
是Type
.
我是否误解了 wiki 页面上的描述?
解决方案
Coq 没有单个不可类型的□,而是可类型的层次结构。(特别是,□:□ 是一种打字规则的粗略近似。)因此,由于这些“宇宙”,Coq 不太适合 lambda 立方体的设置。
至于Set -> nat
是 type Set
,就看是否Set
是不可言喻的了。默认情况下,它是谓词,因此Set -> nat
需要有一个严格大于Set
自身的类型,即Type
. 但是您可以更改Set
为不可预测的:
$ coqtop -impredicative-set
Welcome to Coq 8.11.1 (April 2020)
Coq < Check (Set -> nat).
Set -> nat
: Set
推荐阅读
- kubernetes-helm - 如何在 Helm 3 中创建任意数量的相同依赖关系图实例?
- sftp - com.jcraft.jsch.JSchException:Session.connect:java.io.IOException:IO流读取结束
- c# - 有没有办法根据容器宽度将 StackPanel 方向从“水平”交换为“垂直”?
- gradle - 无法获取根项目的未知属性“abc”
- python - 如何从模型字段中获取项目
- java - 如何检测和防止 Unboundid LDAP SDK for java 中的循环引用?
- mysql - 如何在存储过程中创建多个 LIKE AND 语句?
- laravel - 在模型中计算价格,每次在 laravel 中访问模型而不保存在数据库中
- php - Guzzle 在出现错误时提供主要和备用 URL
- spring - 如何从 RestTemplate 获得格式化的输出?