1#############################################################################
2##
3#W  isoclinic.gd              GAP4 package `XMod'                Alper Odabas
4#W                                                               & Enver Uslu
5#Y  Copyright (C) 2001-2019, Chris Wensley et al
6
7#############################################################################
8##
9#A  FixedPointSubgroupXMod . . . . . . . . {s in S | s^r = s for all r in R}
10#A  StabilizerSubgroupXMod . . . . . . . . {r in R | s^r = s for all s in S}
11##
12DeclareOperation( "FixedPointSubgroupXMod", [ IsPreXMod, IsGroup, IsGroup ] );
13DeclareOperation( "StabilizerSubgroupXMod", [ IsPreXMod, IsGroup, IsGroup ] );
14
15#############################################################################
16##
17#O Displacement( act, r, s )
18#O DisplacementGroup( XM, R, S )
19#A DisplacementSubgroup( XM )
20#O CrossActionSubgroup( XM )
21##
22DeclareOperation( "Displacement", [ IsGroupHomomorphism, IsObject, IsObject ] );
23DeclareOperation( "DisplacementGroup", [ IsXMod, IsGroup, IsGroup ] );
24DeclareAttribute( "DisplacementSubgroup", IsXMod );
25DeclareOperation( "CrossActionSubgroup", [ IsXMod, IsXMod, IsXMod ] );
26
27#############################################################################
28##
29#A DerivedSubXMod  . . . . . . . . . the commutator of the crossed module
30##
31DeclareAttribute( "DerivedSubXMod", IsXMod );
32
33#############################################################################
34##
35#O IntersectionSubXMods . . . . .intersection of subcrossed modules SH and RK
36##
37DeclareOperation( "IntersectionSubXMods", [  IsXMod, IsXMod, IsXMod ] );
38
39#############################################################################
40##
41#O FactorPreXMod  . . . . . . . . . . . . . . the quotient precrossed module
42#O NaturalMorphismByNormalSubPreXMod . . . . . the quotient prexmod morphism
43##
44DeclareOperation( "FactorPreXMod", [ IsPreXMod, IsPreXMod ] );
45DeclareOperation( "NaturalMorphismByNormalSubPreXMod",
46    [ IsPreXMod, IsPreXMod ] );
47DeclareAttribute( "ProjectionOfFactorPreXMod", IsPreXMod );
48
49#############################################################################
50##
51#O CommutatorSubXMod  . . . . . . . commutator subxmod of two normal subxmods
52##
53DeclareOperation( "CommutatorSubXMod", [  IsXMod, IsXMod, IsXMod ] );
54
55#############################################################################
56##
57#O  CentreXMod  . . . . . . . . . . . . . . . the center of a crossed module
58##
59DeclareAttribute( "CentreXMod", IsXMod );
60DeclareSynonym( "CenterXMod", CentreXMod );
61
62#############################################################################
63##
64#O IsAbelian2DimensionalGroup
65#O IsAspherical2DimensionalGroup
66#O IsSimplyConnected2DimensionalGroup
67#O IsFaithful2DimensionalGroup
68##
69DeclareProperty( "IsAbelian2DimensionalGroup", Is2DimensionalGroup );
70DeclareProperty( "IsAspherical2DimensionalGroup", Is2DimensionalGroup );
71DeclareProperty( "IsSimplyConnected2DimensionalGroup", Is2DimensionalGroup );
72DeclareProperty( "IsFaithful2DimensionalGroup", Is2DimensionalGroup );
73
74#############################################################################
75##
76#P IsNilpotent2DimensionalGroup . . check an xmod or cat1-group is nilpotent
77#A NilpotencyClassOf2DimensionalGroup . nilpotency degree of xmod/cat1-group
78##
79DeclareProperty( "IsNilpotent2DimensionalGroup", Is2DimensionalGroup );
80DeclareAttribute( "NilpotencyClassOf2DimensionalGroup", Is2DimensionalGroup );
81
82#############################################################################
83##
84#O IsomorphismXMods  . . . . . check that two crossed modules are isomorphic
85##
86DeclareOperation( "IsomorphismXMods",
87    [ Is2DimensionalGroup, Is2DimensionalGroup ] );
88
89#############################################################################
90##
91#F AllXMods
92#O AllXModsWithGroups  . . . . . . . . . all xmods with given source and range
93##
94DeclareGlobalFunction( "AllXMods" );
95DeclareOperation( "AllXModsWithGroups", [ IsGroup, IsGroup ] );
96DeclareOperation( "AllXModsWithGroups0", [ IsGroup, IsGroup ] );
97DeclareOperation( "AllXModsWithGroups1", [ IsGroup, IsGroup ] );
98DeclareOperation( "AllXModsWithGroups2", [ IsGroup, IsGroup ] );
99DeclareOperation( "AllXModsWithGroups3", [ IsGroup, IsGroup ] );
100
101
102#############################################################################
103#####                FUNCTIONS FOR ISOCLINISM OF GROUPS                 #####
104#############################################################################
105
106#############################################################################
107##
108#P IsStemDomain . . check that the centre is a subgroup of the derived domain
109#O AllStemGroupFamilies . . . . . all IdGroups of stem groups of chosen order
110##
111DeclareProperty( "IsStemDomain", IsGroup );
112DeclareProperty( "IsStemDomain", IsXMod );
113DeclareOperation( "AllStemGroupIds", [ IsPosInt ] );
114DeclareOperation( "AllStemGroupFamilies", [ IsPosInt ] );
115DeclareAttribute( "CentralQuotient", IsDomain );
116
117#############################################################################
118##
119#A IsoclinicStemDomain  . . . . . . . . . . find a stem group for the group G
120#O Isoclinism . . . find a homomorphism between the stem groups of two groups
121#O AreIsoclinicDomains . . . does an isoclinism exist between two (2d-)groups
122##
123DeclareAttribute( "IsoclinicStemDomain", IsGroup );
124DeclareOperation( "Isoclinism", [ IsGroup, IsGroup ] );
125DeclareOperation( "Isoclinism", [ IsXMod, IsXMod ] );
126DeclareOperation( "AreIsoclinicDomains", [ IsDomain, IsDomain ] );
127
128
129#############################################################################
130#####           FUNCTIONS FOR ISOCLINISM OF CROSSED MODULES             #####
131#############################################################################
132
133#############################################################################
134##
135#O IsoclinicXModFamily  . . . . . . all xmods in list isoclinic to given xmod
136##
137DeclareOperation( "IsoclinicXModFamily", [  Is2DimensionalGroup, IsList ] );
138
139#############################################################################
140##
141#O IsomorphicXModFamily
142## . . . . . . . all xmods in the list which are isomorphic to the given xmod
143##
144DeclareOperation( "IsomorphicXModFamily", [  Is2DimensionalGroup, IsList ] );
145
146#############################################################################
147##
148#O AllXModsUpToIsomorphism . . . . . . all crossed modules up to isomorphism
149##
150DeclareOperation( "AllXModsUpToIsomorphism", [ IsList ] );
151
152#############################################################################
153##
154#A IsoclinicMiddleLength . .  the middle length of a group or crossed module
155#A IsoclinicRank   . . . . . . . . . . the rank of a group or crossed module
156##
157DeclareAttribute( "IsoclinicMiddleLength", IsGroup );
158DeclareAttribute( "IsoclinicMiddleLength", Is2DimensionalGroup );
159DeclareAttribute( "IsoclinicRank", IsGroup );
160DeclareAttribute( "IsoclinicRank", Is2DimensionalGroup );
161
162#############################################################################
163##
164#O TableRowXMod  . . . . table row for isoclinism families of crossed modules
165##
166DeclareOperation( "TableRowXMod", [ Is2DimensionalGroup, IsList ] );
167