module Container.Directed where
open import Prelude
open import Container
record Directed (π : Container ) : Type where
S = fst π
P = snd π
field
_β_ : β s β P s β S
β : {s : S} β P s
_β_ : {s : S} β (p : P s) β P (s β p) β P s
βid : β s β s β β β‘ s
lassoc : β x y z β x β (y β z) β‘ (x β y) β z
βidΚ³ : β {s} (x : P s) β x β β β‘ x
βidΛ‘ : β {s} x β β β x β‘[ i β P (βid s (~ i)) ]β‘ x
rassoc :
β {s} (x : P s) (y : P (s β x)) β
(Ξ» z β (x β y) β z) β‘[ i β (P (lassoc s x y i) β P s) ]β‘ (Ξ» z β x β (y β z))
open Directed public
DCont : Typeβ
DCont = Ξ£ Container Directed
open import Data.Fin
NEList : Container
NEList .fst = β
NEList .snd n = Fin (suc n)
mutual
_ββ²_ : β s β Fin s β β
suc s ββ² x = s β x
_β_ : β s β Fin (suc s) β β
s β f0 = s
s β fs x = s ββ² x
_ββ_ : β {s} β (p : Fin (suc s)) β Fin (suc (s β p)) β Fin (suc s)
_ββ_ {s} f0 y = y
_ββ_ {suc s} (fs x) y = fs (x ββ y)