1\def\x{\times}
2\hyphenation{Cryst-Cat-Record}
3
4%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
5\Chapter{The Crystallographic Groups Catalog}
6
7\index{crystallographic groups}
8\index{crystcat}
9
10The package {\CrystCat} provides a catalog of crystallographic groups
11of dimensions 2, 3, and 4 which covers most of the data contained
12in the book ``Crystallographic groups of four-dimensional space''
13\cite{BBNWZ78}. It has been brought into {\GAP} format by Volkmar
14Felsch.
15
16The {\GAP} 4 version of the catalog requires the package {\Cryst},
17which is loaded automatically. The benefit of this is that space groups
18extracted from the catalog now have the rich set of methods provided
19by {\Cryst} at their disposal, and are no longer dumb lists of generators.
20Moreover, space groups are now fully supported in both the representation
21acting from the left and the representation acting from the right.
22
23In 2001, Bernd Souvignier has discovered an error in the above mentioned
24book: On page 118, in the tabulation of enantiomorphic space-group types,
25it is wrongly claimed that the (affine) four-dimensional space-group
26type 08/01/01/002 splits into an enantiomorphic pair of (proper)
27space-group types. This is indicated by an asterisk preceding the
28space-group number. This asterisk has to be removed. As a
29consequence, the number of four-dimensional space-group types
30splitting into enantiomorphic pairs (given on page 11 and page 52
31of the book) reduces from 112 to 111. An erratum has been submitted
32to {\it Acta Cryst.}.
33
34The only implication of this correction for the package {\CrystCat}
35is that the output of the function
36\begintt
37DisplaySpaceGroupType( 4, 8, 1, 1, 2 );
38\endtt
39had to be changed from
40\begintt
41#I    *Space-group type (4,8,1,1,2); orbit size 2; fp-free
42\endtt
43to
44\begintt
45#I     Space-group type (4,8,1,1,2); orbit size 2; fp-free
46\endtt
47This has been done in the release {\GAP} 4.3.
48
49%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
50\Section{How to access the data of the book}
51
52Among others, the catalog offers functions which provide access to the
53data listed in the Tables 1, 5, and 6 of \cite{BBNWZ78}:
54
55\beginlist%unordered
56\item{$\bullet$}
57    The information on the crystal families listed in Table 1 can
58    be reproduced using the `DisplayCrystalFamily' function.
59\item{$\bullet$}
60    Similarly, the `DisplayCrystalSystem' function can be
61    used to reproduce the information on the crystal systems
62    provided in Table 1.
63\item{$\bullet$}
64    The information given in the $\Q$-class headlines of
65    Table 1 can be displayed by the `DisplayQClass' function,
66    whereas the `FpGroupQClass' function can be used to reproduce
67    the presentations that are listed in Table 1 for the $\Q$-class
68    representatives.
69\item{$\bullet$}
70    The information given in the $\Z$-class headlines of Table 1
71    will be covered by the results of the `DisplayZClass' function,
72    and the matrix generators of the $\Z$-class representatives can
73    be constructed by calling the `MatGroupZClass' function.
74\item{$\bullet$}
75    The `DisplaySpaceGroupType' and the
76    `DisplaySpaceGroupGenerators' functions can be used to
77    reproduce all of the information on the space-group types that
78    is provided in Table 1.
79\item{$\bullet$}
80    The normalizers listed in Table 5 can be reproduced by
81    calling the `NormalizerZClass' function.
82\item{$\bullet$}
83    Finally, the `CharTableQClass' function will compute the
84    character tables listed in Table 6, whereas the isomorphism
85    types given in Table 6 may be obtained by calling the
86    `DisplayQClass' function.
87\endlist
88
89The display functions mentioned in the above list print their output
90with different indentation.  So, calling them in a suitably nested
91loop, you may produce a listing in which the information about the
92objects of different type will be properly indented as has been done
93in Table 1 of \cite{BBNWZ78}.
94
95%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
96\Section{Representation of space groups}
97
98Probably the most important function in the catalog is the
99`SpaceGroupBBNWZ' function which provides representatives of the
100affine classes of space groups.  A space group of dimension $n$ is
101represented by an $(n+1)$-dimensional rational matrix group as
102follows.
103
104If $S$ is an $n$-dimensional space group, then each element $s$
105in $S$ is an affine mapping $s: V \to V$ of an $n$-dimensional
106$\R$-vector space $V$ onto itself.  Hence $s$ can be written as
107the product of an appropriate invertible linear mapping
108$g: V \to V$ and a translation by some translation
109vector $t \in V$ such that, if we write mappings from the left,
110we have $s(v) = g(v) + t$ for all $v \in V$.
111
112If we fix a basis of $V$ and then replace each $v \in V$ by the column
113vector of its coefficients with respect to that basis (and hence $V$
114by the isomorphic column vector space $\R^{n \x 1}$), we can describe
115the linear mapping $g$ involved in $s$ by an $n \x n$ matrix
116$M_g \in GL_n(\R)$ which acts by multiplication from the left on
117the column vectors in $\R^{n \x 1}$.  Hence, if we identify $V$ with
118$\R^{n \x 1}$, we have $s(v) = M_g v + t$ for all
119$v \in \R^{n \x 1}$.
120
121Moreover, if we extend each column vector $v \in \R^{n \x 1}$ to a
122column $[ [ v ], [ 1 ] ]$ of length $n+1$ by adding an entry 1
123in the last position and if we define an $(n+1) \x (n+1)$ matrix
124$M_s = [ [ M_g, t ], [ 0, 1 ] ]$, we have $[ [ s(v) ], [ 1 ] ] =
125M_s [ [ v ], [ 1 ] ]$ for all $v \in \R^{n \x 1}$. This means that
126we can represent the space group $S$ by the isomorphic group
127$M(S) = \{ M_s | s \in S \}$.  The submatrices $M_g$ occurring in
128the elements of $M(S)$ form an $n \x n$ matrix group $P(S)$, the
129``point group'' of $M(S)$.  In fact, we can choose the basis of
130$\R^{n \x 1}$ such that $M_g \in GL_n(\Z)$ and  $t \in \Q^{n \x 1}$
131for all $M_s \in M(S)$.  In particular, the space group
132representatives that are normally used by the crystallographers
133are of this form, and the book \cite{BBNWZ78} uses the same convention.
134
135The representation described above is the one usually used by
136crystallographers. There is, however, an alternative to the
137representation of the space group elements by matrices of the form
138$[ [ M_g, t ], [ 0, 1 ] ]$ as described above. Instead of
139considering the coefficient vectors as columns we may consider
140them as rows.  Then we can associate to each affine mapping
141$s \in S$ an $(n+1) \x (n+1)$ matrix $M\pif_s =
142[ [ M\pif_{g\pif}, 0 ], [ t\pif, 1 ] ]$ with
143$M\pif_{g\pif} \in GL_n(\R)$ and $t\pif \in \R^{1 \x n}$ such
144that $[s(v\pif),1] = [v\pif,1] M\pif_s$ for all
145$v\pif \in \R^{1 \x n}$, and we may represent $S$ by the matrix
146group $M\pif(S) = \{ M\pif_s | s \in S \}$.  Again, we can choose
147the basis of $\R^{1 \x n}$ such that $M\pif_{g\pif} \in GL_n(\Z)$
148and $t\pif \in \Q^{1 \x n}$ for all $M\pif_s \in M\pif(S)$.
149
150From the mathematical point of view, both approaches are equivalent.
151In particular, $M(S)$ and $M\pif(S)$ are isomorphic, for instance
152via the isomorphism $\tau$ mapping $M_s \in M(S)$ to
153$(M_s^{tr})^{-1}$.  Unfortunately, however, neither of the two
154is a good choice for our {\GAP} catalog.
155
156The first convention, using matrices which act on column vectors from
157the left, is not consistent with the fact that actions in {\GAP} are
158usually from the right.
159
160On the other hand, if we choose the second convention, we run into a
161problem with the names of the space groups as introduced in
162\cite{BBNWZ78}. Any such name does not just describe the abstract
163isomorphism type of the respective space group $S$, but reflects
164properties of the matrix group $M(S)$.  In particular, it contains as
165a leading part the name of the $\Z$-class of the associated point
166group $P(S)$.  Since the classification of space groups by affine
167equivalence is tantamount to their classification by abstract
168isomorphism, $M\pif(S)$ lies in the same affine class as $M(S)$ and
169hence should get the same name as $M(S)$.  But the point group $P(S)$
170that occurs in that name is not always $\Z$-equivalent to the point
171group $P\pif(S)$ of $M\pif(S)$.  For example, the isomorphism $\tau:
172M(S) \to M\pif(S)$ defined above maps the $\Z$-class representative
173with the parameters $[3,7,3,2]$ (in the notation described below) to
174the $\Z$-class representative with the parameters $[3,7,3,3]$.  In
175other words:\ The space group names introduced for the groups $M(S)$
176in \cite{BBNWZ78} lead to confusing inconsistencies if assigned to the
177groups $M\pif(S)$.
178
179In order to avoid this confusion we decided that the first convention
180is the lesser evil, and so the {\GAP} catalog follows the book. In
181particular, all functions listed in section "How to access the data
182of the book" use the convention of the book. The space groups, however,
183can be constructed in both representations, so that the user can choose
184the one that seems more appropriate in the particular situation.
185The function `SpaceGroupOnLeftBBNWZ' constructs a space group in
186the ``crystallographic'' representation acting on the left,
187whereas `SpaceGroupOnRightBBNWZ' constructs a space group in the
188representation acting on the right, as preferred by GAP. In order to
189avoid long function names (and in order to avoid mixing groups in
190different representations), one can set one{\pif}s own default
191with the function `SetCrystGroupDefaultAction'
192(see "ref:SetCrystGroupDefaultAction"),
193which takes as argument either `LeftAction' of `RightAction'.
194`SpaceGroupBBNWZ' then constructs a space group in this default
195representation. Initially, the default is `RightAction'.
196
197The space groups constructed from the catalog are matrix groups, which
198in addition have the property `IsAffineCrystGroupOnLeft' (or
199`IsAffineCrystGroupOnRight', respectively). The package {\Cryst}
200provides methods to compute with such groups. {\Cryst} is necessary
201for any serious computation with space groups, because the support of
202plain {\GAP} for infinite matrix groups (such as space groups) is very
203limited.
204
205Before we describe all available catalog functions in detail, we have
206to add two remarks.
207
208*Remark 1:*
209The concepts  used  in  this section are   defined  in chapter 1   (Basic
210definitions) of \cite{BBNWZ78}.  However, note that the definition of the
211concept of a crystal system given on page  16 of that  book relies on the
212following statement about $\Q$-classes:
213
214\beginitems
215& For a  $\Q$-class  <C>  there is a unique holohedry <H> such that
216  each  f.u. group in <C>  is a subgroup of some  f.u. group in
217  <H>,  but is not  a subgroup of any  f.u. group  belonging to a
218  holohedry of smaller order.
219\enditems
220
221This  statement is correct for  dimensions 1, 2,  3, and 4, and hence the
222definition of ``crystal system'' given on page 16 of \cite{BBNWZ78} is
223known  to   be unambiguous for   these  dimensions.  However, there  is a
224counterexample to  this statement in seven-dimensional  space so that the
225definition breaks down for some higher dimensions.
226
227Therefore,  the authors of  the book have  since proposed to replace this
228definition of ``crystal system''  by the  following much simpler  one,
229which has been discussed in more detail in \cite{NPW81}. To formulate it,
230we use    the   intersections  of $\Q$-classes    and  Bravais  flocks as
231introduced on page 17 of \cite{BBNWZ78}, and we define the classification
232of the set of all $\Z$-classes into crystal systems as follows:
233
234\beginitems
235& *Definition*:\  A crystal system  (introduced as an  equivalence
236  class  of   $\Z$-classes)   consists of  full  geometric  crystal
237  classes.  The $\Z$-classes  of  two  (geometric)  crystal classes
238  belong to the same crystal system  if and only if these geometric
239  crystal  classes  intersect  the same  set of  Bravais  flocks of
240  $\Z$-classes.
241\enditems
242
243From  this  definition  of  a  crystal system  of  $\Z$-classes  one then
244obtains  crystal systems of f.u.  groups,  of space-group types, and of
245space groups in the same manner as with the  preceding definitions in the
246book.
247
248The new definition is unambiguous for all dimensions. Moreover, it can be
249checked  from  the   tables   in the  book   that  it   defines  the same
250classification as the old one for dimensions 1, 2, 3, and 4.
251
252It should  be noted that  the concept of  crystal  family is well-defined
253independently of the dimension if one uses the ``more natural'' second
254definition of it at the end of page 17. Moreover, the first definition of
255crystal family on page  17 defines the same concept  as the second one if
256the now proposed definition of crystal system is used.
257
258
259*Remark 2:*
260The second remark just concerns a  different terminology in the tables of
261\cite{BBNWZ78} and in the current catalog. In group theory, the number of
262elements of a  finite group  usually is  called  the ``order'' of  the
263group.   This notation has  been  used throughout   in  the book.   Here,
264however,  we  will follow the    {\GAP}   conventions and use  the   term
265``size'' instead.
266
267
268%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
269\Section{Crystal Families}
270
271\>NrCrystalFamilies( <dim> )
272
273returns the number of crystal families in case of dimension <dim>.  It
274can be used to formulate loops over the crystal families.
275
276There are 4, 6, and 23 crystal families of dimension 2, 3, and 4,
277respectively.
278
279\beginexample
280gap> n := NrCrystalFamilies( 4 );
28123
282\endexample
283
284\>DisplayCrystalFamily( <dim>, <family> )
285
286displays for the specified crystal family essentially the same
287information as is provided for that family in Table 1 of
288\cite{BBNWZ78}, namely
289
290\beginlist%unordered
291\item{$\bullet$} the family name,
292
293\item{$\bullet$} the number of parameters,
294
295\item{$\bullet$} the common rational decomposition pattern,
296
297\item{$\bullet$} the common real decomposition pattern,
298
299\item{$\bullet$} the number of crystal systems in the family, and
300
301\item{$\bullet$} the number of Bravais flocks in the family.
302\endlist
303
304For details see \cite{BBNWZ78}.
305
306\beginexample
307gap> DisplayCrystalFamily( 4, 17 );
308#I Family XVII: cubic orthogonal; 2 free parameters;
309#I  Q-decomposition pattern 1+3; R-decomposition pattern 1+3;
310#I  2 crystal systems; 6 Bravais flocks
311gap> DisplayCrystalFamily( 4, 18 );
312#I Family XVIII: octagonal; 2 free parameters;
313#I  Q-irreducible; R-decomposition pattern 2+2;
314#I  1 crystal system; 1 Bravais flock
315gap> DisplayCrystalFamily( 4, 21 );
316#I Family XXI: di-isohexagonal orthogonal; 1 free parameter;
317#I  R-irreducible; 2 crystal systems; 2 Bravais flocks
318\endexample
319
320%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
321\Section{Crystal Systems}
322
323\>NrCrystalSystems( <dim> )
324
325returns the number of crystal systems in case of dimension <dim>. It
326can be used to formulate loops over the crystal systems.
327
328There are 4, 7, and 33 crystal systems of dimension 2, 3, and 4,
329respectively.
330
331\beginexample
332gap> n := NrCrystalSystems( 2 );
3334
334\endexample
335
336The following two functions are functions of crystal systems.
337
338Each crystal system is characterized by a pair (<dim>, <system>) where
339<dim>  is the associated dimension,  and  <system> is  the number of  the
340crystal system.
341
342\>DisplayCrystalSystem( <dim>, <system> )
343
344displays for the specified crystal system essentially the same
345information as is provided for that system in Table 1 of
346\cite{BBNWZ78}, namely
347
348\beginlist%unordered
349\item{$\bullet$}
350    the number of $\Q$-classes in the crystal system and
351\item{$\bullet$}
352    the identification number, i.~e., the triple (<dim>, <system>,
353    <q-class>) described below, of the $\Q$-class that is the
354    holohedry of the crystal system.
355\endlist
356
357For details see \cite{BBNWZ78}.
358
359\beginexample
360gap> for sys in [ 1 .. 4 ] do  DisplayCrystalSystem( 2, sys );  od;
361#I  Crystal system 1: 2 Q-classes; holohedry (2,1,2)
362#I  Crystal system 2: 2 Q-classes; holohedry (2,2,2)
363#I  Crystal system 3: 2 Q-classes; holohedry (2,3,2)
364#I  Crystal system 4: 4 Q-classes; holohedry (2,4,4)
365\endexample
366
367%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
368\Section{Q-Classes}
369
370\>NrQClassesCrystalSystem( <dim>, <system> )
371
372returns the number of $\Q$-classes within the given crystal system.
373It can be used to formulate loops over the $\Q$-classes.
374
375The following five functions are functions of $\Q$-classes.
376
377In general, the parameters characterizing a $\Q$-class will form a
378triple (<dim>, <system>, <q-class>) where <dim> is the associated
379dimension, <system> is the number of the associated crystal system,
380and <q-class> is the number of the $\Q$-class within the crystal
381system.  However, in case of dimensions 2 or 3, a $\Q$-class may also
382be characterized by a pair (<dim>, <IT-number>) where <IT-number> is
383the number in the International Tables for Crystallography
384\cite{Hah95} of any space-group type lying in (a $\Z$-class of) that
385$\Q$-class, or just by the Hermann-Mauguin symbol of any space-group
386type lying in (a $\Z$-class of) that $\Q$-class.
387
388The Hermann-Mauguin symbols \index{Hermann-Mauguin symbol} which we
389use in {\GAP} are the short Hermann-Mauguin symbols defined in the
3901983 edition of the International Tables \cite{Hah95}, but any
391occurring indices are expressed by ordinary integers, and bars are
392replaced by minus signs.  For example, the Hermann-Mauguin symbol
393<P>$\overline{4}2_1m$ will be represented by the string `\"P-421m\"'.
394
395\>DisplayQClass( <dim>, <system>, <q-class> )
396\>DisplayQClass( <dim>, <IT-number> )
397\>DisplayQClass( <Hermann-Mauguin-symbol> )
398
399displays for the specified $\Q$-class essentially the same information
400as is provided for that $\Q$-class in Table 1 of \cite{BBNWZ78}
401(except for the defining relations given there), namely
402\beginlist%unordered
403\item{$\bullet$} the size of the groups in the $\Q$-class,
404\item{$\bullet$} the isomorphism type of the groups in the $\Q$-class,
405\item{$\bullet$} the Hurley pattern,
406\item{$\bullet$} the rational constituents,
407\item{$\bullet$} the number of $\Z$-classes in the $\Q$-class, and
408\item{$\bullet$} the number of space-group types in the $\Q$-class.
409\endlist
410For details see \cite{BBNWZ78}.
411
412\beginexample
413gap> DisplayQClass( "p2" );
414#I   Q-class H (2,1,2): size 2; isomorphism type 2.1 = C2;
415#I    Q-constituents 2*(2,1,2); cc; 1 Z-class; 1 space group
416gap> DisplayQClass( "R-3" );
417#I   Q-class (3,5,2): size 6; isomorphism type 6.1 = C6;
418#I    Q-constituents (3,1,2)+(3,4,3); ncc; 2 Z-classes; 2 space grps
419gap> DisplayQClass( 3, 195 );
420#I   Q-class (3,7,1): size 12; isomorphism type 12.5 = A4;
421#I    C-irreducible; 3 Z-classes; 5 space grps
422gap> DisplayQClass( 4, 27, 4 );
423#I   Q-class H (4,27,4): size 20; isomorphism type 20.3 = D10xC2;
424#I    Q-irreducible; 1 Z-class; 1 space group
425gap> DisplayQClass( 4, 29, 1 );
426#I  *Q-class (4,29,1): size 18; isomorphism type 18.3 = D6xC3;
427#I    R-irreducible; 3 Z-classes; 5 space grps
428\endexample
429
430Note in the preceding examples that, as pointed out above, the term
431``size'' denotes the order of a representative group of the specified
432$\Q$-class and, of course, not the (infinite) class length.
433
434\>FpGroupQClass( <dim>, <system>, <q-class> )
435\>FpGroupQClass( <dim>, <IT-number> )
436\>FpGroupQClass( <Hermann-Mauguin-symbol> )
437
438returns a finitely presented group <F>, say, which is isomorphic to
439the groups in the specified $\Q$-class.
440
441The presentation of that group is the same as the corresponding
442presentation given in Table 1 of \cite{BBNWZ78} except for the fact
443that its generators are listed in reverse order.  The reason for this
444change is that, whenever the group in question is solvable, the
445resulting generators form a pcgs (as defined in section "ref:Polycyclic
446Groups" in the reference manual of {\GAP}) if they are numbered
447``from the top to the bottom'', and the presentation is a
448power-commutator presentation.  The `PcGroupQClass' function described
449next will make use of this fact in order to construct a pc group
450isomorphic to <F>.
451
452Note that, for any $\Z$-class  in the  specified $\Q$-class,  the  matrix
453group  returned by the `MatGroupZClass'  function (see below) not only is
454isomorphic to <F>, but also its  generators satisfy the defining relators
455of <F>.
456
457Besides  of the usual components,  <F> will have an attribute
458`CrystCatRecord', which is a record with component
459`parameters', which keeps a list of the parameters
460that specify the given $\Q$-class.
461
462\beginexample
463gap> F := FpGroupQClass( 4, 20, 3 );
464FpGroupQClass( 4, 20, 3 )
465gap> GeneratorsOfGroup( F );
466[ f1, f2 ]
467gap> RelatorsOfFpGroup( F );
468[ f1^2*f2^-3, f2^6, f2^-1*f1^-1*f2*f1*f2^-4 ]
469gap> Size( F );
47012
471gap> CrystCatRecord( F ).parameters;
472[ 4, 20, 3 ]
473\endexample
474
475\>PcGroupQClass( <dim>, <system>, <q-class> )
476\>PcGroupQClass( <dim>, <IT-number> )
477\>PcGroupQClass( <Hermann-Mauguin-symbol> )
478
479returns a pc group $P$, say, isomorphic to the groups in the
480specified $\Q$-class, if these groups are solvable, or the value
481`fail' (together with an appropriate warning), otherwise.
482
483$P$ is constructed by first establishing a finitely presented group
484(as it would be returned by the `FpGroupQClass' function described
485above) and then constructing from it an isomorphic pc group.  If the
486underlying pcgs is not a prime orders pcgs (see section "ref:Polycyclic
487Groups"), then it will be refined appropriately (and a warning will
488be displayed).
489
490Besides of the usual components, <P> will have an attribute
491`CrystCatRecord', which is a record with component
492`parameters', which saves a list of the parameters that specify
493the given $\Q$-class.
494
495\beginexample
496gap> P := PcGroupQClass( 4, 31, 3 );
497#I  Warning: a non-solvable group can't be represented as a pc group
498fail
499gap> P := PcGroupQClass( 4, 20, 3 );
500#I  Warning: the presentation has been extended to get a prime order pcgs
501PcGroupQClass( 4, 20, 3 )
502gap> GeneratorsOfGroup( P );
503[ f1, f2, f3 ]
504gap> Size( P );
50512
506gap> CrystCatRecord( P ).parameters;
507[ 4, 20, 3 ]
508\endexample
509
510\>CharTableQClass( <dim>, <system>, <q-class> )
511\>CharTableQClass( <dim>, <IT-number> )
512\>CharTableQClass( <Hermann-Mauguin-symbol> )
513
514returns the character table $T$, say, of a representative group of (a
515$\Z$-class of) the specified $\Q$-class.
516
517Although the set of characters  can be considered as  an invariant of the
518specified $\Q$-class,  the resulting  table  will depend on  the order in
519which {\GAP} sorts the conjugacy classes of  elements and the irreducible
520characters  and    hence,  in  general,   will  not   coincide  with  the
521corresponding table presented in \cite{BBNWZ78}.
522
523`CharTableQClass' proceeds as follows.  If the groups in the given
524$\Q$-class are solvable, then it first calls the `PcGroupQClass' and
525`RefinedPcGroup' functions to get a suitable isomorphic pc group, and
526then it calls the `CharacterTable' function to compute the
527character table of that pc group.  In the case of the five
528$\Q$-classes of dimension 4 whose groups are not solvable, it first
529calls the `FpGroupQClass' function to get an isomorphic finitely
530presented group, then it constructs a specially chosen faithful
531permutation representation of low degree for that group, and finally
532it determines the character table of the resulting permutation group
533again by calling the `CharacterTable' function.
534
535In general, the above strategy will be much more efficient than the
536alternative possibilities of calling the `CharacterTable' function for a
537finitely presented group provided by the `FpGroupQClass' function or
538for a matrix group provided by the `MatGroupZClass' function.
539
540\beginexample
541gap> T := CharTableQClass( 4, 20, 3 );;
542gap> Display( T );
543CharTableQClass( 4, 20, 3 )
544
545     2  2  2  1  1  2  2
546     3  1  .  1  1  .  1
547
548       1a 4a 6a 3a 4b 2a
549    2P 1a 2a 3a 3a 2a 1a
550    3P 1a 4b 2a 1a 4a 2a
551    5P 1a 4a 6a 3a 4b 2a
552
553X.1     1  1  1  1  1  1
554X.2     1 -1  1  1 -1  1
555X.3     1  A -1  1 -A -1
556X.4     1 -A -1  1  A -1
557X.5     2  .  1 -1  . -2
558X.6     2  . -1 -1  .  2
559
560A = -E(4)
561  = -Sqrt(-1) = -i
562\endexample
563
564%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
565\Section{Z-Classes}
566
567\>NrZClassesQClass( <dim>, <system>, <q-class> )
568\>NrZClassesQClass( <dim>, <IT-number> )
569\>NrZClassesQClass( <Hermann-Mauguin-symbol> )
570
571returns the number of $\Z$-classes within the given $\Q$-class. It can
572be used to formulate loops over the $\Z$-classes.
573
574The following functions are functions of $\Z$-classes.
575
576In general, the parameters characterizing a $\Z$-class will form a
577quadruple (<dim>, <system>, <q-class>, <z-class>) where <dim> is the
578associated dimension, <system> is the number of the associated crystal
579system, <q-class> is the number of the associated $\Q$-class within
580the crystal system, and <z-class> is the number of the $\Z$-class
581within the $\Q$-class.  However, in case of dimensions 2 or 3, a
582$\Z$-class may also be characterized by a pair (<dim>, <IT-number>)
583where <IT-number> is the number in the International Tables
584\cite{Hah95} of any space-group type lying in that $\Z$-class, or just
585by the Hermann-Mauguin symbol of any space-group type lying in that
586$\Z$-class.
587
588\>DisplayZClass( <dim>, <system>, <q-class>, <z-class> )
589\>DisplayZClass( <dim>, <IT-number> )
590\>DisplayZClass( <Hermann-Mauguin-symbol> )
591
592displays for the specified $\Z$-class essentially the same information
593as is provided for that $\Z$-class in Table 1 of \cite{BBNWZ78}
594(except for the generating matrices of a class representative group
595given there), namely
596\beginlist%unordered
597\item{$\bullet$} for  dimensions 2 and 3, the  Hermann-Mauguin symbol of a
598    representative space-group type  which belongs  to that $\Z$-class,
599\item{$\bullet$} the Bravais type,
600\item{$\bullet$} some decomposability information,
601\item{$\bullet$} the number of space-group types belonging to the $\Z$-class,
602\item{$\bullet$} the size of the associated cohomology group.
603\endlist
604For details see \cite{BBNWZ78}.
605
606\beginexample
607gap> DisplayZClass( 2, 3 );
608#I    Z-class (2,2,1,1) = Z(pm): Bravais type II/I; fully Z-reducible;
609#I     2 space groups; cohomology group size 2
610gap> DisplayZClass( "F-43m" );
611#I    Z-class (3,7,4,2) = Z(F-43m): Bravais type VI/II; Z-irreducible;
612#I     2 space groups; cohomology group size 2
613gap> DisplayZClass( 4, 2, 3, 2 );
614#I    Z-class B (4,2,3,2): Bravais type II/II; Z-decomposable;
615#I     2 space groups; cohomology group size 4
616gap> DisplayZClass( 4, 21, 3, 1 );
617#I   *Z-class (4,21,3,1): Bravais type XVI/I; Z-reducible;
618#I     1 space group; cohomology group size 1
619\endexample
620
621\>MatGroupZClass( <dim>, <system>, <q-class>, <z-class> )
622\>MatGroupZClass( <dim>, <IT-number> )
623\>MatGroupZClass( <Hermann-Mauguin-symbol> )
624
625returns a $dim \x dim$ matrix group <M>, say, which is a
626representative of the specified $\Z$-class.  Its generators satisfy
627the defining relators of the finitely presented group which may be
628computed by calling the `FpGroupQClass' function (see above) for the
629$\Q$-class which contains the given $\Z$-class.
630
631The generators of <M> are the same matrices as those given  in Table 1 of
632\cite{BBNWZ78}. Note, however, that they will  be listed in reverse order
633to  keep them  in parallel  to  the abstract  generators provided by  the
634`FpGroupQClass' function (see above).
635
636Besides of the usual components, <M> will have an attribute
637`CrystCatRecord', which is a record with two components.  The
638first component is `parameters', which saves a list of the parameters
639that specify the given $\Z$-class. The second component is
640`conjugator', whose value is the identity element of <M>. Its purpose
641is to make the resulting record consistent with those returned by
642the `NormalizerZClass' or `ZClassRepsDadeGroup' functions described
643below.
644
645\beginexample
646gap> M := MatGroupZClass( 4, 20, 3, 1 );
647MatGroupZClass( 4, 20, 3, 1 )
648gap> for g in GeneratorsOfGroup( M ) do
649>  Print( "\n" ); PrintArray( g ); od; Print( "\n" );
650
651[ [   0,   1,   0,   0 ],
652  [  -1,   0,   0,   0 ],
653  [   0,   0,  -1,  -1 ],
654  [   0,   0,   0,   1 ] ]
655
656[ [  -1,   0,   0,   0 ],
657  [   0,  -1,   0,   0 ],
658  [   0,   0,  -1,  -1 ],
659  [   0,   0,   1,   0 ] ]
660
661gap> Size( M );
66212
663gap> CrystCatRecord( M ).parameters;
664[ 4, 20, 3, 1 ]
665\endexample
666
667\>NormalizerZClass( <dim>, <system>, <q-class>, <z-class> )
668\>NormalizerZClass( <dim>, <IT-number> )
669\>NormalizerZClass( <Hermann-Mauguin-symbol> )
670
671returns the normalizer <N>, say, in $GL(dim,\Z)$ of the representative
672$dim \x dim$ matrix group which is constructed by the
673`MatGroupZClass' function (see above).
674
675If the size of <N> is finite, then <N> again lies in some $\Z$-class.
676In this case, <N> will have an attribute `CrystCatRecord',
677which is a record with two components, `parameters' and `conjugator'.
678These contain, respectively, the list of parameters of that
679$\Z$-class, and a matrix $g \in GL(dim,\Z)$, such that $N = g^{-1} R g$,
680where $R$ is the representative group of that $\Z$-class.
681
682\beginexample
683gap> N := NormalizerZClass( 4, 20, 3, 1 );
684NormalizerZClass( 4, 20, 3, 1 )
685gap> for g in GeneratorsOfGroup( N ) do
686>  Print( "\n" ); PrintArray( g ); od; Print( "\n" );
687
688[ [   1,   0,   0,   0 ],
689  [   0,   1,   0,   0 ],
690  [   0,   0,   1,   0 ],
691  [   0,   0,  -1,  -1 ] ]
692
693[ [   1,   0,   0,   0 ],
694  [   0,  -1,   0,   0 ],
695  [   0,   0,  -1,  -1 ],
696  [   0,   0,   1,   0 ] ]
697
698[ [   0,   1,   0,   0 ],
699  [  -1,   0,   0,   0 ],
700  [   0,   0,   1,   0 ],
701  [   0,   0,   0,   1 ] ]
702
703[ [  -1,   0,   0,   0 ],
704  [   0,  -1,   0,   0 ],
705  [   0,   0,  -1,   0 ],
706  [   0,   0,   0,  -1 ] ]
707
708gap> Size( N );
70996
710gap> CrystCatRecord( N ).parameters;
711[ 4, 20, 22, 1 ]
712gap> CrystCatRecord( N ).conjugator = One( N );
713true
714gap> L := NormalizerZClass( 3, 42 );
715NormalizerZClass( 3, 3, 2, 4 )
716gap> Size( L );
71716
718gap> CrystCatRecord( L ).parameters;
719[ 3, 4, 7, 2 ]
720gap> CrystCatRecord( L ).conjugator;
721[ [ 0, 0, -1 ], [ 1, 0, 0 ], [ 0, -1, -1 ] ]
722gap> M := NormalizerZClass( "C2/m" );
723<matrix group of size infinity with 5 generators>
724gap> Size( M );
725infinity
726gap> HasCrystCatRecord( M );
727false
728\endexample
729
730%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
731\Section{Dade groups}
732
733Some of the $\Z$-classes  of   dimension <d>, say, are ``maximal''  in
734the sense  that the groups in these  classes are maximal finite subgroups
735of $GL(d,\Z)$.  Generalizing a term which is  being used for dimension 4,
736we call the representatives   of these  maximal $\Z$-classes  the *Dade
737groups* of dimension $d$.
738
739\>NrDadeGroups( <dim> )
740
741returns the number of Dade groups of dimension <dim>. It can be used
742to formulate loops over the Dade groups.
743
744There are 2, 4, and 9 Dade groups of dimension 2, 3, and 4, respectively.
745
746\beginexample
747gap> NrDadeGroups( 4 );
7489
749\endexample
750
751\>DadeGroup( <dim>, <n> )
752
753returns the <n>th Dade group of dimension <dim>.
754
755\beginexample
756gap> D := DadeGroup( 4, 7 );
757MatGroupZClass( 4, 31, 7, 2 )
758\endexample
759
760\>DadeGroupNumbersZClass( <dim>, <system>, <q-class>, <z-class> )
761\>DadeGroupNumbersZClass( <dim>, <IT-number> )
762\>DadeGroupNumbersZClass( <Hermann-Mauguin-symbol> )
763
764returns the set of all those integers $n_i$ for which the $n_i$th Dade
765group of dimension <dim> contains a subgroup which, in $GL(dim,\Z)$,
766is conjugate to the representative group of the given $\Z$-class.
767
768\beginexample
769gap> dadeNums := DadeGroupNumbersZClass( 4, 4, 1, 2 );
770[ 1, 5, 8 ]
771gap> for d in dadeNums do
772>     D := DadeGroup( 4, d );
773>     Print( D, " of size ", Size( D ), "\n" );
774> od;
775MatGroupZClass( 4, 20, 22, 1 ) of size 96
776MatGroupZClass( 4, 30, 13, 1 ) of size 288
777MatGroupZClass( 4, 32, 21, 1 ) of size 384
778\endexample
779
780\>ZClassRepsDadeGroup( <dim>, <system>, <q-class>, <z-class>, <n> )
781\>ZClassRepsDadeGroup( <dim>, <IT-number>, <n> )
782\>ZClassRepsDadeGroup( <Hermann-Mauguin-symbol>, <n> )
783
784determines in the <n>th Dade group of dimension <dim> all those
785conjugacy classes whose groups are, in $GL(dim,\Z)$, conjugate to the
786$\Z$-class representative group <R>, say, of the given $\Z$-class.  It
787returns a list of representative groups of these conjugacy classes.
788
789Let <M> be any group in the resulting list.  <M> then has an attribute
790`CrystCatRecord', which is a record with two components. The
791component `parameters' is the list of parameters of the $\Z$-class of
792<R>, and `conjugator' is a suitable matrix <g> from $GL(dim,\Z)$,
793respectively, such that <M> equals $g^{-1} R g$.
794
795\beginexample
796gap> DadeGroupNumbersZClass( 2, 2, 1, 2 );
797[ 1, 2 ]
798gap> ZClassRepsDadeGroup( 2, 2, 1, 2, 1 );
799[ MatGroupZClass( 2, 2, 1, 2 )^[ [ 0, 1 ], [ -1, 0 ] ] ]
800gap> ZClassRepsDadeGroup( 2, 2, 1, 2, 2 );
801[ MatGroupZClass( 2, 2, 1, 2 )^[ [ 1, -1 ], [ 0, -1 ] ],
802  MatGroupZClass( 2, 2, 1, 2 )^[ [ 1, 0 ], [ -1, 1 ] ] ]
803gap> R := last[2];;
804gap> CrystCatRecord( R ).parameters;
805[ 2, 2, 1, 2 ]
806gap> CrystCatRecord( R ).conjugator;
807[ [ 1, 0 ], [ -1, 1 ] ]
808\endexample
809
810%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
811\Section{Space groups and space group types}
812
813\>NrSpaceGroupTypesZClass( <dim>, <system>, <q-class>, <z-class> )
814\>NrSpaceGroupTypesZClass( <dim>, <IT-number> )
815\>NrSpaceGroupTypesZClass( <Hermann-Mauguin-symbol> )
816
817returns the number of space-group types within the given $\Z$-class.
818It can be used to formulate loops over the space-group types.
819
820\beginexample
821gap> N := NrSpaceGroupTypesZClass( 4, 4, 1, 1 );
82213
823\endexample
824
825The following functions are functions of space-group types.
826
827In general, the parameters characterizing a space-group type will form
828a quintuple (<dim>, <system>, <q-class>, <z-class>, <sg-type>) where
829<dim> is the associated dimension, <system> is the number of the
830associated crystal system, <q-class> is the number of the associated
831$\Q$-class within the crystal system, <z-class> is the number of the
832$\Z$-class within the $\Q$-class, and <sg-type> is the space-group
833type within the $\Z$-class.  However, in case of dimensions 2 or 3,
834you may instead specify a $\Z$-class by a pair (<dim>, <IT-number>)
835or by its Hermann-Mauguin symbol (as described above).  Then the
836function will handle the first space-group type within that
837$\Z$-class, i.e., <sg-type> = 1, that is, the corresponding
838symmorphic space group (split extension).
839
840\>DisplaySpaceGroupType( <dim>, <system>, <q-class>, <z-class>, <sg-type> )
841\>DisplaySpaceGroupType( <dim>, <IT-number> )
842\>DisplaySpaceGroupType( <Hermann-Mauguin-symbol> )
843
844displays for the specified space-group type some of the information
845which is provided for that space-group type in Table 1 of
846\cite{BBNWZ78}, namely
847\beginlist%unordered
848\item{$\bullet$} the orbit size associated with that space-group type and,
849\item{$\bullet$} for dimensions  2 and 3,  the <IT-number>  and  the
850    Hermann-Mauguin symbol.
851\endlist
852For details see \cite{BBNWZ78}.
853
854\beginexample
855gap> DisplaySpaceGroupType( 2, 17 );
856#I     Space-group type (2,4,4,1,1); IT(17) = p6mm; orbit size 1
857gap> DisplaySpaceGroupType( "Pm-3" );
858#I     Space-group type (3,7,2,1,1); IT(200) = Pm-3; orbit size 1
859gap> DisplaySpaceGroupType( 4, 32, 10, 2, 4 );
860#I    *Space-group type (4,32,10,2,4); orbit size 18
861gap> DisplaySpaceGroupType( 3, 6, 1, 1, 4 );
862#I    *Space-group type (3,6,1,1,4); IT(169) = P61, IT(170) = P65;
863#I      orbit size 2; fp-free
864\endexample
865
866\>DisplaySpaceGroupGenerators( <dim>, <system>, <q-class>, <z-class>, <sg-type>)
867\>DisplaySpaceGroupGenerators( <dim>, <IT-number> )
868\>DisplaySpaceGroupGenerators( <Hermann-Mauguin-symbol> )
869
870displays the non-translation generators of a representative space
871group of the specified space-group type without actually constructing
872that matrix group. The generators are given in the representation
873acting from the left on column vectors.
874
875In more details: Let <n> = <dim> be the given dimension, and let $M_1,
876\ldots, M_r$ be the generators of the representative $n \x n$
877matrix group of the given $\Z$-class (this is the group which you will
878get if you call the `MatGroupZClass' function (see above) for that
879$\Z$-class).  Then, for the given space-group type, the
880`SpaceGroupOnLeftBBNWZ' function described below will construct as
881representative of that space-group type an $(n+1) \x (n+1)$ matrix
882group which is generated by the <n> translations which are induced
883by the (standard) basis vectors of the <n>-dimensional Euclidian space,
884and <r> additional matrices $S_1, \ldots, S_r$ of the form $S_i =
885\left[\matrix{ M_i & t_i \cr 0 & 1 } \right]$, where the $n \x n$
886submatrices $M_i$ are as defined above, and the $t_i$ are <n>-columns
887with rational entries.  The `DisplaySpaceGroupGenerators' function
888saves time by not constructing the group, but just displaying the $r$
889matrices $S_1,\ldots, S_r$.
890
891\beginexample
892gap> DisplaySpaceGroupGenerators( "P61" );
893#I  Non-translation generators of SpaceGroupOnLeftBBNWZ( 3, 6, 1, 1, 4 )
894
895[ [   -1,    0,    0,    0 ],
896  [    0,   -1,    0,    0 ],
897  [    0,    0,    1,  1/2 ],
898  [    0,    0,    0,    1 ] ]
899
900[ [    0,   -1,    0,    0 ],
901  [    1,   -1,    0,    0 ],
902  [    0,    0,    1,  1/3 ],
903  [    0,    0,    0,    1 ] ]
904
905\endexample
906
907\>SpaceGroupOnLeftBBNWZ( <dim>, <system>, <q-class>, <z-class>, <sg-type> )
908\>SpaceGroupOnLeftBBNWZ( <dim>, <IT-number> )
909\>SpaceGroupOnLeftBBNWZ( <Hermann-Mauguin-symbol> )
910
911returns a representative, <S>, of the space group type specified by
912the arguments. <S> is returned in the form of an `AffineCrystGroupOnLeft',
913which acts from the left on column vectors (see also the description
914of the `DisplaySpaceGroupGenerators' function above). The package
915{\Cryst} provides methods for the computation with space groups.
916
917\beginexample
918gap> S := SpaceGroupOnLeftBBNWZ( "P61" );
919SpaceGroupOnLeftBBNWZ( 3, 6, 1, 1, 4 )
920gap> for s in GeneratorsOfGroup( S ) do
921>  Print( "\n" ); PrintArray( s ); od; Print( "\n" );
922
923[ [   -1,    0,    0,    0 ],
924  [    0,   -1,    0,    0 ],
925  [    0,    0,    1,  1/2 ],
926  [    0,    0,    0,    1 ] ]
927
928[ [    0,   -1,    0,    0 ],
929  [    1,   -1,    0,    0 ],
930  [    0,    0,    1,  1/3 ],
931  [    0,    0,    0,    1 ] ]
932
933[ [  1,  0,  0,  1 ],
934  [  0,  1,  0,  0 ],
935  [  0,  0,  1,  0 ],
936  [  0,  0,  0,  1 ] ]
937
938[ [  1,  0,  0,  0 ],
939  [  0,  1,  0,  1 ],
940  [  0,  0,  1,  0 ],
941  [  0,  0,  0,  1 ] ]
942
943[ [  1,  0,  0,  0 ],
944  [  0,  1,  0,  0 ],
945  [  0,  0,  1,  1 ],
946  [  0,  0,  0,  1 ] ]
947
948gap> CrystCatRecord( S ).parameters;
949[ 3, 6, 1, 1, 4 ]
950\endexample
951
952The resulting group has an attribute `CrystCatRecord', whose component
953`parameters' specifies the given space-group type.
954
955\>SpaceGroupOnRightBBNWZ( <dim>, <system>, <q-class>, <z-class>, <sg-type> )
956\>SpaceGroupOnRightBBNWZ( <dim>, <IT-number> )
957\>SpaceGroupOnRightBBNWZ( <Hermann-Mauguin-symbol> )
958\>SpaceGroupOnRightBBNWZ( <S> )
959
960returns a representative, <T>, of the space group type specified by
961the arguments. <T> is returned in the form of an `AffineCrystGroupOnRight',
962which acts from the right on row vectors. The generators of <T> are the
963transposed generators (in the same order) of the corresponding
964`SpaceGroupOnLeftBBNWZ', <S>, specified by the same arguments.
965The space group <S> is also accepted as argument. The package
966{\Cryst} provides methods for the computation with space groups.
967
968\beginexample
969gap> T := SpaceGroupOnRightBBNWZ( S );
970SpaceGroupOnRightBBNWZ( 3, 6, 1, 1, 4 )
971gap> for m in GeneratorsOfGroup( T ) do
972>  Print( "\n" ); PrintArray( m ); od; Print( "\n" );
973
974[ [   -1,    0,    0,    0 ],
975  [    0,   -1,    0,    0 ],
976  [    0,    0,    1,    0 ],
977  [    0,    0,  1/2,    1 ] ]
978
979[ [    0,    1,    0,    0 ],
980  [   -1,   -1,    0,    0 ],
981  [    0,    0,    1,    0 ],
982  [    0,    0,  1/3,    1 ] ]
983
984[ [  1,  0,  0,  0 ],
985  [  0,  1,  0,  0 ],
986  [  0,  0,  1,  0 ],
987  [  1,  0,  0,  1 ] ]
988
989[ [  1,  0,  0,  0 ],
990  [  0,  1,  0,  0 ],
991  [  0,  0,  1,  0 ],
992  [  0,  1,  0,  1 ] ]
993
994[ [  1,  0,  0,  0 ],
995  [  0,  1,  0,  0 ],
996  [  0,  0,  1,  0 ],
997  [  0,  0,  1,  1 ] ]
998
999\endexample
1000
1001\>SpaceGroupBBNWZ( <dim>, <system>, <q-class>, <z-class>, <sg-type> )
1002\>SpaceGroupBBNWZ( <dim>, <IT-number> )
1003\>SpaceGroupBBNWZ( <Hermann-Mauguin-symbol> )
1004
1005calls either `SpaceGroupOnLeftBBNWZ' or `SpaceGroupOnRightBBNWZ'
1006with the same arguments, depending on the value of the variable
1007`CrystGroupDefaultAction'.
1008
1009\>FpGroupSpaceGroupBBNWZ( <S> )
1010
1011returns a finitely presented group <G>, say, which is isomorphic to
1012<S>, where <S> is expected to be a space group from the BBNWZ
1013catalog (acting from the left or from the right).  It is chosen such
1014that there is an isomorphism from <G> to <S> which maps each generator
1015of <G> onto the corresponding generator of <S>.  This means, in
1016particular, that the matrix generators of <S> satisfy the relators of
1017<G>. If the factor group of <S> by its translation normal subgroup is
1018solvable, then the presentation returned is a polycyclic power
1019commutator presentation.
1020
1021\beginexample
1022gap> G := FpGroupSpaceGroupBBNWZ( S );
1023FpGroupSpaceGroupOnLeftBBNWZ( 3, 6, 1, 1, 4 )
1024gap> for rel in RelatorsOfFpGroup( G ) do Print( rel, "\n" ); od;
1025g1^2*g5^-1
1026g2^3*g5^-1
1027g2^-1*g1^-1*g2*g1
1028g3^-1*g1^-1*g3*g1*g3^2
1029g3^-1*g2^-1*g3*g2*g4*g3^2
1030g4^-1*g1^-1*g4*g1*g4^2
1031g4^-1*g2^-1*g4*g2*g4*g3^-1
1032g4^-1*g3^-1*g4*g3
1033g5^-1*g1^-1*g5*g1
1034g5^-1*g2^-1*g5*g2
1035g5^-1*g3^-1*g5*g3
1036g5^-1*g4^-1*g5*g4
1037gap> # Verify that the matrix generators of S satisfy the relators of G.
1038gap> ForAll( RelatorsOfFpGroup( G ), rel -> One(S) =
1039>  MappedWord( rel, FreeGeneratorsOfFpGroup(G), GeneratorsOfGroup(S) ) );
1040true
1041\endexample
1042
1043
1044
1045
1046
1047