{-# OPTIONS --safe #-} module Cubical.Algebra.Group.Instances.Pi where open import Cubical.Foundations.Prelude open import Cubical.Foundations.HLevels open import Cubical.Algebra.Group.Base open import Cubical.Algebra.Semigroup open import Cubical.Algebra.Monoid open IsGroup open GroupStr open IsMonoid open IsSemigroup module _ {ℓ ℓ' : Level} {X : Type ℓ} (G : X → Group ℓ') where ΠGroup : Group (ℓ-max ℓ ℓ') fst ΠGroup = (x : X) → fst (G x) 1g (snd ΠGroup) x = 1g (G x .snd) GroupStr._·_ (snd ΠGroup) f g x = GroupStr._·_ (G x .snd) (f x) (g x) inv (snd ΠGroup) f x = inv (G x .snd) (f x) is-set (isSemigroup (isMonoid (isGroup (snd ΠGroup)))) = isSetΠ λ x → is-set (G x .snd) IsSemigroup.·Assoc (isSemigroup (isMonoid (isGroup (snd ΠGroup)))) f g h = funExt λ x → IsSemigroup.·Assoc (isSemigroup (isMonoid (G x .snd))) (f x) (g x) (h x) IsMonoid.·IdR (isMonoid (isGroup (snd ΠGroup))) f = funExt λ x → IsMonoid.·IdR (isMonoid (isGroup (snd (G x)))) (f x) IsMonoid.·IdL (isMonoid (isGroup (snd ΠGroup))) f = funExt λ x → IsMonoid.·IdL (isMonoid (isGroup (snd (G x)))) (f x) ·InvR (isGroup (snd ΠGroup)) f = funExt λ x → ·InvR (isGroup (snd (G x))) (f x) ·InvL (isGroup (snd ΠGroup)) f = funExt λ x → ·InvL (isGroup (snd (G x))) (f x)