module algebra.group.core where
open import level
open import algebra.monoid.core
open import equality.core
open import function.isomorphism
open import sum
record IsGroup {i} (G : Set i) : Set i where
field instance mon : IsMonoid G
open IsMonoid mon public
field
inv : G → G
linv : (x : G) → inv x * x ≡ e
rinv : (x : G) → x * inv x ≡ e
Group : ∀ i → Set (lsuc i)
Group i = Σ (Set i) IsGroup
module _ {i} {G : Set i} ⦃ grp : IsGroup G ⦄ where
open IsGroup ⦃ ... ⦄
left-translation-iso : (g : G) → G ≅ G
left-translation-iso g = record
{ to = λ x → g * x
; from = λ x → inv g * x
; iso₁ = λ x → sym (assoc _ _ _)
· ap (λ u → u * x) (linv g)
· lunit x
; iso₂ = λ x → sym (assoc _ _ _)
· ap (λ u → u * x) (rinv g)
· lunit x }
right-translation-iso : (g : G) → G ≅ G
right-translation-iso g = record
{ to = λ x → x * g
; from = λ x → x * inv g
; iso₁ = λ x → assoc _ _ _
· ap (λ u → x * u) (rinv g)
· runit x
; iso₂ = λ x → assoc _ _ _
· ap (λ u → x * u) (linv g)
· runit x }