{-# OPTIONS --safe #-}
module Cubical.Algebra.Group.Instances.NProd where
open import Cubical.Foundations.Prelude
open import Cubical.Foundations.HLevels
open import Cubical.Data.Nat using (ℕ)
open import Cubical.Algebra.Group
private variable
ℓ : Level
open GroupStr
NProd-Group : (G : (n : ℕ) → Type ℓ) → (Gstr : (n : ℕ) → GroupStr (G n)) → Group ℓ
fst (NProd-Group G Gstr) = (n : ℕ) → G n
1g (snd (NProd-Group G Gstr)) = λ n → 1g (Gstr n)
GroupStr._·_ (snd (NProd-Group G Gstr)) = λ f g n → Gstr n ._·_ (f n) (g n)
inv (snd (NProd-Group G Gstr)) = λ f n → (Gstr n).inv (f n)
isGroup (snd (NProd-Group G Gstr)) = makeIsGroup (isSetΠ (λ _ → is-set (Gstr _)))
(λ f g h → funExt λ n → ·Assoc (Gstr n) _ _ _)
(λ f → funExt λ n → ·IdR (Gstr n) _)
(λ f → funExt λ n → ·IdL (Gstr n) _)
(λ f → funExt λ n → ·InvR (Gstr n) _)
λ f → funExt λ n → ·InvL (Gstr n) _