Lane Biocini, 21 January 2026

Transposition: the anti-automorphism reversing multiplication order.
Satisfies (x · y)ᵀ = yᵀ · xᵀ, making it a homomorphism to the opposite
group. Combined with involutivity ((xᵀ)ᵀ = x), this establishes an
isomorphism 𝓜 ≅ 𝓜ᵒᵖ.

This isomorphism reflects that the presentation ⟨s, r | s² = r³ = 1⟩
is symmetric: the relations are preserved under word reversal. Not all
groups have this property, it requires that generators be self-inverse
or that inverse pairs appear symmetrically in relations.

\begin{code}

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

module Groups.ModularGroup.Transposition where

open import MLTT.Spartan
open import Groups.ModularGroup.Type
open import Groups.ModularGroup.Base
open import Groups.ModularGroup.Properties
open import Groups.ModularGroup.Induction
open import Groups.ModularGroup.Multiplication

transpose-η : S-edge  PSL2Z
transpose-θ : R-edge  PSL2Z

transpose-η e₀         = E
transpose-η e₁         = S
transpose-η (cross re) = (transpose-θ re) · S

transpose-θ (r+ se) = (transpose-η se) · SR²S
transpose-θ (r- se) = (transpose-η se) · SRS

_ᵀ : PSL2Z  PSL2Z
(η se)  = transpose-η se
(θ re)  = transpose-θ re

infix 32 _ᵀ

transpose-s : (x : PSL2Z)  (s x)   x  · S
transpose-s (η e₀) = refl
transpose-s (η e₁) = refl
transpose-s (sr∙ se) =
  s (sr∙ se)                        =⟨ ·-E-right (transpose-θ (r+ se)) ⁻¹ 
  transpose-θ (r+ se) · E            =⟨ ·-assoc (transpose-θ (r+ se)) S S ⁻¹ 
  transpose-θ (r+ se) · S · S        
transpose-s (sr²∙ se) =
  s (sr²∙ se)                       =⟨ ·-E-right (transpose-θ (r- se)) ⁻¹ 
  transpose-θ (r- se) · E            =⟨ ·-assoc (transpose-θ (r- se)) S S ⁻¹ 
  transpose-θ (r- se) · S · S        
transpose-s (r∙ se) = refl
transpose-s (r²∙ se) = refl

transpose-r : (x : PSL2Z)  (r x)   x  · SR²S
transpose-r (η e₀) = refl
transpose-r (η e₁) = refl
transpose-r (sr∙ se) = refl
transpose-r (sr²∙ se) = refl
transpose-r (r∙ se) = ·-assoc (transpose-η se) SR²S SR²S ⁻¹
transpose-r (r²∙ se) =
  r (r²∙ se)                      =⟨ ·-E-right (transpose-η se) ⁻¹ 
  transpose-η se · (SRS · SR²S)    =⟨ ·-assoc (transpose-η se) SRS SR²S ⁻¹ 
  transpose-η se · SRS · SR²S      

transpose-r² : (x : PSL2Z)  ( x)   x  · SRS
transpose-r² (η e₀) = refl
transpose-r² (η e₁) = refl
transpose-r² (sr∙ se) = refl
transpose-r² (sr²∙ se) = refl
transpose-r² (r∙ se) =
   (r∙ se)                      =⟨ ·-E-right (transpose-η se) ⁻¹ 
  transpose-η se · (SR²S · SRS)    =⟨ ·-assoc (transpose-η se) SR²S SRS ⁻¹ 
  transpose-η se · SR²S · SRS      
transpose-r² (r²∙ se) =
   (r²∙ se)                   =⟨ ap _ᵀ (r²-θ-r- se) 
  (r∙ se)                       =⟨ ·-assoc (transpose-η se) SRS SRS ⁻¹ 
  transpose-η se · SRS · SRS     

transpose-product : (x y : PSL2Z)  (x · y)   (y ) · (x )
transpose-product =
 PSL2Z-ind
  {P = λ x  (y : PSL2Z)  (x · y)   (y ) · (x )}
  base-E base-S ind-s ind-r
 where
  base-E : (y : PSL2Z)  (E · y)   (y ) · (E )
  base-E y = ·-E-right (y ) ⁻¹

  base-S : (y : PSL2Z)  (S · y)   (y ) · (S )
  base-S y = transpose-s y

  ind-s : (re : R-edge)
         ((y : PSL2Z)  ((θ re) · y)   (y ) · ((θ re) ))
         (y : PSL2Z)  ((s∙ re) · y)   (y ) · ((s∙ re) )
  ind-s re ih y =
    ((s∙ re) · y)             =⟨ ap _ᵀ (·-s-left (θ re) y) 
    (s ((θ re) · y))          =⟨ transpose-s ((θ re) · y) 
    (((θ re) · y) ) · S       =⟨ ap ( S) (ih y) 
    ((y ) · ((θ re) )) · S   =⟨ ·-assoc (y ) ((θ re) ) S 
    (y ) · (((θ re) ) · S)   =⟨ ap ((y ) ·_) (transpose-s (θ re) ⁻¹) 
    (y ) · ((s∙ re) )        

  ind-r : (d : R-sgn) (se : S-edge)
         ((y : PSL2Z)  ((η se) · y)   (y ) · ((η se) ))
         (y : PSL2Z)  ((ρ d se) · y)   (y ) · ((ρ d se) )
  ind-r cw se ih y =
    ((r∙ se) · y)               =⟨ ap (_ᵀ  ( y)) (r-η se ⁻¹) 
    ((r (η se)) · y)            =⟨ ap _ᵀ (·-r-left (η se) y) 
    (r ((η se) · y))            =⟨ transpose-r ((η se) · y) 
    (((η se) · y) ) · SR²S      =⟨ ap ( SR²S) (ih y) 
    ((y ) · ((η se) )) · SR²S  =⟨ ·-assoc (y ) ((η se) ) SR²S 
    (y ) · (((η se) ) · SR²S)  =⟨ ap ((y ) ·_) (transpose-r (η se) ⁻¹) 
    (y ) · ((r (η se)) )       =⟨ ap ((y ) ·_) (ap _ᵀ (r-η se)) 
    (y ) · ((r∙ se) )          
  ind-r ccw se ih y =
    ((r²∙ se) · y)              =⟨ ap (_ᵀ  ( y)) (r²-η se ⁻¹) 
    (( (η se)) · y)           =⟨ ap _ᵀ (·-r²-left (η se) y) 
    ( ((η se) · y))           =⟨ transpose-r² ((η se) · y) 
    (((η se) · y) ) · SRS       =⟨ ap ( SRS) (ih y) 
    ((y ) · ((η se) )) · SRS   =⟨ ·-assoc (y ) ((η se) ) SRS 
    (y ) · (((η se) ) · SRS)   =⟨ ap ((y ) ·_) (transpose-r² (η se) ⁻¹) 
    (y ) · (( (η se)) )      =⟨ ap ((y ) ·_) (ap _ᵀ (r²-η se)) 
    (y ) · ((r²∙ se) )         

transpose-involutive-η : (se : S-edge)  transpose-η se   η se
transpose-involutive-θ : (re : R-edge)  transpose-θ re   θ re

transpose-involutive-η e₀         = refl
transpose-involutive-η e₁         = refl
transpose-involutive-η (cross re) =
  ((transpose-θ re) · S)    =⟨ transpose-product (transpose-θ re) S 
  s ((transpose-θ re) )     =⟨ ap s (transpose-involutive-θ re) 
  s (θ re)                   =⟨ refl 
  η (cross re)               

transpose-involutive-θ (r+ se) =
  ((transpose-η se) · SR²S)   =⟨ transpose-product (transpose-η se) SR²S 
  r ((transpose-η se) )       =⟨ ap r (transpose-involutive-η se) 
  r (η se)                     =⟨ r-η se 
  θ (r+ se)                    

transpose-involutive-θ (r- se) =
  ((transpose-η se) · SRS)    =⟨ transpose-product (transpose-η se) SRS 
   ((transpose-η se) )      =⟨ ap  (transpose-involutive-η se) 
   (η se)                    =⟨ r²-η se 
  θ (r- se)                    

transpose-involutive : (x : PSL2Z)  (x )   x
transpose-involutive (η se) = transpose-involutive-η se
transpose-involutive (θ re) = transpose-involutive-θ re

\end{code}