路径之间的平等

时间:2018-11-06 05:22:21

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

我使用cubical-demo库来证明以下内容很简单:

{-# OPTIONS --cubical #-}
open import Cubical.PathPrelude

foo : ∀ {ℓ} {A : Set ℓ} {x y : A} (p : x ≡ y) → trans refl p ≡ p
foo p = ?

但是可惜,它在定义上并不成立:尝试使用refl失败

primComp (λ _ → ;A) (~ i ∨ i) (λ { i₁ (i = i0) → ;x ; i₁ (i = i1) → p i₁ }) (refl i)
!= p i 
of type ;A

我不知道从哪里开始。

2 个答案:

答案 0 :(得分:2)

不,可悲的是,在使用Path时,我们失去了一些定义上的相等性,因为如果添加这些缩减,我们不知道如何保持系统的融合。

Id类型的消除符具有通常的归约规则。

https://github.com/Saizan/cubical-demo/blob/master/src/Cubical/Id.agda

对于要证明trans的引理,您可以在

找到证明

https://github.com/Saizan/cubical-demo/blob/master/src/Cubical/Lemmas.agda

顺便说一句,三次演示有机地成长了,我们希望以更干净的设置(尽管使用不同的基元)在

上重新开始。

https://github.com/agda/cubical

cubical具有更好的Id模块,例如:

https://github.com/agda/cubical/blob/master/Cubical/Core/Id.agda

答案 1 :(得分:0)

基于Saizan's answer,我查找了the proof in cubical-demo并将其移植到新的cubical库中。我可以看到它是如何工作的(例如,我可以看到给定路径的值在所有三个指定的边上都是x),但我还没有看到如何为类似的情况:

{-# OPTIONS --cubical #-}
module _ where

open import Cubical.Core.Prelude

refl-compPath : ∀ {ℓ} {A : Set ℓ} {x y : A} (p : x ≡ y) → compPath refl p ≡ p
refl-compPath {x = x} p i j = hcomp {φ = ~ j ∨ j ∨ i}
  (λ { k (j = i0) → x
     ; k (j = i1) → p k
     ; k (i = i1) → p (k ∧ j)
     })
  x