############################################################################# ## #F InvariantSubgroupsCA(act, ser, avoid, cover, pretest, test, data) ## ## computes the G-invariant normal subgroups N of ser[1] such that ## ser[cover] equals the intersection of N and ser[avoid], N contains ## ser[cover] properly, and N belongs to the class described by the functions ## pretest and test. pretest and test are the functions described in the ## manual(see "OneInvariantSubgroupMaxWrtNProperty"). ##
InstallGlobalFunction(InvariantSubgroupsCA, function(act, ser, avoid, cover, pretest, test, data)
bool := pretest(ser[avoid-1], ser[avoid], ser[cover], data); if bool <> false then if avoid = cover then
CC := [ser[avoid-1]]; else
CC := ComplementsMaximalUnderAction(act, ser, avoid-1,
avoid, cover, true);
Info(InfoLattice, 1, Length(CC), " complements found"); fi; if Length(CC) > 0then
newser := ShallowCopy(ser); for L in CC do if bool = true or test(L, ser[cover], data) then # L belongs to class
newser[cover-1] := L; for j in [avoid+1..cover-1] do # make ser a chief series through L
newser[j-1] := ClosureGroup(ser[j], L);
od;
Add(norms, L); if avoid > 2then
Append(norms,
InvariantSubgroupsCA(act,
newser, avoid-1, cover-1,
pretest, test, data)); fi; fi;
od; fi; fi;
return norms; end);
############################################################################# ## #M AllInvariantSubgroupsWithNProperty ##
CRISP_RedispatchOnCondition(AllInvariantSubgroupsWithNProperty, "redispatch if group is finite or soluble",
true,
[IsListOrCollection, IsGroup, IsFunction, IsFunction, IsObject],
[, IsFinite and IsSolvableGroup], # no conditions on other arguments 0);
ser := ShallowCopy(CompositionSeriesUnderAction(act, G));
n := Length(ser);
for rpos in [n-1, n-2..1] do
Info(InfoComplement, 1, "starting step ",n-rpos, "(testing ser)");
bool := pretest(ser[rpos], ser[rpos+1], ser[rpos+1], data); if bool = fail then
bool := test(ser[rpos], ser[rpos+1], data); fi; if not bool then
break; fi;
od;
if bool then# G has passed test
return G; fi;
rpos := rpos + 1;
for i in [rpos-2,rpos-3..1] do # ser[rpos] is the property-radical of ser[i+1]
Info(InfoComplement, 1, "starting step ",n-i+1);
bool := pretest(ser[i], ser[i+1], ser[rpos], data); if bool <> false then
Info(InfoComplement, 3, "Complementing");
CC := ComplementsMaximalUnderAction(act, ser, i, i+1, rpos, bool <> true);
Info(InfoComplement, 3, Length(CC), "complements found, ", "(bool = ",bool, ")"); if bool = true then if CC = fail then
CC := []; else
CC := [CC]; fi; fi; for R in CC do if bool = true or test(R, ser[rpos], data) then# R is the property-radical of i
Info(InfoComplement, 3, "modifying series...\n"); for j in [i+2..rpos-1] do
ser[j-1] := ClosureGroup(ser[j], R); #make ser a chief series through L
od;
rpos := rpos - 1;
ser[rpos] := R;
break; # no need to check other groups fi;
od; fi;
od;
return ser[rpos]; end);
############################################################################# ## #M OneInvariantSubgroupMaxWrtNProperty ##
CRISP_RedispatchOnCondition(OneInvariantSubgroupMaxWrtNProperty, "redispatch if group is finite or soluble",
true,
[IsListOrCollection, IsGroup, IsFunction, IsFunction, IsObject],
[, IsFinite and IsSolvableGroup], # no conditions on other arguments 0);
############################################################################# ## #M RadicalOp ##
InstallMethod(RadicalOp, "if only in is known", true,
[IsGroup and IsFinite and CanEasilyComputePcgs, IsFittingClass], 0, function(G, C)
return OneInvariantSubgroupMaxWrtNProperty(G, G, function(U, V, R, class) if SmallestRootInt(Index(U, V)) in Characteristic(class) then
return fail; # cannot decide else
return false; # never in C fi; end, function(S, R, class)
return S in class; end,
C); end);
############################################################################# ## #M RadicalOp ##
InstallMethod(RadicalOp, "if injector is known", true,
[IsGroup and IsFinite and IsSolvableGroup, IsFittingClass and HasInjectorFunction], 2, function(G, C)
return Core(G, Injector(G, C)); end);
############################################################################# ## #M RadicalOp ##
InstallMethod(RadicalOp, "if radical function is known", true,
[IsGroup and IsFinite and IsSolvableGroup, IsFittingClass and HasRadicalFunction],
SUM_FLAGS, # high preference function(G, C)
return RadicalFunction(C)(G); end);
############################################################################# ## #M RadicalOp ##
InstallMethod(RadicalOp, "for Fitting product", true,
[IsGroup and IsFinite and IsSolvableGroup, IsFittingProductRep], 0, function(G, C)
local nat;
nat := NaturalHomomorphismByNormalSubgroup(G, Radical(G, C!.bot));
return PreImagesSet(nat, Radical(ImagesSource(nat), C!.top)); end);
############################################################################# ## #M RadicalOp ##
InstallMethod(RadicalOp, "for intersection of classes", true,
[IsGroup and IsFinite and IsSolvableGroup, IsFittingClass and IsClassByIntersectionRep], function(G, C)
local D, R, l;
R := G;
l := []; for D in C!.intersected do if HasRadicalFunction(D) then
R := RadicalFunction(D)(R); else
Add(l, D); fi;
od; if Length(l) > 0then # compute a normal subgroup of R which is maximal with respect # to belonging to all classes in l. Since every normal subgroup # of the C-Residual of G belongs to l, the C-residual of G # contains the group returned by OneNormalSubgroupMaxWrtNProperty, # even though the intersection of the classes in l need not itself # be a Fitting class.
return OneInvariantSubgroupMaxWrtNProperty(G, R, function(U, V, T, data)
local p;
p := Factors(Index(U, V))[1]; if ForAll(data, D -> p in Characteristic(D)) then
return fail; # cannot decide else
return false; # never in fi; end, function(S, T, data)
return ForAll(data, D -> S in D); end,
l); else
return R; fi; end);
############################################################################# ## #M RadicalOp ##
InstallMethodByNiceMonomorphismForGroupAndClass(RadicalOp,
IsFinite and IsSolvableGroup, IsFittingClass);
############################################################################# ## #M RadicalOp ##
InstallMethodByIsomorphismPcGroupForGroupAndClass(RadicalOp,
IsFinite and IsSolvableGroup, IsFittingClass);
############################################################################# ## #M RadicalOp ##
InstallMethod(RadicalOp, "generic method for FittingSetRep", function(G, C)
return IsIdenticalObj(CollectionsFamily(G), C); end,
[IsGroup and IsFinite and IsSolvableGroup, IsFittingSetRep], 0, function(G, C) if not IsFittingSet(G, C) then
Error("<C> must be a Fitting set for <G>"); fi;
return OneInvariantSubgroupMaxWrtNProperty(G, G,
ReturnFail, function(S, R, data)
return S in data; end,
C); end);
############################################################################# ## #M RadicalOp ##
InstallMethod(RadicalOp, "for FittingSetRep with injector function", function(G, C)
return IsIdenticalObj(CollectionsFamily(G), C); end,
[IsGroup and IsFinite and IsSolvableGroup,
IsFittingSetRep and HasInjectorFunction], 0, function(G, C) if not IsFittingSet(G, C) then
Error("<C> must be a Fitting set for <G>"); fi;
return Core(G, Injector(G, C)); end);
############################################################################# ## #M RadicalOp ##
InstallMethod(RadicalOp, "for FittingSetRep with radical function", function(G, C)
return IsIdenticalObj(CollectionsFamily(G), C); end,
[IsGroup and IsFinite and IsSolvableGroup,
IsFittingSetRep and HasRadicalFunction],
SUM_FLAGS, # highly preferable function(G, C) if not IsFittingSet(G, C) then
Error("<C> must be a Fitting set for <G>"); fi;
return RadicalFunction(C)(G); end);
############################################################################# ## #M RadicalOp ##
CRISP_RedispatchOnCondition(RadicalOp, "redispatch if group is finite or soluble",
true,
[IsGroup, IsGroupClass], [IsFinite and IsSolvableGroup],
RankFilter(IsGroup) + RankFilter(IsGroupClass));
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.