GAP 4.8.9 installation with standard packages -- copy to your CoCalc project to get it
############################################################################# ## ## cocyclic.gi HAPcocyclic Robert F. Morse ## ## ## $Id: ccgroup.gi,v 1.4 2008-07-11 22:42:22 unialg Exp $ ############################################################################# ## ## Constructors for Cc-groups ## ## InstallMethod ( CcGroup, "Create a CcGroup via basic components", [ IsGOuterGroup, IsStandardNCocycle ], function( OA, SCo) local G, ## Cc group to be constructed type, ## Unique type of Cc-group gens, ## Generators of group elmsfam, ## Family of elements for the group f,b, ## Index elements modSCo, ## f+SCo with f a nonabelian cocycle #GRAHAM nafn, fn, ## nonabelian cocycle nafn:(B,B)-->N, abelian newfn; ## cocycle fn:(B,B)-->A and newfn:(B,B)-->N #GRAHAM #############GRAHAM##################### if IsAbelian(OA!.ActedGroup) then modSCo:=SCo; else fn:=SCo!.Mapping; nafn:=OA!.nonabeliancocycle; newfn:=function(x,y); return nafn(x,y)*fn(x,y);end; modSCo:=SCo; modSCo!.Mapping:=newfn; fi; #############GRAHAM##################### ## Create elements family and type of the group ## elmsfam := NewFamily("cce", IsCcElement); type := NewType ( CollectionsFamily(elmsfam), IsGroup and IsCcGroup and IsComponentObjectRep and IsAttributeStoringRep ); ## Construct a Cc-group with attribute known so far ## G := rec(); ObjectifyWithAttributes ( G, type, Base, ActingGroup(OA), Fibre, ActedGroup(OA), OuterGroup, OA, Cocycle, modSCo, ElementsFamily, elmsfam ); ## Set the multiplicative identity ## SetOne( G, CcElement ( elmsfam, Mapping(SCo)(One(Base(G)), One(Base(G)))^-1, One(Base(G)), G ) ); ## Set generators of the group ## gens := []; for f in Filtered( GeneratorsOfGroup(Fibre(G)), x->not x = One(Fibre(G)) ) do Add( gens, CcElement ( elmsfam, f, One(Base(G)), G ) ); od; for b in Filtered( GeneratorsOfGroup(Base(G)), x->not x = One(Base(G)) ) do Add( gens, CcElement ( elmsfam, One(Fibre(G)), b, G ) ); od; SetGeneratorsOfGroup(G, gens); Size(G); return G; end ); ############################################################################# ## ## Construct an "empty" Cc-group. Only attribute set is ## the family for elements in this group. ## InstallMethod ( CcGroup, "Create an empty CcGroup", [ ], function( ) local G, ## Cc group to be constructed elmsfam, ## Family of elements for the group type; ## Unique type for this group ## Create elements family and type of the group ## elmsfam := NewFamily("cce", IsCcElement); type := NewType ( CollectionsFamily(elmsfam), IsGroup and IsCcGroup and IsComponentObjectRep and IsAttributeStoringRep ); ## Create group object ## G := rec(); ObjectifyWithAttributes ( G, type, ElementsFamily, elmsfam ); return G; end ); ############################################################################# ## ## IdGroup ## InstallMethod ( IdGroup, true, [ IsCcGroup ], 0, function( Cc ) return IdGroup( Image(IsomorphismPermGroup(Cc)) ); end ); ############################################################################# ## #M AsList Method to create a list of elements of a CcGroup ## ## InstallMethod ( AsList, true, [ IsCcGroup ], 0, function( Cc ) local lst, ## List of elements f,b; ## Fibre and base index elements lst :=[]; for f in Fibre(Cc) do for b in Base(Cc) do Add( lst, CcElement ( FamilyObj(One(Cc)), f, b, Cc ) ); od; od; return lst; end ); ############################################################################# ## #M AsSSortedList ## ## Returns the list of elements of a Cc-group as a set ## InstallMethod ( AsSSortedList, true, [IsCcGroup], 0, Cc -> AsSet(AsList(Cc)) ); ############################################################################# ## ## Size of a Cc-group ## InstallMethod ( Size, true, [ IsCcGroup ], 0, function( G ) ## Size of the group ## if not IsFinite(Base(G)) then return Size(Base(G)); fi; if not IsFinite(Fibre(G)) then return Size(Fibre(G)); fi; return Size(Base(G))*Size(Fibre(G)); end ); ############################################################################# ## ## PrintObj and ViewObj Methods for Cc-groups. ## InstallMethod ( PrintObj, true, [ IsCcGroup ], 0, function( G ) if HasSize(G) then Print("<Cc-group of Size ",Size(G),">"); else Print("<Cc-group>"); fi; end ); InstallMethod ( ViewObj, true, [ IsCcGroup ], SUM_FLAGS, function( G ) if HasSize(G) then Print("<Cc-group of Size ",Size(G),">"); else Print("<Cc-group>"); fi; end ); ############################################################################# ## ## History ## ## $Log: ccgroup.gi,v $ ## Revision 1.4 2008-07-11 22:42:22 unialg ## ## Some final clean up before first release. RFM ## ## Revision 1.3 2008-07-11 22:04:17 unialg ## ## Added IdGroup but avoiding Multiplication tables. RFM ## ## Revision 1.2 2008-07-11 21:38:55 unialg ## ## Development commit for beta release. RFM ## ## Revision 1.1 2008-07-11 21:02:00 unialg ## ## First beta release. RFM ## ## Revision 1.1 2008-06-11 17:26:09 unialg ## File Creation. RFM ##