I'm getting started with Cubcal Agda and I'm quite confused.
I've got a HIT A
defined, with a path constructor eq
returning a ≡ b
and a squash
path constructor ∀ {x y : A} → (p1 p2 : x ≡ y) → p1 ≡ p2
. Basically it's a quotient type.
I've got a function f: A -> Bool
, and in the case for squash {x} {y} p1 p2 i j
I get boundary conditions that look like this?
i = i0 ⊢ f (p1 j)
i = i1 ⊢ f (p2 j)
j = i0 ⊢ f x
j = i1 ⊢ f y
Frankly, I have no idea what this means.
I intuitively get that for eq i
, I need to show that f a ≡ f b
. What I'm actually doing providing an expression parameterized over i
, that evaluates to f a
for i0 and f b
for i1. But when it comes to the higher case with squash
I'm lost.
Is there a good intuition for what I'm actually trying to show in the squash case? Is there any way to handle the cases for path constructors by directly providing equalities, rather than values with boundary conditions?
Or is having the squash
case a mistake? I added it because I'm trying to show (x : A) -> Dec (x ≡ a)
, and in the case for eq
I end up having to show equalities between equalities. I thought adding squash
would help with that, but maybe I'm wrong?
Thanks for the help!
Bool
, which is an H-set. $\endgroup$