# Groups of automorphisms

automorphism_groupMethod
automorphism_group(G::Group) -> A::AutomorphismGroup{T}

Return the full automorphism group of G. If f is an object of type GAPGroupHomomorphism and it is bijective from G to itself, then A(f) return the embedding of f in A.

Groups of automorphisms over a group G have parametric type AutomorphismGroup{T}, where T is the type of G.

Examples

julia> S = symmetric_group(3)
Sym( [ 1 .. 3 ] )

julia> typeof(S)
PermGroup

julia> A = automorphism_group(S)
Aut( Sym( [ 1 .. 3 ] ) )

julia> typeof(A)
AutomorphismGroup{PermGroup}

The evaluation of the automorphism f in the element x is analogous to the homomorphism evaluation: it can be obtained by typing either f(x) or x^f.

julia> S = symmetric_group(4)
Sym( [ 1 .. 4 ] )

julia> A = automorphism_group(S)
Aut( Sym( [ 1 .. 4 ] ) )

julia> x = perm(S,[2,1,4,3])
(1,2)(3,4)

julia> f = A[2]
Pcgs([ (3,4), (2,4,3), (1,4)(2,3), (1,3)(2,4) ]) -> [ (2,3), (2,4,3), (1,3)(2,4), (1,2)(3,4) ]

julia> f(x)
(1,4)(2,3)

julia> x^f
(1,4)(2,3)

It is possible to turn an automorphism f into a homomorphism by typing hom(f).

julia> S = symmetric_group(4)
Sym( [ 1 .. 4 ] )

julia> A = automorphism_group(S)
Aut( Sym( [ 1 .. 4 ] ) )

julia> f = A[2]
Pcgs([ (3,4), (2,4,3), (1,4)(2,3), (1,3)(2,4) ]) -> [ (2,3), (2,4,3), (1,3)(2,4), (1,2)(3,4) ]

julia> typeof(f)
AutomorphismGroupElem{PermGroup} (alias for Oscar.BasicGAPGroupElem{AutomorphismGroup{PermGroup}})

julia> typeof(hom(f))
GAPGroupHomomorphism{PermGroup, PermGroup}

The converse is also possible: if g is a bijective homomorphism from the group G to itself and A is the automorphism group of G, then the instruction A(g) returns g as automorphism of G. This is the standard way to explicitly build an automorphism (another way, available for inner automorphisms, is shown in Section Inner_automorphisms).

Examples

julia> S = symmetric_group(4)
Sym( [ 1 .. 4 ] )

julia> a = perm(S,[2,1,4,3])
(1,2)(3,4)

julia> f = hom(S,S,x ->x^a)
Group homomorphism from
Sym( [ 1 .. 4 ] )
to
Sym( [ 1 .. 4 ] )

julia> A = automorphism_group(S)
Aut( Sym( [ 1 .. 4 ] ) )

julia> A(f)
MappingByFunction( Sym( [ 1 .. 4 ] ), Sym( [ 1 .. 4 ] ), <Julia: gap_fun> )

Elements of A can be multiplied with other elements of A or by elements of type GAPGroupHomomorphism; in this last case, the result has type GAPGroupHomomorphism.

Examples

julia> S = symmetric_group(4);

julia> A = automorphism_group(S);

julia> g = hom(S,S,x->x^S[1]);

julia> g in A
false

julia> au = A(g);

julia> au in A
true

julia> g == hom(au)
true

julia> x = cperm(S,[1,2,3]);

julia> au(x)
(2,3,4)

julia> g(x) == au(x)
true

In Oscar it is possible to multiply homomorphisms and automorphisms (whenever it makes sense); in such cases, the output is always a variable of type GAPGroupHomomorphism{S,T}.

julia> S = symmetric_group(4)
Sym( [ 1 .. 4 ] )

julia> A = automorphism_group(S)
Aut( Sym( [ 1 .. 4 ] ) )

julia> g = hom(S,S,x->x^S[1])
Group homomorphism from
Sym( [ 1 .. 4 ] )
to
Sym( [ 1 .. 4 ] )

julia> f = A(g)
MappingByFunction( Sym( [ 1 .. 4 ] ), Sym( [ 1 .. 4 ] ), <Julia: gap_fun> )

julia> typeof(g*f)
GAPGroupHomomorphism{PermGroup, PermGroup}
source

The following functions are available for automorphisms, some of them similar to the corresponding functions for homomorphisms of groups.

is_invariantMethod
is_invariant(f::GAPGroupElem{AutomorphismGroup{T}}, H::T)

Return whether f(H) == H.

source
restrict_automorphismMethod
restrict_automorphism(f::GAPGroupElem{AutomorphismGroup{T}}, H::T)

Return the restriction of f to H as an automorphism of H. An exception is thrown if H is not invariant under f.

source
induced_automorphismMethod
induced_automorphism(f::GAPGroupHomomorphism, g::GAPGroupHomomorphism)
induced_automorphism(f::GAPGroupHomomorphism, g::GAPGroupElem{AutomorphismGroup{T}})

Return the automorphism h of the image of f such that h(f) == f(g), where g is an automorphism of a group G and f is a group homomorphism defined over G such that the kernel of f is invariant under g

source
homMethod
hom(f::GAPGroupElem{AutomorphismGroup{T}}) where T

Return the element f of type GAPGroupHomomorphism{T,T}.

source

## Inner automorphisms

OSCAR provides the following functions to handle inner automorphisms of a group.

inner_automorphismMethod
inner_automorphism(g::GAPGroupElem)

Return the inner automorphism in automorphism_group(parent(g)) defined by x -> x^g.

source
is_inner_automorphismMethod
is_inner_automorphism(f::GAPGroupHomomorphism)
is_inner_automorphism(f::GAPGroupElem{AutomorphismGroup{T}})

Return whether f is an inner automorphism.

source