The free-group automorphism sending every generator to its inverse. It packages mutually inverse maps as an algebraic or topological equivalence.
Source context 2 commands
Surrounding namespaces, section variables, and local commands at this declaration.
universe u
namespace ReidemeisterSchreierdef FreeGroup.generatorInversionEquiv (X : Type u) : FreeGroup X ≃* FreeGroup X where
toFun := FreeGroup.lift fun x => (FreeGroup.of x)⁻¹
invFun := FreeGroup.lift fun x => (FreeGroup.of x)⁻¹
left_inv := by
intro g
have h :
(FreeGroup.lift fun x => (FreeGroup.of x)⁻¹).comp
(FreeGroup.lift fun x => (FreeGroup.of x)⁻¹) =
MonoidHom.id (FreeGroup X) := by
apply FreeGroup.ext_hom
intro x
simp only [MonoidHom.coe_comp, Function.comp_apply, FreeGroup.lift_apply_of, map_inv, inv_inv,
MonoidHom.id_apply]
exact congrArg (fun f : FreeGroup X →* FreeGroup X => f g) h
right_inv := by
intro g
have h :
(FreeGroup.lift fun x => (FreeGroup.of x)⁻¹).comp
(FreeGroup.lift fun x => (FreeGroup.of x)⁻¹) =
MonoidHom.id (FreeGroup X) := by
apply FreeGroup.ext_hom
intro x
simp only [MonoidHom.coe_comp, Function.comp_apply, FreeGroup.lift_apply_of, map_inv, inv_inv,
MonoidHom.id_apply]
exact congrArg (fun f : FreeGroup X →* FreeGroup X => f g) h
map_mul' := by
intro g h
simp only [map_mul]