index

⚠️ This module is not part of this project and is only included for reference.
It is either part of the 1lab, the cubical library, or a built-in Agda module.

<!--
```agda
open import Prim.Extension
open import Prim.Interval
open import Prim.Type
```
-->

```agda
module Prim.Kan where
```

# Primitive: Kan operations

Using the machinery from the other `Prim` modules, we can define the Kan
operations: [transport] and [composition].

[transport]: 1Lab.Path.html#transport
[composition]: 1Lab.Path.html#composition

```agda
private module X where primitive
  primTransp :  {} (A : (i : I)  Type ( i)) (φ : I) (a : A i0)  A i1
  primHComp  :  {} {A : Type } {φ : I} (u :  i  Partial φ A) (a : A)  A
  primComp :  {} (A : (i : I)  Type ( i)) {φ : I} (u :  i  Partial φ (A i)) (a : A i0)  A i1

open X public renaming (primTransp to transp)

hcomp
  :  {} {A : Type } (φ : I)
   (u : (i : I)  Partial (φ  ~ i) A)
   A
hcomp φ u = X.primHComp  j .o  u j (leftIs1 φ (~ j) o)) (u i0 1=1)

 : I  I
 i = i  ~ i

comp
  :  { : I  Level} (A : (i : I)  Type ( i)) (φ : I)
   (u : (i : I)  Partial (φ  ~ i) (A i))
   A i1
comp A φ u = X.primComp A  j .o  u j (leftIs1 φ (~ j) o)) (u i0 1=1)
```

We also define the type of dependent paths, and of non-dependent paths.

```agda
postulate
  PathP :  {} (A : I  Type )  A i0  A i1  Type 

{-# BUILTIN PATHP PathP #-}

infix 4 _≡_

Path :  {} (A : Type )  A  A  Type 
Path A = PathP  i  A)

_≡_ :  {} {A : Type }  A  A  Type 
_≡_ {A = A} = Path A

{-# BUILTIN PATH _≡_ #-}
```

<!--
```agda
caseⁱ_of_ :  { ℓ'} {A : Type } {B : Type ℓ'} (x : A)  ((y : A)  x  y  B)  B
caseⁱ x of f = f x  i  x)

caseⁱ_return_of_ :  { ℓ'} {A : Type } (x : A) (P : A  Type ℓ')  ((y : A)  x  y  P y)  P x
caseⁱ x return P of f = f x  i  x)

{-# INLINE caseⁱ_of_ #-}
{-# INLINE caseⁱ_return_of_ #-}
```
-->