{-# OPTIONS --without-K --sized-types --safe #-} module GlobSet.Composition where open import GlobSet open import GlobSet.Product record Composable {a : Level} (i : Size) (G : GlobSet a i) : Set a where coinductive field id : (j : Size< i) → (x : cells G) → cells (morphisms G j x x) comp : (j : Size< i) → (x y z : cells G) → GlobSetMorphism (morphisms G j x y ×G morphisms G j y z) (morphisms G j x z) compHigher : (j : Size< i) → (x y : cells G) → Composable j (morphisms G j x y) open Composable public prodComp : {a b : Level} → {i : Size} → {A : GlobSet a i} → {B : GlobSet b i} → (ca : Composable i A) → (cb : Composable i B) → Composable i (A ×G B) Composable.id (prodComp ca cb) j (x , y) = (id ca j x) , (id cb j y) Composable.comp (prodComp {A = A} {B = B} ca cb) j (x , x') (y , y') (z , z') = gComp ((comp ca j x y z) ×GM (comp cb j x' y' z')) (interchangeG (morphisms A j x y) (morphisms B j x' y') (morphisms A j y z) (morphisms B j y' z')) Composable.compHigher (prodComp {_} {A} {B} ca cb) j (x , x') (y , y') = prodComp (compHigher ca j x y) (compHigher cb j x' y') comp1 : {a : Level} {i : Size} {G : GlobSet a i} (c : Composable i G) {j : Size< i} {x y z : cells G} → cells (morphisms G j x y) → cells (morphisms G j y z) → cells (morphisms G j x z) comp1 c {j} {x} {y} {z} f g = func (comp c j x y z) (f , g) comp2 : {a : Level} {i : Size} {G : GlobSet a i} (c : Composable i G) {j : Size< i} {k : Size< j} {x y z : cells G} {f f' : cells (morphisms G j x y)} {g g' : cells (morphisms G j y z)} → cells (morphisms (morphisms G j x y) k f f') → cells (morphisms (morphisms G j y z) k g g') → cells (morphisms (morphisms G j x z) k (comp1 {a} {i} c f g) (comp1 {a} {i} c f' g')) comp2 c {j} {k} {x} {y} {z} {g} {g'} {f} {f'} α β = func (funcMorphisms (comp c j x y z) k (g , f) (g' , f')) (α , β) comp3 : {a : Level} {i : Size} {G : GlobSet a i} (c : Composable i G) {j : Size< i} {k : Size< j} {l : Size< k} {x y z : cells G} {f f' : cells (morphisms G j x y)} {g g' : cells (morphisms G j y z)} → {α α' : cells (morphisms (morphisms G j x y) k f f')} → {β β' : cells (morphisms (morphisms G j y z) k g g')} → cells (morphisms (morphisms (morphisms G j x y) k f f') l α α') → cells (morphisms (morphisms (morphisms G j y z) k g g') l β β') → cells (morphisms (morphisms (morphisms G j x z) k (comp1 {a} {i} c f g) (comp1 c f' g')) l (comp2 c α β) (comp2 c α' β')) comp3 c {j} {k} {l} {x} {y} {z} {g} {g'} {f} {f'} {α} {α'} {β} {β'} δ ε = func (funcMorphisms (funcMorphisms (comp c j x y z) k (g , f) (g' , f')) l (α , β) (α' , β')) (δ , ε)