GAP 4.8.9 installation with standard packages -- copy to your CoCalc project to get it
############################################################################# ## ## cocyclic.gi HAPcocyclic Robert F. Morse ## ## ## $Id: cocyclic.gi,v 1.1 2008-06-11 17:26:09 unialg Exp $ ############################################################################# ## ## Constructors for Cc-groups ## ## InstallMethod( CcGroup, "Create a CcGroup via basic components", [ IsGOuterGroup, IsStandard2Cocycle ], function( OA, SCo) local G, ## Cc group to be constructed type, ## gens, ## elmsfam, ## f,b; ## Index elements 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), FibreMapping, IdentityMapping(ActedGroup(OA)), OuterGroup, OA, Cocycle, SCo, ElementsFamily, elmsfam ); ## Set the multiplicative identity ## SetOne( G, CcElement ( elmsfam, Cocycle(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, ## type; elmsfam := NewFamily("cce", IsCcElement); type := NewType ( CollectionsFamily(elmsfam), IsGroup and IsCcGroup and IsComponentObjectRep and IsAttributeStoringRep ); G := rec(); ObjectifyWithAttributes ( G, type, ElementsFamily, elmsfam ); return G; end ); InstallMethod ( CcGroup, "construct a new group with the same elements family", [ IsObject ], function( elmsfam ) local G, type; type := NewType ( CollectionsFamily(elmsfam), IsGroup and IsCcGroup and IsComponentObjectRep and IsAttributeStoringRep ); G := rec(); ObjectifyWithAttributes ( G, type, ElementsFamily, elmsfam ); return G; end ); ############################################################################# ## #M AsList Method to create a list of Element of a CcGroup ## ## InstallMethod(AsList, true, [IsCcGroup], 0, function( Cc ) local n,g, lst; lst :=[]; for n in Fibre(Cc) do for g in Base(Cc) do Add( lst, CcElement ( FamilyObj(One(Cc)), n, g, 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)) ); InstallMethod(MagmaWithInversesByGenerators, true, [IsCcGroup, IsList], 0, function(ccg,gens) return "this is a joke"; end ); ############################################################################# ## #M Centre ## ## Returns the centre of a Cc-group ## ## Method: Take ## InstallMethod(Centre, true, [IsCcGroup], 0, function(G) local Zgens, ZF, ZB, B, F, fam, ccg, type, cocyc, fm, act; B := Base(G); F := Fibre(G); fam := ElementsFamily(G); cocyc := Cocycle(Cocycle(G)); ZB := Centre(B); Zgens := List(Cartesian(F,ZB), x->CcElement(fam, x[1], x[2], G)); Zgens := Filtered(Zgens, x->ForAll(GeneratorsOfGroup(G), y->IsOne(Comm(x,y)))); ZB := Subgroup(B, List(Zgens, BaseElement)); ## This subgroup my be too large ## ZF := Subgroup(F, List(Zgens, FibreElement)); fm := NaturalHomomorphismByNormalSubgroup ( ZF, Subgroup ( ZF, List(Cartesian(ZB,ZB), x->cocyc(x[1],x[2])) ) ); ZF := Image(fm); ccg := rec(); type := NewType ( CollectionsFamily(ElementsFamily(G)), IsGroup and IsCcGroup and IsComponentObjectRep and IsAttributeStoringRep ); ObjectifyWithAttributes ( ccg, type, ElementsFamily, ElementsFamily(G), Fibre, ZF, Base, ZB, FibreMapping, fm, OuterGroup, OuterGroup(G), Cocycle, Cocycle(G), ParentAttr, G ); Zgens := List ( GeneratorsOfGroup(ZF), x->CcElement ( ElementsFamily(G), x, One(ZB), ccg ) ); Append( Zgens, List ( GeneratorsOfGroup(ZB), x->CcElement ( ElementsFamily(G), One(ZF), x, ccg ) ) ); SetOne(ccg, CcElement( ElementsFamily(G), One(ZF), One(ZB), ccg ) ); SetGeneratorsOfGroup(ccg,Zgens); Size(ccg); return ccg; end ); InstallMethod( TrivialSubgroup, true, [IsCcGroup], 0, function( ccg ) local G,one; G := CcGroup(ElementsFamily(ccg)); one := CcElement ( ElementsFamily(ccg), One(Fibre(ccg)), One(Base(ccg)), ccg ); SetFibre ( G, TrivialSubgroup(Fibre(ccg)) ); SetBase ( G, TrivialSubgroup(Base(ccg)) ); SetFibreMapping ( G, IdentityMapping(TrivialSubgroup(Fibre(ccg))) ); SetOuterGroup ( G, OuterGroup(ccg) ); SetCocycle ( G, Cocycle(ccg) ); SetParentAttr ( G, ccg ); SetGeneratorsOfGroup ( G, [one] ); SetOne ( G, one ); SetSize ( G, 1 ); return G; end ); InstallMethod( IdGroup, true, [ IsCcGroup ], 0, function( G ) return IdGroup ( Image ( IsomorphismPermGroup ( GroupByMultiplicationTable ( MultiplicationTable ( AsList(G) ) ) ) ) ); end ); ############################################################################# ## ## 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: cocyclic.gi,v $ ## Revision 1.1 2008-06-11 17:26:09 unialg ## File Creation. RFM ##