{-# OPTIONS --without-K #-}
open import lib.Basics
open import lib.types.Group
open import lib.types.Lift
open import lib.groups.Homomorphisms
module lib.groups.Lift where
Lift-group-structure : ∀ {i j} {A : Type i}
→ GroupStructure A → GroupStructure (Lift {j = j} A)
Lift-group-structure GS = record
{ ident = lift ident
; inv = λ {(lift x) → lift (inv x)}
; comp = λ {(lift x) (lift y) → lift (comp x y)}
; unitl = λ {(lift y) → ap lift (unitl y)}
; unitr = λ {(lift x) → ap lift (unitr x)}
; assoc = λ {(lift x) (lift y) (lift z) → ap lift (assoc x y z)}
; invr = λ {(lift x) → ap lift (invr x)}
; invl = λ {(lift x) → ap lift (invl x)}
}
where open GroupStructure GS
Lift-Group : ∀ {i j} → Group i → Group (lmax i j)
Lift-Group {j = j} G = group (Lift {j = j} El) (Lift-level El-level)
(Lift-group-structure group-struct)
where open Group G
lift-hom : ∀ {i j} {G : Group i} → (G →ᴳ Lift-Group {j = j} G)
lift-hom = record {f = lift; pres-comp = λ _ _ → idp}
lower-hom : ∀ {i j} {G : Group i} → (Lift-Group {j = j} G →ᴳ G)
lower-hom = record {f = lower; pres-comp = λ _ _ → idp}