Search code examples
agdacubical-type-theory

Handling heterogeneous paths in a set


I have two heterogeneous paths in a Set, with the same endpoints but over different paths. How do I fill in between them?

In more concrete terms, here's my code with foo being my question:

{-# OPTIONS --cubical #-}

module _ where

open import Cubical.Core.Everything
open import Cubical.Foundations.Everything hiding (assoc)

variable
  ℓ : Level
  A : Type ℓ
  B : A → Type ℓ
  x y : A

module _
  (AIsSet : isSet A)
  (p q : Path A x y)
  (BIsProp : ∀ x → isProp (B x))
  {x′ : B x}
  {y′ : B y}
  where

  p′ : PathP (λ i → B (p i)) x′ y′
  p′ = isProp→PathP BIsProp p x′ y′

  q′ : PathP (λ i → B (q i)) x′ y′
  q′ = isProp→PathP BIsProp q x′ y′

  foo : PathP (λ i → PathP (λ j → B (AIsSet x y p q i j)) x′ y′) p′ q′
  foo = ?
    where
      doesThisHelp? : ∀ j → PathP (λ i → B (AIsSet x y p q i j)) (p′ j) (q′ j)
      doesThisHelp? j = isProp→PathP BIsProp (λ i → AIsSet x y p q i j) (p′ j) (q′ j)

Solution

  • This is when you want to use isOfHLevel→isOfHLevelDep:

      foo : PathP (λ i → PathP (λ j → B (AIsSet x y p q i j)) x′ y′) p′ q′
      foo = let r = isOfHLevel→isOfHLevelDep {n = 2} (\ a → hLevelSuc 1 (B a) (BIsProp a)) in
            r x′ y′ p′ q′ (AIsSet x y p q)
    

    doesThisHelp? probably does not, as it is building a square where two of the sides are p' and q' but you don't know what the other two sides are. While foo specifies the other two sides to be (constantly) x' and y'.