世界还不够

时间:2016-02-04 10:12:29

标签: agda dependent-type type-theory observational-type-theory

我仍然试图将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意味着

     
    

一旦您了解到ab具有相同的类型,您就会知道它们具有相同的值

  

但类型是价值 - 并不意味着"只要您了解到AB位于同一个世界中,您就会知道它们具有相同的价值#34 ;?我问是因为我无法证明eq x y -> Eq (eq x z) (eq x y)(本文提供了更为一般的引理,但这个引用足以得到symtrans和其他人。问题是,要将cong (\z' -> eq z' z) p类型分配到p : eq x ycong必须接受Universe多态函数,因为xy具有明显相等,但定义相同不同的类型。由于函数的等式是逐点的,cong要求证明xy的类型所在的宇宙的平等性。在代码中它看起来像这样:

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 ω₁的代码。然后是Eqeqreflcong的类型(我的意思是通常的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在同一个宇宙中,你会知道他们有相同的价值"?

0 个答案:

没有答案