我使用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
我不知道从哪里开始。
答案 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