GAP 4.8.9 installation with standard packages -- copy to your CoCalc project to get it
############################################################################# ## ## ccelms.gi HAPCocyclic Robert F. Morse ## ## $Id: ccelms.gi,v 1.2 2008-07-11 21:33:20 unialg Exp $ ## ############################################################################# ## ## Create a CcElement ## InstallGlobalFunction ( CcElement, function ( Fam, ## Elements family f, b, ## fibre and base components Ccg ## Cc-group the element belongs to ) local elm, ## Element to create type; ## type for the element elm := rec(); type := NewType( Fam, IsCcElement and IsCcElementRep ); ## Create element ## ObjectifyWithAttributes ( elm, type, FibreElement, f, BaseElement, b, Name, "c", InCcGroup, Ccg ); return elm; end ); ############################################################################# ## ## Multiplication method for cc-elements ## InstallMethod ( \*, "for cc elements", IsIdenticalObj, [IsCcElement, IsCcElement], 0, function( l, r ) local act, ## Outer action B --> F cocyc, ## Cocycle (B,B) --> F f1, b1, ## fibre, base components f2, b2; ## of l and r respectively f1 := FibreElement(l); b1 := BaseElement(l); f2 := FibreElement(r); b2 := BaseElement(r); act := OuterAction(OuterGroup(InCcGroup(l))); cocyc := Mapping(Cocycle(InCcGroup(l))); return CcElement ( FamilyObj(l), #f1*act(b1^-1,f2)*cocyc(b1,b2), f1*act(b1,f2)*cocyc(b1,b2), #Modified by Graham b1*b2, InCcGroup(l) ); end ); ############################################################################# ## ## Inverse method for cc-elements ## ## (f,b) = (f,1)(1,b) so ## (f,b)^-1 = (1,b)^-1 * (f,1)^-1 = ( (b,b^-1), b^-1 ) * (f^-1 (1,1), 1) ## InstallMethod ( INV, "for ccp elements", true, [IsCcElement], 0, function( g ) local cocyc, ## Cocycle BxB --> F f, b; ## fibre, base components of g cocyc := Mapping(Cocycle(InCcGroup(g))); f := CcElement ( FamilyObj(g), FibreElement(g)^-1 * cocyc( One(BaseElement(g)), One(BaseElement(g)) )^-1, BaseElement(One(g)), InCcGroup(g) ); b := CcElement ( FamilyObj(g), cocyc( BaseElement(g), BaseElement(g)^-1 )^-1, BaseElement(g)^-1, InCcGroup(g) ); return b*f; end ); ############################################################################# ## ## Obtain the identity element of an element of the same family ## InstallMethod( One,true,[IsCcElement],0, c -> One(InCcGroup(c)) ); ############################################################################# ## ## Determine if a Cc-element is the identity element ## InstallMethod( IsOne,true,[IsCcElement],0, c -> c = One(InCcGroup(c)) ); ############################################################################# ## ## Equality method for two CcElements. ## ## Equality on the tuples l = (fl,bl) and r = (fr,br). ## InstallMethod ( \=, "for cc elements", IsIdenticalObj, [IsCcElement, IsCcElement], 0, function( l, r ) return ( FibreElement(l) = FibreElement(r) ) and ( BaseElement(l) = BaseElement(r) ); end ); ############################################################################# ## ## Less than method for two CcElements. ## ## Lexicographical on the tuples l = (fl,bl) and r = (fr,br). ## InstallMethod ( \<, "for cc elements", IsIdenticalObj, [IsCcElement, IsCcElement], 0, function( l, r ) if ( FibreElement(l) < FibreElement(r) ) then return true; fi; if ( FibreElement(l) = FibreElement(r) ) then return ( BaseElement(l) < BaseElement(r) ); fi; return false; end ); ############################################################################# ## ## History ## ## $Log: ccelms.gi,v $ ## Revision 1.2 2008-07-11 21:33:20 unialg ## ## Development commit for beta version. RFM ## ## Revision 1.1 2008-07-11 21:01:19 unialg ## ## First release. RFM ## ## ##