Computing the class-preserving automorphism group of finite $p$-groups

234 Views Asked by At

Let $G$ be a finite non-abelian $p$-group, where $p$ is a prime. An automorphism $\alpha$ of $G$ is called a class-preserving if for each $x\in G$, there exists an element $g_x\in G$ such that $\alpha(x)=g_x^{-1}xg_x$. An automorphism $\alpha$ of $G$ is called a $2$nd class-preserving if for each $x\in G$, there exists an element $g_x\in G'=[G,G]$ such that $\alpha(x)=g_x^{-1}xg_x$. Let $\mathrm{Aut_c}(G)$ and $\mathrm{Aut_c^2}(G)$ respectively denote the group of all class-preserving and $2$nd class-preserving automorphisms of $G$.

I have made a GAP program to find the structure of $\mathrm{Aut_c}(G)$ but I failed to make a GAP program to find the structure of $\mathrm{Aut_c^2}(G)$. The GAP program to find the structure of $\mathrm{Aut_c}(G)$ is following:

ClassPreservingAuts:= function(G)
local A,I,cc,gens,auts,a,ok,i,hom;
A:=AutomorphismGroup(G);
I:=InnerAutomorphismsAutomorphismGroup(A);
hom:=NaturalHomomorphismByNormalSubgroup(A,I);
cc:=ConjugacyClasses(G);
gens:=[];
auts:=Group([One(A)]);

# check for class preserving
for a in Elements(A) do
  ok:=true;
  # run through classes
  i:=0;
  while i<Length(cc) and ok=true do
    i:=i+1;
    if not (Representative(cc[i])^a in cc[i]) then
      ok:=false;
    fi;
  od;
  # a is class preserving
  if ok=true and not (a in auts) then
    Add (gens,a);
    auts:= Group(gens);
    #inng:=Image(hom(x));
    #gens:=GeneratorsOfGroup(inng);
  fi;
od;
return auts;
return auts/I;
return Size(auts)/Size(I);
end;

My question is the following:

Can anybody help me to make a GAP program to find the structure of $\mathrm{Aut_c^2}(G)$?

1

There are 1 best solutions below

0
On

Your current test is

if not (Representative(cc[i])^a in cc[i]) then

that will eliminate elements as not lying in the subgroup you want. We could phrase this alternatively (this is in fact what the in test does) as

if RepresentativeAction(G,Representative(cc[i])^a,Representative(cc[i])=fail then

that is we are testing whether there is an element in G that will conjugate the class representative in the same way as the automorphism a does.

This is now easily generalized. Add

Gd:=DerivedSubgroup(G);

at the start and change the test to

if RepresentativeAction(Gd,Representative(cc[i])^a,Representative(cc[i])=fail then

Finally -- it is not clear from your code whether you want to factor out the inner automorphisms -- you would factor out not all inner automorphisms, but only those induced by $G'$.