GAP 4.8.9 installation with standard packages -- copy to your CoCalc project to get it
#############################################################################
##
#W Central.gi FGA package Christian Sievers
##
## Method installations for centralizers in free groups
##
#Y 2003 - 2012
##
#############################################################################
##
#M CentralizersOp( <group>, <elm> )
##
InstallMethod( CentralizerOp,
"for an element in a free group",
IsCollsElms,
[ IsFreeGroup, IsElementOfFreeGroup ],
function(G,g)
local i, l, len, div, w, f, p, pp, c;
if g=One(G) then
return G;
fi;
w := LetterRepAssocWord(g);
i := 1;
l := Length(w);
while w[i] = -w[l] do
i := i+1;
l := l-1;
od;
len := l-i+1;
pp := PrimePowersInt(len);
f := 1;
while f<Length(pp) do
div := pp[f];
p := pp[f+1];
while p > 0 and
w{[i..i+len-(len/div)-1]} = w{[i+len/div..i+len-1]} do
len := len/div;
p := p-1;
od;
f := f+2;
od;
# return Group(AssocWordByLetterRep(FamilyObj(g), w{[i..i+len-1]})^
# AssocWordByLetterRep(FamilyObj(g), w{[l+1..Length(w)]}) );
c := FindPowLetterRep(G, w{[1..i-1]}, w{[i..i+len-1]},
w{[l+1..Length(w)]} );
if c = fail then
return TrivialSubgroup(G);
else
return Group(c);
fi;
end );
#############################################################################
##
#M CentralizerOp( <group>, <subgroup> )
##
InstallMethod( CentralizerOp,
"for a subgroup of a free group",
IsIdenticalObj,
[ IsFreeGroup, IsFreeGroup ],
function(F,G)
local r;
r := RankOfFreeGroup(G);
if r >= 2 then
return TrivialSubgroup(F);
elif r = 1 then
return Centralizer(F, FreeGeneratorsOfGroup(G)[1]);
else # (r = 0)
return F;
fi;
end );
#############################################################################
##
#E