Ettore Aldrovandi ealdrovandi@fsu.edu
Keri D'Angelo kd349@cornell.edu

July 17, 2021
--------------------------------------------------------------------------------

Opposite of a Group. Given a group G, its opposite G ᵒᵖ has the same
underlying type, but the "opposite" group structure:

g ·⟨ G ᵒᵖ ⟩ h = h ·⟨ G ⟩ g

\begin{code}

{-# OPTIONS --safe --without-K #-}


open import MLTT.Spartan
open import Groups.Type renaming (_≅_ to _≣_)


module Groups.Opposite where

_ᵒᵖ : Group 𝓤  Group 𝓤
G ᵒᵖ =  G  , (
                g h  h ·⟨ G  g) ,
                 (groups-are-sets G) ,
                   ((λ x y z  (assoc G z y x) ⁻¹) ,
                     (unit G) ,
                       ((λ x  unit-right G x) , ((λ x  unit-left G x) ,
                          x  (inv G x) , (inv-right G x) , (inv-left G x))))))

infixr 30 _ᵒᵖ

\end{code}

Forming the opposite gives a functor

\begin{code}

op-functoriality : (G H : Group 𝓤)
                  (f :  G    H ) (i : is-hom G H f)
                  is-hom (G ᵒᵖ) (H ᵒᵖ) f
op-functoriality G H f i {x} {y} = i {y} {x}

\end{code}

Forming the opposite is idempotent.

\begin{code}

opposite-idempotent : (G : Group 𝓤)  G  (G ᵒᵖ) ᵒᵖ
opposite-idempotent G = id , ((pr₂ (≃-refl  G )) , refl)
  where
    open import UF.Equiv

\end{code}

The underlying identity map ⟨ G ⟩ → ⟨ G ᵒᵖ ⟩ is NOT a homomorphism,
unless G is abelian.  In fact this is equivalent to G being abelian.

\begin{code}

underlying-id-is-hom : (G : Group 𝓤) (ab : is-abelian G)
                      is-hom G (G ᵒᵖ) id
underlying-id-is-hom G ab {x} {y} = ab x y

op-hom-gives-abelian : (G : Group 𝓤)
                      (i : is-hom G (G ᵒᵖ) id)
                      is-abelian G
op-hom-gives-abelian G i = λ x y  i {x} {y}

\end{code}