Coq 中 Prop、Set 和 Type_i 的基数
Cardinality of Prop, Set and Type_i in Coq
我们可以在 Coq 的库中分配 cardinals in Coq to Prop
, Set
and each Type_i
? I only see the definition of finite cardinals 吗,所以也许我们需要大红雀的那个开始。
根据proof-irrelevance语义,例如暴露here, Set
and the Type_i
form an increasing sequence of inaccessible cardinals。这可以在 Coq 中证明吗?
Prop
似乎更复杂,因为它是不可预测的。证明无关意味着我们识别相同 P : Prop
的所有证明,并将 Prop
本身解释为对 {false, true}
。因此 Prop
的基数将为 2。但是,对于任何两个证明 p1 p2 : P
,Coq 不接受 eq_refl p1
作为 p1 = p2
的证明。所以 Coq 并没有完全识别 p1
和 p2
。另一方面,预测性意味着对于任何 A : Type
和 P : Prop
,A -> P
都是 Prop
类型。这比 Set
.
的居民多得多
如果这太难了,Coq 能证明 Prop
和 Set
是不可数的吗?通过 Cantor's theorem,Coq 轻松证明不存在满射 nat -> (nat -> Prop)
。这似乎离证明不存在满射不远nat -> Prop
。但随后我们需要过滤器 Prop -> (nat -> Prop)
,它可以隔离哪些 Prop
具有空闲的 nat
变量。我们可以在 Coq 中定义这个过滤器吗,因为我们不能在 Prop
上进行模式匹配?
无法证明 Prop
在 Coq 中是不可数的。标准库中的 ClassicalFacts 模块表明命题退化公理 forall A : Prop, A = True \/ A = False
等价于排中律和命题外延性的存在。由于 Coq 的集合论模型验证了这两个公理,Coq 无法反驳退化。
当然可以证明 Set
和 Type
是无限的,因为它们包含所有类型 Fin n
以 n
为界的自然数,并且这些类型可以证明彼此不同,因为它们具有不同的基数。我怀疑可以通过采用通常的对角化论证来证明它们是不可数的——也就是说,假设一些可逆计数函数 e : nat -> Set
,并尝试编码类似于所有自然数类型的东西 "do not contain themselves"。我不知道你会如何证明这些类型是不可访问的基数。
我们可以在 Coq 的库中分配 cardinals in Coq to Prop
, Set
and each Type_i
? I only see the definition of finite cardinals 吗,所以也许我们需要大红雀的那个开始。
根据proof-irrelevance语义,例如暴露here, Set
and the Type_i
form an increasing sequence of inaccessible cardinals。这可以在 Coq 中证明吗?
Prop
似乎更复杂,因为它是不可预测的。证明无关意味着我们识别相同 P : Prop
的所有证明,并将 Prop
本身解释为对 {false, true}
。因此 Prop
的基数将为 2。但是,对于任何两个证明 p1 p2 : P
,Coq 不接受 eq_refl p1
作为 p1 = p2
的证明。所以 Coq 并没有完全识别 p1
和 p2
。另一方面,预测性意味着对于任何 A : Type
和 P : Prop
,A -> P
都是 Prop
类型。这比 Set
.
如果这太难了,Coq 能证明 Prop
和 Set
是不可数的吗?通过 Cantor's theorem,Coq 轻松证明不存在满射 nat -> (nat -> Prop)
。这似乎离证明不存在满射不远nat -> Prop
。但随后我们需要过滤器 Prop -> (nat -> Prop)
,它可以隔离哪些 Prop
具有空闲的 nat
变量。我们可以在 Coq 中定义这个过滤器吗,因为我们不能在 Prop
上进行模式匹配?
无法证明 Prop
在 Coq 中是不可数的。标准库中的 ClassicalFacts 模块表明命题退化公理 forall A : Prop, A = True \/ A = False
等价于排中律和命题外延性的存在。由于 Coq 的集合论模型验证了这两个公理,Coq 无法反驳退化。
当然可以证明 Set
和 Type
是无限的,因为它们包含所有类型 Fin n
以 n
为界的自然数,并且这些类型可以证明彼此不同,因为它们具有不同的基数。我怀疑可以通过采用通常的对角化论证来证明它们是不可数的——也就是说,假设一些可逆计数函数 e : nat -> Set
,并尝试编码类似于所有自然数类型的东西 "do not contain themselves"。我不知道你会如何证明这些类型是不可访问的基数。