{-# OPTIONS --without-K #-}
open import lib.Basics
open import lib.NType2
open import lib.types.TLevel
open import lib.types.Sigma
open import lib.types.Pi
module lib.types.Groupoid where
record GroupoidStructure {i j} {El : Type i} (Arr : El → El → Type j)
(_ : ∀ x y → has-level ⟨0⟩ (Arr x y)) : Type (lmax i j) where
field
id : ∀ {x} → Arr x x
inv : ∀ {x y} → Arr x y → Arr y x
comp : ∀ {x y z} → Arr x y → Arr y z → Arr x z
unit-l : ∀ {x y} (a : Arr x y) → comp id a == a
unit-r : ∀ {x y} (a : Arr x y) → comp a id == a
assoc : ∀ {x y z w} (a : Arr x y) (b : Arr y z) (c : Arr z w)
→ comp (comp a b) c == comp a (comp b c)
inv-r : ∀ {x y} (a : Arr x y) → (comp a (inv a)) == id
inv-l : ∀ {x y } (a : Arr x y) → (comp (inv a) a) == id
record Groupoid {i j} : Type (lsucc (lmax i j)) where
constructor groupoid
field
El : Type i
Arr : El → El → Type j
Arr-level : ∀ x y → has-level ⟨0⟩ (Arr x y)
groupoid-struct : GroupoidStructure Arr Arr-level