Core.id
import Core.prop (↔, iffIntro)
data [a : 𝕌]
Id : a → a → U
refl : (x : a) → El (Id x x)
idToEq : (a : 𝕌) (x y : a) → Id _ x y → x ≡ y using (Core.id.Id.unfold)
idToEq a x y p = IdElimP a (λu v w. u ≡ v) (λu. ⋆) x y p
eqToId : {a : 𝕌} (x y : a) → (x ≡ y) → Id _ x y using (hyp.rw, Core.id.Id.eq, Core.id.Id.unfold)
eqToId = λa x y h. refl a x
idIffEq : {a : 𝕌} {x y : a} → ∥Id _ x y∥ ↔ (x ≡ y)
using (Core.id.Id.unfold, Core.prop.↔.unfold, Core.prop.∧.unfold)
idIffEq = λa x y. iffIntro (λh. squash-elim h (p. idToEq _ x y p)) (λh. ⋆ (eqToId _ _ h))
idToEqBeta : (a : 𝕌) (x : a) → idToEq _ x x (refl a x) ≡ (⋆) using (Core.id.Id.unfold)
idToEqBeta a x = ⋆
eqToIdBeta : (a : 𝕌) (x : a) → eqToId _ _ ⋆ ≡ refl a x ∈ Id _ x x
using (Core.id.Id.unfold, Core.id.eqToId.eq, Core.id.refl.eq)
eqToIdBeta a x = ⋆
OnlyZ : 𝕌
OnlyZ = (n : ℕ) × Id _ n Z
onlyZ : OnlyZ using (Core.id.Id.eq, Core.id.OnlyZ.unfold)
onlyZ = Z, refl ℕ Z
onlyZIsZ : (v : OnlyZ) → v .π₁ ≡ Z using (Core.id.OnlyZ.unfold)
onlyZIsZ = λv. idToEq _ _ _ (v .π₂)