我正在尝试为具有 HIT 域的函数的结果中的相等性编写证明。因为函数是在 HIT 上定义的,所以相等性证明也必须处理路径情况。在这些情况下,Agda 报告了我需要构建的高维路径的大量限制;例如:
Goal: fromList (toList m) ≡ εˡ m i
————————————————————————————————————————————————————————————
i : I
m : FreeMonoid A
AIsSet : isSet A
A : Type ℓ
ℓ : Level
———— Constraints ———————————————————————————————————————————
(hcomp
(λ { j ((~ i ∨ i) = i1)
→ (λ { (i = i0) → fromList (toList ε ++ toList a₁)
; (i = i1)
→ cong₂ _·_ (fromList-toList ε) (fromList-toList a₁) (i1 ∧ j)
})
_
; j (i1 = i0)
→ outS (inS (fromList-homo (toList ε) (toList a₁) (~ i)))
})
(outS (inS (fromList-homo (toList ε) (toList a₁) (~ i)))))
= (?1 (AIsSet = AIsSet₁) (m = a₁) (i = i0) i)
: FreeMonoid A₁
(fromList-toList a₁ i)
= (?1 (AIsSet = AIsSet₁) (m = a₁) (i = i1) i)
: FreeMonoid A₁
然而,有问题的 HIT 恰好是一个集合(在isSet
某种意义上)。因此,我能想到的任何具有正确端点的路径都与解决给定约束的路径无法区分。因此,更具体地说,假设我在范围内再引入两个术语:
fillSquare : isSet' (FreeMonoid A)
rightEndpointsButConstraintsDon'tHold : fromList (toList m) ≡ εˡ m i
我如何使用这两个定义来填补这个漏洞?