我仍然试图将Observational Type Theory嵌入到Agda中。
目前我有以下Universe层次结构:
Prop : Type 0 : Type 1 : ...
(∀ α -> Type α) : Type ω₀ : Type ω₁
为了定义Universe多态函数的相等性,我需要为Type ω₀
添加一个代码,这迫使我将Type ω₁
添加到元数据中。有关详情,请参阅previous question。
以下是解释算子⟦_⟧
将类型提升到元理论的基本目标理论函数。
mutual
Eq : ⟦ (π₁ lev λ α -> π₁ lev λ β -> univ⁺ α ⇒ univ⁺ β ⇒ prop) ⟧
eq : ⟦ (π₁ lev λ α -> π₁ lev λ β -> π (univ⁺ α) λ A -> π (univ⁺ β) λ B -> A ⇒ B ⇒ prop) ⟧
mutual
coerce : ⟦ (π₁ lev λ α -> π₁ lev λ β -> π (univ⁺ α) λ A -> π (univ⁺ β) λ B -> Eq _ _ A B ⇒ A ⇒ B) ⟧
postulate
coherence : ⟦ (π₁ lev λ α -> π₁ lev λ β -> π (univ⁺ α) λ A -> π (univ⁺ β) λ B ->
π (Eq _ _ A B) λ r -> π A λ x -> eq _ _ A B x (coerce _ _ A B r x)) ⟧
works这样,但我想证明coherence
而不是假设。出现两个问题:
如何证明相同的类型存在于同一个宇宙中?这是真的(在建设性意义上)吗? Due to Conor McBride我们有以下标语
我现在认为
a == b
意味着一旦您了解到
a
和b
具有相同的类型,您就会知道它们具有相同的值
但类型是价值 - 并不意味着"只要您了解到A
和B
位于同一个世界中,您就会知道它们具有相同的价值#34 ;?我问是因为我无法证明eq x y -> Eq (eq x z) (eq x y)
(本文提供了更为一般的引理,但这个引用足以得到sym
,trans
和其他人。问题是,要将cong (\z' -> eq z' z) p
类型分配到p : eq x y
,cong
必须接受Universe多态函数,因为x
和y
具有明显相等,但定义相同不同的类型。由于函数的等式是逐点的,cong
要求证明x
和y
的类型所在的宇宙的平等性。在代码中它看起来像这样:
postulate
refl : ⟦ (π₁ lev λ α -> π (univ⁺ α) λ A -> π A λ x -> eq _ _ A A x x) ⟧
cong-levOf : ⟦ (π₀ nat λ α -> π₀ nat λ β ->
π (univ α) λ A -> π (univ β) λ B -> Eq _ _ A B ⇒ α ≟ℕ β) ⟧
hsubstitutive : ⟦ (π₀ nat λ α -> π₀ nat λ β -> π₀ nat λ δ ->
π (univ α) λ A -> π (univ β) λ B -> π A λ x -> π B λ y ->
π (π₀ nat λ γ -> π (univ γ) λ C -> C ⇒ univ δ) λ D ->
Eq _ _ A B ⇒ eq _ _ A B x y ⇒ Eq _ _ (D _ A x) (D _ B y)) ⟧
hsubstitutive α β δ A B x y D r q =
refl _ (π₀ nat λ γ -> π (univ γ) λ C -> C ⇒ univ δ) D _ _ (cong-levOf _ _ A B r) A B r x y q
cong-≅z : ⟦ (π₀ nat λ α -> π₀ nat λ β -> π₀ nat λ γ ->
π (univ α) λ A -> π (univ β) λ B -> π (univ γ) λ C ->
π A λ x -> π B λ y -> π C λ z -> Eq _ _ A B ⇒
eq _ _ A B x y ⇒ Eq _ _ (eq _ _ A C x z) (eq _ _ B C y z)) ⟧
cong-≅z α β γ A B C x y z r q = hsubstitutive _ _ _ A B x y (λ _ C' z' -> eq _ _ C' C z' z) r q
证明由cong-levOf _ _ A B r
提供,其中假定cong-levOf
。
coherence
的类型是
coherence : ⟦ (π₁ lev λ α -> π₁ lev λ β -> π (univ⁺ α) λ A -> π (univ⁺ β) λ B ->
π (Eq _ _ A B) λ r -> π A λ x -> eq _ _ A B x (coerce _ _ A B r x)) ⟧
但是,sym
的类型是
sym : ⟦ (π₀ nat λ α -> π₀ nat λ β -> π (univ α) λ A -> π (univ β) λ B ->
π A λ x -> π B λ y -> Eq _ _ A B ⇒ eq _ _ A B x y ⇒ eq _ _ B A y x) ⟧
到处都是{p> π₀
而不是π₁
。这样做的原因是refl
中传递给hsubstitutive
的类型为(π₀ nat λ γ -> π (univ γ) λ C -> C ⇒ univ δ)
,并且根据需要它不能为(π₁ lev λ γ -> π₁ (univ⁺ γ) λ C -> C ⇒ univ⁺ δ)
,因为该类型太大而且在目标理论中没有类型。因此,我们无法在证明sym
的同时使用coherence
,因为它无法处理足够大的类型。这同样适用于大多数其他组合器,这使coherence
无法实现。
我看到的唯一解决方案是向元理论添加Type ω₂
,为目标理论添加Type ω₁
的代码。然后是Eq
,eq
,refl
和cong
的类型(我的意思是通常的cong f : eq x y -> eq (f x) (f y)
- 即使对于"小"({ {1}})ω₁
和Eq
必须位于eq
,因为Type ω₂
可能很大)将位于f
,所以我们可以例如说Type ω₂
(但不高)等于自己。 Type ω₀
和coerce
的类型将位于coherence
,因此虽然我们可以说Type ω₁
等于自身,但却无法强制执行通过这个等式(听起来不是一个大问题)。
我想而不是将Type ω₀
添加到层次结构中,而不是更容易实现
Type ω₂
但在我疯狂之前,你能说这听起来像是一个好计划吗?我是在最后Prop : Type 0 : Type 1 : ...
(∀ α -> Type α) : Type ω₀ : Type ω₁ : Type ω₂ : Type ω₃ : ...
宇宙延伸中追逐我的尾巴吗?
我还要重复第一部分的问题:如何证明相同的类型存在于同一个宇宙中?这是真的(在建设性意义上)吗?这是真的吗" Eq A B意味着一旦你知道Type ω₂
和A
在同一个宇宙中,你会知道他们有相同的价值"?