{-# OPTIONS --without-K --safe --sized-types #-}
module GlobSet where
open import Agda.Builtin.Size public
open import Level public
record GlobSet (a : Level) (i : Size) : Set (suc a) where
coinductive
field
cells : Set a
morphisms : (j : Size< i) → cells → cells → GlobSet a j
open GlobSet public
record GlobSetMorphism {a b : Level} {i : Size} (G : GlobSet a i) (H : GlobSet b i) : Set (a ⊔ b) where
coinductive
field
func : cells G → cells H
funcMorphisms : (j : Size< i)
→ (x y : cells G)
→ GlobSetMorphism (morphisms G j x y)
(morphisms H j (func x) (func y))
open GlobSetMorphism public
idMorph : {a : Level} {i : Size} → (G : GlobSet a i) → GlobSetMorphism G G
idMorph G .func x = x
idMorph G .funcMorphisms j x y = idMorph (morphisms G j x y)
gComp : {a b c : Level} {i : Size} {G : GlobSet a i} {H : GlobSet b i} {I : GlobSet c i} → GlobSetMorphism H I → GlobSetMorphism G H → GlobSetMorphism G I
gComp ϕ ψ .func x = func ϕ (func ψ x)
gComp ϕ ψ .funcMorphisms j x y = gComp (funcMorphisms ϕ j (func ψ x) (func ψ y)) (funcMorphisms ψ j x y)