module Prim.Kan where
Primitive: Kan operationsπ
Using the machinery from the other Prim
modules, we can
define the Kan operations: transport and composition.
private module X where primitive
: β {β} (A : (i : I) β Type (β i)) (Ο : I) (a : A i0) β A i1
primTransp : β {β} {A : Type β} {Ο : I} (u : β i β Partial Ο A) (a : A) β A
primHComp : β {β} (A : (i : I) β Type (β i)) {Ο : I} (u : β i β Partial Ο (A i)) (a : A i0) β A i1
primComp
open X public renaming (primTransp to transp)
hcomp: β {β} {A : Type β} (Ο : I)
β (u : (i : I) β Partial (Ο β¨ ~ i) A)
β A
= X.primHComp (Ξ» j .o β u j (leftIs1 Ο (~ j) o)) (u i0 1=1)
hcomp Ο u
: I β I
β = i β¨ ~ i
β i
comp: β {β : I β Level} (A : (i : I) β Type (β i)) (Ο : I)
β (u : (i : I) β Partial (Ο β¨ ~ i) (A i))
β A i1
= X.primComp A (Ξ» j .o β u j (leftIs1 Ο (~ j) o)) (u i0 1=1) comp A Ο u
We also define the type of dependent paths, and of non-dependent paths.
postulate
: β {β} (A : I β Type β) β A i0 β A i1 β Type β
PathP
{-# BUILTIN PATHP PathP #-}
infix 4 _β‘_
: β {β} (A : Type β) β A β A β Type β
Path = PathP (Ξ» i β A)
Path A
_β‘_ : β {β} {A : Type β} β A β A β Type β
_β‘_ {A = A} = Path A
{-# BUILTIN PATH _β‘_ #-}