间隔可扩展?

时间:2018-11-25 03:07:31

标签: agda cubical-type-theory homotopy-type-theory

I asked the following question on the CS SE

  

例如,在HoTT书中的引理6.4.1的证明中,一个函数   简单地对函数进行归纳定义可简单地应用于路径loop   和refl,然后使用looprefl之间的路径   (大概是通过f来实现)来构建f loopf refl之间的路径:

     
    

假设loop = refl base。 [...]使用x : Ap : x = x,有一个f : S1 → A定义的函数f(base) :≡ x和     f(loop) := p,我们有

p = f(loop) = f(refl base) = refl x.
  
     

但是在立方环境中,事情并没有那么明确。 f(loop)是   对于某些f(loop i)i : I的类型不好,只有p = <i> f (loop i) = <i> f (refl base i) = refl x 是。但是那   以上证明成为

∀ i → f (loop i) = f (refl base i)
     

但是,在那儿并不需要某种“间隔可扩展性”   中间步骤?中间步骤的正当性是什么   立方型理论?我可以看到如何证明<i> f (loop i) = <i> f (refl base i),但是如何证明这一点到p

我还没有收到回复,所以我将在这里尝试,并用具体的Agda代码来支持它。

我正尝试将上述证明转换为Cubical Agda,如下所述。首先,给定f hyp : loop ≡ refl {x = base} p : x ≡ x f : S¹ → A f base = x f (loop i) = p i 的定义很简单:

loop

我们可以沿着f (loop i) ≡ f (refl i) 逐点证明 proofAt_ : ∀ i → f (loop i) ≡ f base proofAt i = cong (λ p → f (p i)) hyp

  proofAt_ : ∀ i → f (loop i) ≡ f base
  proofAt i = begin
    f (loop i)             ≡⟨ cong (λ p → f (p i)) hyp ⟩
    f (refl {x = base} i)  ≡⟨⟩
    f base                 ∎

(要了解原因,这里有更详细的说明:

  proof : p ≡ refl
  proof = begin
    (λ i → p i)             ≡⟨⟩
    (λ i → f (loop i))      ≡⟨ (λ i → proofAt i) ⟩
    (λ i → f base)          ≡⟨⟩
    (λ i → refl {x = x} i)  ∎

但是,如果我试图从整体上证明这一点:

_342

它失败了,我想因为我正在尝试使用“间隔可扩展性”:

  

无法实例化解决方案f (loop i) ≡ f base的元变量i,因为它包含变量proofAt i,该变量不在范围内。   元变量或与元变量无关,但与   解决方案

     

在检查表达式_A_342的类型为proofAt_

尝试将它转换为 proof : p ≡ refl proof = begin (λ i → p i) ≡⟨⟩ (λ i → f (loop i)) ≡⟨ proofAt_ ⟩ (λ i → f base) ≡⟨⟩ (λ i → refl {x = x} i) ∎ 的操作也失败了,但是由于另一个原因(我认为,通常没有路径的eta转换):

((i : I) → f (loop i) ≡ f base)
  

_344 ≡ _y_345!= <;Agda.Primitive.Setω类型   CacheManager

那么,以上HoTT证明的正确CTT音译是什么?

2 个答案:

答案 0 :(得分:3)

有关原始解决方案的信息,请参见塞桑的答案。或者,有一个简单的解决方案:

proof : p ≡ refl
proof i j = f (hyp i j)

proof = cong (cong f) hyp。关键在于hyp是二维的,并且f作用于0维元素,因此f应该应用于hyp的0维分量。 / p>

答案 1 :(得分:3)

路径确实具有eta规则

https://github.com/Saizan/cubical-demo/blob/master/examples/Cubical/Examples/AIM_Demo/DemoPath.agda#L59

但是类型路径与间隔“ I”中的函数类型不同,因此有时您仅需要lambda抽象即可在两种类型之间进行转换。 (Lambda和应用程序在这两种类型之间是临时重载的。)

f loop确实不会进行类型检查,即使在HoTT中也是如此。但是,本书将其用作ap f loop的简写,其中ap = cong来自立方库。

此外,您的证明可以完成,但是您需要正确使用proofAt_i中的proof维度是连接cong f loop和{{1}的维度},因此您想提供refl {x = f base}作为i的第二个参数。

proofAt_