3

我在 CS SE 上问了以下问题

例如,在 HoTT 书中引理 6.4.1 的证明中,在函数上归纳定义的函数简单地应用于路径looprefl,然后使用和之间的路径looprefl可能是通过同余通过f)来构造和之间的f loop路径f refl

假设loop = refl base. [...] 与x : Aand p : x = x,有一个由and f : S1 → A定义的函数,我们有f(base) :≡ xf(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)

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

我正在尝试将上述证明转换为 Cubical Agda,如下所示。首先,给定p的定义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

尝试将其 eta 转换为 justproofAt_也失败了,但出于不同的原因(我认为通常没有路径的 eta 转换):

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

((i : I) → f (loop i) ≡ f base)!=<_344 ≡ _y_345类型 ;Agda.Primitive.Setω

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

4

2 回答 2

3

请参阅 Saizan 的答案以获取原始解决方案。或者,有一个简单的解决方案:

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

proof = cong (cong f) hyp。关键是它hyp是二维的,f作用于零维元素,所以f应该应用于 的零维分量hyp

于 2018-11-25T08:52:16.937 回答
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和的维度refl {x = f base},因此您希望提供i作为 的第二个参数proofAt_

proof : p ≡ refl
proof = begin
  (λ i → p i)             ≡⟨⟩
  (λ i → f (loop i))      ≡⟨ (λ i j → proofAt j i) ⟩
  (λ i → f base)          ≡⟨⟩
  (λ i → refl {x = x} i)  ∎
于 2018-11-26T09:25:58.913 回答