Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download

GAP 4.8.9 installation with standard packages -- copy to your CoCalc project to get it

610956 views
1
<!-- #################################################################### -->
2
<!-- ## ## -->
3
<!-- ## rcwagrp.xml RCWA documentation Stefan Kohl ## -->
4
<!-- ## ## -->
5
<!-- #################################################################### -->
6
7
<Chapter Label="ch:RcwaGroups">
8
<Heading>Residue-Class-Wise Affine Groups</Heading>
9
10
<Ignore Remark="settings for the example tester">
11
<Example>
12
<![CDATA[
13
gap> SizeScreen([75,24]);;
14
gap> SetAssertionLevel(0);
15
]]>
16
</Example>
17
</Ignore>
18
19
In this chapter, we describe how to construct residue-class-wise affine
20
groups and how to compute with them.
21
22
<!-- #################################################################### -->
23
24
<Section Label="sec:ContructingRcwaGroups">
25
<Heading>Constructing residue-class-wise affine groups</Heading>
26
27
<Index Key="Group"><C>Group</C></Index>
28
<Index Key="GroupByGenerators"><C>GroupByGenerators</C></Index>
29
<Index Key="GroupWithGenerators"><C>GroupWithGenerators</C></Index>
30
31
As any other groups in &GAP;, residue-class-wise affine (rcwa-) groups
32
can be constructed by <C>Group</C>, <C>GroupByGenerators</C> or
33
<C>GroupWithGenerators</C>.
34
35
<Example>
36
<![CDATA[
37
gap> G := Group(ClassTransposition(0,2,1,4),ClassShift(0,5));
38
<rcwa group over Z with 2 generators>
39
gap> IsTame(G); Size(G); IsSolvable(G); IsPerfect(G);
40
true
41
infinity
42
false
43
false
44
]]>
45
</Example>
46
47
An rcwa group isomorphic to a given group can be obtained by taking
48
the image of a faithful rcwa representation:
49
50
<ManSection>
51
<Attr Name="IsomorphismRcwaGroup"
52
Arg="G, R" Label="for a group, over a given ring"/>
53
<Attr Name="IsomorphismRcwaGroup"
54
Arg="G" Label="for a group"/>
55
<Returns>
56
a monomorphism from the group <A>G</A> to&nbsp;RCWA(<A>R</A>)
57
or to&nbsp;RCWA(&ZZ;), respectively.
58
</Returns>
59
<Description>
60
The best-supported case is <A>R</A> = &ZZ;.
61
Currently there are methods available for finite groups, for
62
free products of finite groups and for free groups. The method for
63
free products of finite groups uses the Table-Tennis Lemma
64
(cf. e.g. Section&nbsp;II.B. in&nbsp;<Cite Key="LaHarpe00"/>), and the
65
method for free groups uses an adaptation of the construction given
66
on page&nbsp;27 in&nbsp;<Cite Key="LaHarpe00"/> from PSL(2,&CC;)
67
to RCWA(&ZZ;). <P/>
68
<Example>
69
<![CDATA[
70
gap> F := FreeProduct(Group((1,2)(3,4),(1,3)(2,4)),Group((1,2,3)),
71
> SymmetricGroup(3));
72
<fp group on the generators [ f1, f2, f3, f4, f5 ]>
73
gap> IsomorphismRcwaGroup(F);
74
[ f1, f2, f3, f4, f5 ] -> [ <rcwa permutation of Z with modulus 12>,
75
<rcwa permutation of Z with modulus 24>,
76
<rcwa permutation of Z with modulus 12>,
77
<rcwa permutation of Z with modulus 72>,
78
<rcwa permutation of Z with modulus 36> ]
79
gap> IsomorphismRcwaGroup(FreeGroup(2));
80
[ f1, f2 ] -> [ <wild rcwa permutation of Z with modulus 8>,
81
<wild rcwa permutation of Z with modulus 8> ]
82
gap> F2 := Image(last);
83
<wild rcwa group over Z with 2 generators>
84
]]>
85
</Example>
86
</Description>
87
</ManSection>
88
89
Further, new rcwa groups can be constructed from given ones by
90
taking direct products and by taking wreath products with finite
91
groups or with the infinite cyclic group:
92
93
<ManSection>
94
<Meth Name="DirectProduct"
95
Arg="G1, G2, ..." Label="for rcwa groups over Z"/>
96
<Returns>
97
an rcwa group isomorphic to the direct product of the rcwa groups
98
over&nbsp;&ZZ; given as arguments.
99
</Returns>
100
<Description>
101
There is certainly no unique or canonical way to embed a direct
102
product of rcwa groups into RCWA(&ZZ;).
103
This method chooses to embed the groups <A>G1</A>, <A>G2</A>,
104
<A>G3</A>&nbsp;... via restrictions by <M>n \mapsto mn</M>,
105
<M>n \mapsto mn+1</M>, <M>n \mapsto mn+2</M>&nbsp;...
106
(<M>\rightarrow</M>&nbsp;<Ref Oper="Restriction"
107
Label="of an rcwa group, by an injective rcwa mapping"/>),
108
where <M>m</M> denotes the number of groups given as arguments.
109
<Example>
110
<![CDATA[
111
gap> F2 := Image(IsomorphismRcwaGroup(FreeGroup(2)));;
112
gap> F2xF2 := DirectProduct(F2,F2);
113
<wild rcwa group over Z with 4 generators>
114
gap> Image(Projection(F2xF2,1)) = F2;
115
true
116
]]>
117
</Example>
118
</Description>
119
</ManSection>
120
121
<ManSection>
122
<Heading>
123
WreathProduct
124
(for an rcwa group over Z, with a permutation group or (&ZZ;,+))
125
</Heading>
126
<Meth Name="WreathProduct" Arg="G, P"
127
Label="for an rcwa group over Z and a permutation group"/>
128
<Meth Name="WreathProduct" Arg="G, Z"
129
Label="for an rcwa group over Z and the infinite cyclic group"/>
130
<Returns>
131
an rcwa group isomorphic to the wreath product of the rcwa
132
group&nbsp;<A>G</A> over&nbsp;&ZZ; with the finite permutation
133
group&nbsp;<A>P</A> or with the infinite cyclic group&nbsp;<A>Z</A>,
134
respectively.
135
</Returns>
136
<Description>
137
The first-mentioned method embeds the <C>NrMovedPoints(<A>P</A>)</C>th
138
direct power of&nbsp;<A>G</A> using the method for <C>DirectProduct</C>,
139
and lets the permutation group&nbsp;<A>P</A> act naturally on the set of
140
residue classes modulo <C>NrMovedPoints(<A>P</A>)</C>.
141
The second-mentioned method restricts
142
(<M>\rightarrow</M>&nbsp;<Ref Oper="Restriction"
143
Label="of an rcwa group, by an injective rcwa mapping"/>)
144
the group&nbsp;<A>G</A> to the residue class&nbsp;3(4), and maps the
145
generator of the infinite cyclic group&nbsp;<A>Z</A>
146
to <C>ClassTransposition(0,2,1,2) * ClassTransposition(0,2,1,4)</C>.
147
<Example>
148
<![CDATA[
149
gap> F2 := Image(IsomorphismRcwaGroup(FreeGroup(2)));;
150
gap> F2wrA5 := WreathProduct(F2,AlternatingGroup(5));;
151
gap> Embedding(F2wrA5,1);
152
[ <wild rcwa permutation of Z with modulus 8>,
153
<wild rcwa permutation of Z with modulus 8> ] ->
154
[ <wild rcwa permutation of Z with modulus 40>,
155
<wild rcwa permutation of Z with modulus 40> ]
156
gap> Embedding(F2wrA5,2);
157
[ (1,2,3,4,5), (3,4,5) ] -> [ ( 0(5), 1(5), 2(5), 3(5), 4(5) ),
158
( 2(5), 3(5), 4(5) ) ]
159
gap> ZwrZ := WreathProduct(Group(ClassShift(0,1)),Group(ClassShift(0,1)));
160
<wild rcwa group over Z with 2 generators>
161
gap> Embedding(ZwrZ,1);
162
[ ClassShift( Z ) ] ->
163
[ <tame rcwa permutation of Z with modulus 4, of order infinity> ]
164
gap> Embedding(ZwrZ,2);
165
[ ClassShift( Z ) ] -> [ <wild rcwa permutation of Z with modulus 4> ]
166
]]>
167
</Example>
168
</Description>
169
</ManSection>
170
171
Also, rcwa groups can be obtained as particular extensions of finite
172
permutation groups:
173
174
<ManSection>
175
<Oper Name="MergerExtension"
176
Arg="G, points, point" Label="for finite permutation groups"/>
177
<Returns>
178
roughly spoken, an extension of <A>G</A> by an involution
179
which <Q>merges</Q> <A>points</A> into <A>point</A>.
180
</Returns>
181
<Description>
182
The arguments of this operation are a finite permutation
183
group <A>G</A>, a set <A>points</A> of points moved by <A>G</A>
184
and a single point <A>point</A> moved by <A>G</A> which is not in
185
<A>points</A>. <P/>
186
187
Let <M>n</M> be the largest moved point of <A>G</A>, and let
188
<M>H</M> be the tame subgroup of CT(&ZZ;) which respects the
189
partition <M>\mathcal{P}</M> of &ZZ; into the residue classes
190
(mod&nbsp;<M>n</M>), and which acts on <M>\mathcal{P}</M>
191
as <A>G</A> acts on <M>\{1, \dots, n\}</M>.
192
Further assume that <A>points</A> = <M>\{p_1, \dots, p_k\}</M> and
193
<A>point</A> = <M>p</M>, and put <M>r_i := p_i-1, \ i = 1, \dots, k</M>
194
and <M>r := p-1</M>. Now let <M>\sigma</M> be the product of the
195
class transpositions <M>\tau_{r_i(n),r+(i-1)n(kn)}, \ i = 1, \dots, k</M>.
196
The group returned by this operation is the extension of <M>H</M>
197
by the involution <M>\sigma</M>. --
198
On first reading, this may look a little complicated, but really the
199
code of the method is only about half as long as this description.
200
<Example>
201
<![CDATA[
202
gap> # First example -- a group isomorphic to PSL(2,Z):
203
gap> G := MergerExtension(Group((1,2,3)),[1,2],3);
204
<rcwa group over Z with 2 generators>
205
gap> Size(G);
206
infinity
207
gap> GeneratorsOfGroup(G);
208
[ ( 0(3), 1(3), 2(3) ), ( 0(3), 2(6) ) ( 1(3), 5(6) ) ]
209
gap> B := Ball(G,One(G),6:Spheres);;
210
gap> List(B,Length);
211
[ 1, 3, 4, 6, 8, 12, 16 ]
212
gap> #
213
gap> # Second example -- a group isomorphic to Thompson's group V:
214
gap> G := MergerExtension(Group((1,2,3,4),(1,2)),[1,2],3);
215
<rcwa group over Z with 3 generators>
216
gap> Size(G);
217
infinity
218
gap> GeneratorsOfGroup(G);
219
[ ( 0(4), 1(4), 2(4), 3(4) ), ( 0(4), 1(4) ),
220
( 0(4), 2(8) ) ( 1(4), 6(8) ) ]
221
gap> B := Ball(G,One(G),6:Spheres);;
222
gap> List(B,Length);
223
[ 1, 4, 11, 28, 69, 170, 413 ]
224
gap> G = Group(List([[0,2,1,2],[1,2,2,4],[0,2,1,4],[1,4,2,4]],
225
> ClassTransposition));
226
true
227
]]>
228
</Example>
229
</Description>
230
</ManSection>
231
232
It is also possible to build an rcwa group from a list of residue classes:
233
234
<ManSection>
235
<Func Name="GroupByResidueClasses" Arg="classes"
236
Label="the group `permuting a given list of residue classes'"/>
237
<Returns>
238
the group which is generated by all class transpositions which
239
interchange disjoint residue classes in <A>classes</A>.
240
</Returns>
241
<Description>
242
The argument <A>classes</A> must be a list of residue classes. <P/>
243
244
If the residue classes in <A>classes</A> are pairwise
245
disjoint, then the returned group is the symmetric group on
246
<A>classes</A>. If any two residue classes in <A>classes</A>
247
intersect non-trivially, then the returned group is trivial.
248
In many other cases, the returned group is infinite.
249
<Example>
250
<![CDATA[
251
gap> G := GroupByResidueClasses(List([[0,2],[0,4],[1,4],[2,4],[3,4]],
252
> ResidueClass));
253
<rcwa group over Z with 8 generators>
254
gap> H := Group(List([[0,2,1,2],[1,2,2,4],[0,2,1,4],[1,4,2,4]],
255
> ClassTransposition)); # Thompson's group V
256
<(0(2),1(2)),(1(2),2(4)),(0(2),1(4)),(1(4),2(4))>
257
gap> G = H;
258
true
259
]]>
260
</Example>
261
</Description>
262
</ManSection>
263
264
Various ways to construct rcwa groups are based on certain
265
monomorphisms from the group RCWA(<M>R</M>) into itself.
266
Examples are the constructions of direct products and wreath products
267
described above. The support of the image of such a monomorphism is
268
the image of a given injective rcwa mapping. For this reason,
269
these monomorphisms are called <E>restriction monomorphisms</E>.
270
The following operation computes images of rcwa mappings and -groups
271
under these embeddings of RCWA(<M>R</M>) into itself:
272
273
<ManSection>
274
<Heading>
275
Restriction (of an rcwa mapping or -group, by an injective rcwa mapping)
276
</Heading>
277
<Oper Name="Restriction"
278
Arg="g, f" Label="of an rcwa mapping, by an injective rcwa mapping"/>
279
<Oper Name="Restriction"
280
Arg="G, f" Label="of an rcwa group, by an injective rcwa mapping"/>
281
<Returns>
282
the restriction of the rcwa mapping <A>g</A> (respectively the
283
rcwa group <A>G</A>) by the injective rcwa mapping&nbsp;<A>f</A>.
284
</Returns>
285
<Description>
286
By definition, the <E>restriction</E> <M>g_f</M> of an rcwa mapping
287
<A>g</A> by an injective rcwa mapping&nbsp;<A>f</A> is the unique rcwa
288
mapping which satisfies the equation <M>f \cdot g_f = g \cdot f</M>
289
and which fixes the complement of the image of <A>f</A> pointwise.
290
If <A>f</A> is bijective, the restriction of <A>g</A> by <A>f</A>
291
is just the conjugate of <A>g</A> under&nbsp;<A>f</A>. <P/>
292
293
The <E>restriction</E> of an rcwa group&nbsp;<A>G</A> by an injective
294
rcwa mapping&nbsp;<A>f</A> is defined as the group whose elements are
295
the restrictions of the elements of&nbsp;<A>G</A> by&nbsp;<A>f</A>.
296
The restriction of&nbsp;<A>G</A> by&nbsp;<A>f</A> acts on the
297
image of&nbsp;<A>f</A> and fixes its complement pointwise.
298
<Example>
299
<![CDATA[
300
gap> F2tilde := Restriction(F2,RcwaMapping([[5,3,1]]));
301
<wild rcwa group over Z with 2 generators>
302
gap> Support(F2tilde);
303
3(5)
304
]]>
305
</Example>
306
</Description>
307
</ManSection>
308
309
<ManSection>
310
<Heading>
311
Induction (of an rcwa mapping or -group, by an injective rcwa mapping)
312
</Heading>
313
<Oper Name ="Induction"
314
Arg="g, f" Label="of an rcwa mapping, by an injective rcwa mapping"/>
315
<Oper Name ="Induction"
316
Arg="G, f" Label="of an rcwa group, by an injective rcwa mapping"/>
317
<Returns>
318
the induction of the rcwa mapping <A>g</A> (respectively the rcwa
319
group <A>G</A>) by the injective rcwa mapping&nbsp;<A>f</A>.
320
</Returns>
321
<Description>
322
<E>Induction</E> is the right inverse of restriction, i.e. it is
323
<C>Induction(Restriction(<A>g</A>,<A>f</A>),<A>f</A>) = <A>g</A></C> and
324
<C>Induction(Restriction(<A>G</A>,<A>f</A>),<A>f</A>) = <A>G</A></C>.
325
The mapping&nbsp;<A>g</A> respectively the group&nbsp;<A>G</A> must not
326
move points outside the image of&nbsp;<A>f</A>.
327
<Example>
328
<![CDATA[
329
gap> Induction(F2tilde,RcwaMapping([[5,3,1]])) = F2;
330
true
331
]]>
332
</Example>
333
</Description>
334
</ManSection>
335
336
<Index Key="SmallGeneratingSet"><C>SmallGeneratingSet</C></Index>
337
338
Once having constructed an rcwa group, it is sometimes possible
339
to obtain a smaller generating set by the operation
340
<C>SmallGeneratingSet</C>. <P/>
341
342
<Index Key="View" Subkey="for an rcwa group"><C>View</C></Index>
343
<Index Key="Display" Subkey="for an rcwa group"><C>Display</C></Index>
344
<Index Key="Print" Subkey="for an rcwa group"><C>Print</C></Index>
345
<Index Key="String" Subkey="for an rcwa group"><C>String</C></Index>
346
347
There are methods for the operations <C>View</C>, <C>Display</C>,
348
<C>Print</C> and <C>String</C> which are applicable to rcwa groups. <P/>
349
350
<Index Key="rcwa group" Subkey="modulus">rcwa group</Index>
351
<Index Key="rcwa group" Subkey="multiplier">rcwa group</Index>
352
<Index Key="rcwa group" Subkey="divisor">rcwa group</Index>
353
<Index Key="rcwa group" Subkey="prime set">rcwa group</Index>
354
<Index Key="rcwa group" Subkey="class-wise translating">rcwa group</Index>
355
<Index Key="rcwa group" Subkey="integral">rcwa group</Index>
356
<Index Key="rcwa group" Subkey="class-wise order-preserving">
357
rcwa group
358
</Index>
359
<Index Key="rcwa group" Subkey="sign-preserving">rcwa group</Index>
360
361
<Index Key="Modulus" Subkey="of an rcwa group"><C>Modulus</C></Index>
362
<Index Key="Mod" Subkey="for an rcwa group"><C>Mod</C></Index>
363
<Index Key="ModulusOfRcwaMonoid" Subkey="for an rcwa group">
364
<C>ModulusOfRcwaMonoid</C>
365
</Index>
366
<Index Key="Multiplier" Subkey="of an rcwa group"><C>Multiplier</C></Index>
367
<Index Key="Mult" Subkey="for an rcwa group"><C>Mult</C></Index>
368
<Index Key="Divisor" Subkey="of an rcwa group"><C>Divisor</C></Index>
369
<Index Key="Div" Subkey="for an rcwa group"><C>Div</C></Index>
370
<Index Key="PrimeSet" Subkey="of an rcwa group"><C>PrimeSet</C></Index>
371
<Index Key="IsClassWiseTranslating" Subkey="for an rcwa group">
372
<C>IsClassWiseTranslating</C>
373
</Index>
374
<Index Key="IsIntegral" Subkey="for an rcwa group"><C>IsIntegral</C></Index>
375
<Index Key="IsClassWiseOrderPreserving" Subkey="for an rcwa group">
376
<C>IsClassWiseOrderPreserving</C>
377
</Index>
378
<Index Key="IsSignPreserving" Subkey="for an rcwa group">
379
<C>IsSignPreserving</C>
380
</Index>
381
382
Basic attributes of an rcwa group which are derived from the coefficients
383
of its elements are <C>Modulus</C>, <C>Multiplier</C>, <C>Divisor</C> and
384
<C>PrimeSet</C>.
385
The <E>modulus</E> of an rcwa group is the lcm of the moduli of its
386
elements if such an lcm exists, i.e. if the group is tame, and 0 otherwise.
387
The <E>multiplier</E> respectively <E>divisor</E> of an rcwa group is the
388
lcm of the multipliers respectively divisors of its elements in case such
389
an lcm exists and <M>\infty</M> otherwise.
390
The <E>prime set</E> of an rcwa group is the union of the prime sets of
391
its elements.
392
There are shorthands <C>Mod</C>, <C>Mult</C> and <C>Div</C> defined for
393
<C>Modulus</C>, <C>Multiplier</C> and <C>Divisor</C>, respectively.
394
An rcwa group is called <E>class-wise translating</E>, <E>integral</E>
395
or <E>class-wise order-preserving</E> if all of its elements are so.
396
There are corresponding methods available for <C>IsClassWiseTranslating</C>,
397
<C>IsIntegral</C> and <C>IsClassWiseOrderPreserving</C>. There is a property
398
<C>IsSignPreserving</C>, which indicates whether a given rcwa group
399
over&nbsp;&ZZ; acts on the set of nonnegative integers.
400
The latter holds for any subgroup of CT(&ZZ;) (cf. below).
401
402
<Example>
403
<![CDATA[
404
gap> G := Group(ClassTransposition(0,2,1,2),ClassTransposition(1,3,2,6),
405
> ClassReflection(2,4));
406
<rcwa group over Z with 3 generators>
407
gap> List([Modulus,Multiplier,Divisor,PrimeSet,IsClassWiseTranslating,
408
> IsIntegral,IsClassWiseOrderPreserving,IsSignPreserving],f->f(G));
409
[ 24, 2, 2, [ 2, 3 ], false, false, false, false ]
410
]]>
411
</Example>
412
413
All rcwa groups over a ring <M>R</M> are subgroups of RCWA(<M>R</M>).
414
The group RCWA(<M>R</M>) itself is not finitely generated, thus cannot
415
be constructed as described above. It is handled as a special case:
416
417
<ManSection>
418
<Func Name="RCWA" Arg="R"
419
Label="the group formed by all rcwa permutations of a ring"/>
420
<Returns>
421
the group RCWA(<A>R</A>) of all residue-class-wise affine
422
permutations of the ring&nbsp;<A>R</A>.
423
</Returns>
424
<Description>
425
<Example>
426
<![CDATA[
427
gap> RCWA_Z := RCWA(Integers);
428
RCWA(Z)
429
gap> IsSubgroup(RCWA_Z,G);
430
true
431
]]>
432
</Example>
433
</Description>
434
</ManSection>
435
436
Examples of rcwa permutations can be obtained via
437
<C>Random(RCWA(<A>R</A>))</C>, see Section&nbsp;<Ref Label="sec:Random"/>.
438
439
<Index Key="NrConjugacyClassesOfRCWAZOfOrder">
440
<C>NrConjugacyClassesOfRCWAZOfOrder</C>
441
</Index>
442
443
The number of conjugacy classes of RCWA(&ZZ;) of elements of
444
given order is known, cf. Corollary&nbsp;2.7.1&nbsp;(b)
445
in&nbsp;<Cite Key="Kohl05"/>. It can be determined by the function
446
<C>NrConjugacyClassesOfRCWAZOfOrder</C>:
447
448
<Example>
449
<![CDATA[
450
gap> List([2,105],NrConjugacyClassesOfRCWAZOfOrder);
451
[ infinity, 218 ]
452
]]>
453
</Example>
454
455
We denote the group which is generated by all
456
class transpositions of the ring&nbsp;<M>R</M> by CT(<M>R</M>).
457
This group is handled as a special case as well:
458
459
<ManSection>
460
<Func Name="CT" Arg="R"
461
Label="the group generated by all class transpositions of a ring"/>
462
<Func Name="CT" Arg="P, Integers"
463
Label="subgroup of CT(Z)"/>
464
<Returns>
465
the group CT(<A>R</A>) which is generated by all
466
class transpositions of the ring&nbsp;<A>R</A>, respectively,
467
the group CT(<A>P</A>,&ZZ;) which is generated by all
468
class transpositions of&nbsp;&ZZ; which interchange residue classes
469
whose moduli have only prime factors in the finite set <A>P</A>.
470
</Returns>
471
<Description>
472
<Example>
473
<![CDATA[
474
gap> CT_Z := CT(Integers);
475
CT(Z)
476
gap> IsSimple(CT_Z); # One of a number of stored attributes/properties.
477
true
478
gap> V := CT([2],Integers);
479
CT_[ 2 ](Z)
480
gap> GeneratorsOfGroup(V);
481
[ ( 0(2), 1(2) ), ( 1(2), 2(4) ), ( 0(2), 1(4) ), ( 1(4), 2(4) ) ]
482
gap> G := CT([2,3],Integers);
483
CT_[ 2, 3 ](Z)
484
gap> GeneratorsOfGroup(G);
485
[ ( 0(2), 1(2) ), ( 0(3), 1(3) ), ( 1(3), 2(3) ), ( 0(2), 1(4) ),
486
( 0(2), 5(6) ), ( 0(3), 1(6) ) ]
487
]]>
488
</Example>
489
</Description>
490
</ManSection>
491
492
<Index Key="Mirrored"> <C>Mirrored</C> </Index>
493
494
The group CT(&ZZ;) has an outer automorphism which is given by conjugation
495
with <M>n \mapsto -n - 1</M>. This automorphism can be applied to an
496
rcwa mapping of &ZZ; or to an rcwa group over &ZZ; by the operation
497
<C>Mirrored</C>. The group <C>Mirrored(</C><A>G</A><C>)</C> acts on the
498
nonnegative integers as <A>G</A> acts on the negative integers, and vice
499
versa.
500
501
<Example>
502
<![CDATA[
503
gap> ct := ClassTransposition(0,2,1,6);
504
( 0(2), 1(6) )
505
gap> Mirrored(ct);
506
( 1(2), 4(6) )
507
gap> G := Group(List([[0,2,1,2],[0,3,2,3],[2,4,1,6]],ClassTransposition));;
508
gap> ShortOrbits(G,[-100..100],100);
509
[ [ 0, 1, 2, 3, 4, 5 ] ]
510
gap> ShortOrbits(Mirrored(G),[-100..100],100);
511
[ [ -6, -5, -4, -3, -2, -1 ] ]
512
]]>
513
</Example>
514
515
<Index Key="AllElementsOfCTZWithGivenModulus">
516
<C>AllElementsOfCTZWithGivenModulus</C>
517
</Index>
518
<Index Key="NrElementsOfCTZWithGivenModulus">
519
<C>NrElementsOfCTZWithGivenModulus</C>
520
</Index>
521
522
Under the hypothesis that CT(&ZZ;) is the setwise
523
stabilizer of <M>&NN;_0</M> in RCWA(&ZZ;), the elements of CT(&ZZ;) with
524
modulus dividing a given positive integer <M>m</M> are parametrized by
525
the ordered partitions of &ZZ; into <M>m</M> residue classes.
526
The list of these elements for given <M>m</M> can be obtained by
527
the function <C>AllElementsOfCTZWithGivenModulus</C>, and the numbers
528
of such elements for <M>m \leq 24</M> are stored in the list
529
<C>NrElementsOfCTZWithGivenModulus</C>.
530
531
<Example>
532
<![CDATA[
533
gap> NrElementsOfCTZWithGivenModulus{[1..8]};
534
[ 1, 1, 17, 238, 4679, 115181, 3482639, 124225680 ]
535
]]>
536
</Example>
537
538
<Index Key="NrConjugacyClassesOfRCWAZOfOrder">
539
<C>NrConjugacyClassesOfCTZOfOrder</C>
540
</Index>
541
542
The number of conjugacy classes of CT(&ZZ;) of elements of
543
given order is also known under the hypothesis that CT(&ZZ;) is the setwise
544
stabilizer of <M>&NN;_0</M> in RCWA(&ZZ;). It can be determined by the
545
function <C>NrConjugacyClassesOfCTZOfOrder</C>.
546
547
</Section>
548
549
<!-- #################################################################### -->
550
551
<Section Label="sec:InvestigatingRcwaGroups">
552
<Heading>
553
Basic routines for investigating residue-class-wise affine groups
554
</Heading>
555
556
In the previous section we have seen how to construct rcwa groups.
557
The purpose of this section is to describe how to obtain information on
558
the structure of an rcwa group and on its action on the underlying ring.
559
The easiest way to get a little (but really only <E>a very little</E>!)
560
information on the group structure is a dedicated method for the operation
561
<C>StructureDescription</C>:
562
563
<ManSection>
564
<Meth Name="StructureDescription" Arg="G" Label="for an rcwa group"/>
565
<Returns>
566
a string which sometimes gives a little glimpse of the structure
567
of the rcwa group&nbsp;<A>G</A>.
568
</Returns>
569
<Description>
570
The attribute <C>StructureDescription</C> for finite groups is
571
documented in the &GAP; Reference Manual. Therefore we describe here
572
only issues which are specific to infinite groups, and in particular
573
to rcwa groups. <P/>
574
575
Wreath products are denoted by&nbsp;<C>wr</C>, and free products
576
are denoted by&nbsp;<C>*</C>. The infinite cyclic group (&ZZ;,+) is
577
denoted by&nbsp;<C>Z</C>, the infinite dihedral group is denoted
578
by&nbsp;<C>D0</C> and free groups of rank <M>2,3,4,\dots</M>
579
are denoted by&nbsp;<C>F2</C>, <C>F3</C>, <C>F4</C>,&nbsp;<M>\dots</M>.
580
While for finite groups the symbol&nbsp;<C>.</C> is used to denote a
581
non-split extension, for rcwa groups in general it stands for an
582
extension which may be split or not.
583
For wild groups in most cases it happens that there is a large section
584
on which no structural information can be obtained. Such sections of the
585
group with unknown structure are denoted by <C>&lt;unknown&gt;</C>.
586
In general, the structure of a section denoted by <C>&lt;unknown&gt;</C>
587
can be very complicated and very difficult to exhibit.
588
<Example>
589
<![CDATA[
590
gap> G := Group(ClassTransposition(0,2,1,4),ClassShift(0,5));;
591
gap> StructureDescription(G);
592
"(Z x Z x Z x Z x Z x Z x Z) . (C2 x S7)"
593
gap> G := Group(ClassTransposition(0,2,1,4),
594
> ClassShift(2,4),ClassReflection(1,2));;
595
gap> StructureDescription(G:short);
596
"Z^2.((S3xS3):2)"
597
gap> F2 := Image(IsomorphismRcwaGroup(FreeGroup(2)));;
598
gap> PSL2Z := Image(IsomorphismRcwaGroup(FreeProduct(CyclicGroup(3),
599
> CyclicGroup(2))));;
600
gap> G := DirectProduct(PSL2Z,F2);
601
<wild rcwa group over Z with 4 generators>
602
gap> StructureDescription(G);
603
"(C3 * C2) x F2"
604
gap> G := WreathProduct(G,CyclicGroup(IsRcwaGroupOverZ,infinity));
605
<wild rcwa group over Z with 5 generators>
606
gap> StructureDescription(G);
607
"((C3 * C2) x F2) wr Z"
608
gap> Collatz := RcwaMapping([[2,0,3],[4,-1,3],[4,1,3]]);;
609
gap> G := Group(Collatz,ClassShift(0,1));;
610
gap> StructureDescription(G:short);
611
"<unknown>.Z"
612
]]>
613
</Example>
614
</Description>
615
</ManSection>
616
617
The extent to which the structure of an rcwa group can be exhibited
618
automatically is severely limited. In general, one can find out much more
619
about the structure of a given rcwa group in an interactive session using
620
the functionality described in the rest of this section and elsewhere in
621
this manual. <P/>
622
623
<Index Key="Size" Subkey="for an rcwa group"><C>Size</C></Index>
624
625
The order of an rcwa group can be computed by the operation <C>Size</C>.
626
An rcwa group is finite if and only if it is tame and its action on a
627
suitably chosen respected partition (see&nbsp;<Ref Attr="RespectedPartition"
628
Label="of a tame rcwa group"/>) is faithful.
629
Hence the problem of computing the order of an rcwa group reduces to
630
the problem of deciding whether it is tame, the problem of deciding whether
631
it acts faithfully on a respected partition and the problem of computing the
632
order of the finite permutation group induced on the respected partition.
633
634
<Example>
635
<![CDATA[
636
gap> G := Group(ClassTransposition(0,2,1,2),ClassTransposition(1,3,2,3),
637
> ClassReflection(0,5));
638
<rcwa group over Z with 3 generators>
639
gap> Size(G);
640
46080
641
]]>
642
</Example>
643
644
<Index Key="IsomorphismPermGroup" Subkey="for a finite rcwa group">
645
<C>IsomorphismPermGroup</C>
646
</Index>
647
648
For a finite rcwa group, an isomorphism to a permutation group can be
649
computed by <C>IsomorphismPermGroup</C>:
650
651
<Example>
652
<![CDATA[
653
gap> G := Group(ClassTransposition(0,2,1,2),ClassTransposition(0,3,1,3));;
654
gap> IsomorphismPermGroup(G);
655
[ ( 0(2), 1(2) ), ( 0(3), 1(3) ) ] -> [ (1,2)(3,4)(5,6), (1,2)(4,5) ]
656
]]>
657
</Example>
658
659
<Index Key="rcwa group" Subkey="membership test">rcwa group</Index>
660
<Index Key="OrbitLengthBound"><C>OrbitLengthBound</C></Index>
661
662
In general the membership problem for rcwa groups is algorithmically
663
unsolvable, see Corollary&nbsp;4.5 in&nbsp;<Cite Key="Kohl09"/>.
664
A consequence of this is that a membership test <Q><C>g in G</C></Q> may
665
run into an infinite loop if the rcwa permutation <C>g</C> is not an
666
element of the rcwa group <C>G</C>. For tame rcwa groups however
667
membership can always be decided. For wild rcwa groups, membership can
668
very often be decided quite quick as well, but -- as said -- not always.
669
Anyway, if <C>g</C> is contained in <C>G</C>, the membership test will
670
eventually always return <C>true</C>, provided that there are sufficient
671
computing resources available (memory etc.). <P/>
672
673
On Info level&nbsp;2 of <C>InfoRCWA</C> the membership test provides
674
information on reasons why the given rcwa permutation is an element of
675
the given rcwa group or&nbsp;not. <P/>
676
677
The membership test <Q><C>g in G</C></Q> recognizes an option
678
<C>OrbitLengthBound</C>. If this option is set, it returns <C>false</C>
679
once it has computed balls of size exceeding <C>OrbitLengthBound</C>
680
about 1 and <C>g</C> in <C>G</C>, and these balls are still disjoint.
681
Note however that due to the algorithmic unsolvability of the membership
682
problem, &RCWA; has no means to check the correctness of such bound
683
in a given case. So the correct use of this option has to remain within
684
the full responsibility of the user.
685
686
<Example>
687
<![CDATA[
688
gap> G := Group(ClassShift(0,3),ClassTransposition(0,3,2,6));;
689
gap> ClassShift(2,6)^7 * ClassTransposition(0,3,2,6)
690
> * ClassShift(0,3)^-3 in G;
691
true
692
gap> ClassShift(0,1) in G;
693
false
694
]]>
695
</Example>
696
697
<Index Key="rcwa group" Subkey="conjugacy problem">rcwa group</Index>
698
<Index Key="IsConjugate" Subkey="for elements of RCWA(R)">
699
<C>IsConjugate</C>
700
</Index>
701
<Index Key="IsConjugate" Subkey="for elements of CT(R)">
702
<C>IsConjugate</C>
703
</Index>
704
705
The conjugacy problem for rcwa groups is difficult, and &RCWA; provides
706
only methods to solve it in some reasonably easy cases.
707
708
<Example>
709
<![CDATA[
710
gap> IsConjugate(RCWA(Integers),
711
> ClassTransposition(0,2,1,4),ClassShift(0,1));
712
false
713
gap> IsConjugate(CT(Integers),ClassTransposition(0,2,1,6),
714
> ClassTransposition(1,4,0,8));
715
true
716
gap> g := RepresentativeAction(CT(Integers),ClassTransposition(0,2,1,6),
717
> ClassTransposition(1,4,0,8));
718
<rcwa permutation of Z with modulus 48>
719
gap> ClassTransposition(0,2,1,6)^g = ClassTransposition(1,4,0,8);
720
true
721
]]>
722
</Example>
723
724
<Index Key="IsTame" Subkey="for an rcwa group"><C>IsTame</C></Index>
725
There is a property <C>IsTame</C> which indicates whether an rcwa group
726
is tame or not:
727
728
<Example>
729
<![CDATA[
730
gap> G := Group(ClassTransposition(0,2,1,4),ClassShift(1,3));;
731
gap> H := Group(ClassTransposition(0,2,1,6),ClassShift(1,3));;
732
gap> IsTame(G);
733
true
734
gap> IsTame(H);
735
false
736
]]>
737
</Example>
738
739
<Index Key="IsSolvable" Subkey="for an rcwa group"><C>IsSolvable</C></Index>
740
<Index Key="IsPerfect" Subkey="for an rcwa group"><C>IsPerfect</C></Index>
741
<Index Key="DerivedSubgroup" Subkey="of an rcwa group">
742
<C>DerivedSubgroup</C>
743
</Index>
744
<Index Key="Index" Subkey="for rcwa groups"><C>Index</C></Index>
745
<Index Key="IsomorphismMatrixGroup" Subkey="for an rcwa group">
746
<C>IsomorphismMatrixGroup</C>
747
</Index>
748
<Index Key="Exponent" Subkey="of an rcwa group"><C>Exponent</C></Index>
749
750
For tame rcwa groups, there are methods for <C>IsSolvable</C> and
751
<C>IsPerfect</C> available, and usually derived subgroups and subgroup
752
indices can be computed as well. Linear representations of tame groups
753
over the rationals can be determined by the operation
754
<C>IsomorphismMatrixGroup</C>. Testing a wild group for solvability
755
or perfectness is currently not always feasible, and wild groups
756
have in general no faithful finite-dimensional linear representations.
757
There is a method for <C>Exponent</C> available, which works basically
758
for any rcwa group.
759
760
<Example>
761
<![CDATA[
762
gap> G := Group(ClassTransposition(0,2,1,4),ClassShift(1,2));;
763
gap> IsPerfect(G);
764
false
765
gap> IsSolvable(G);
766
true
767
gap> D1 := DerivedSubgroup(G);; D2 := DerivedSubgroup(D1);;
768
gap> IsAbelian(D2);
769
true
770
gap> Index(G,D1); Index(D1,D2);
771
infinity
772
9
773
gap> StructureDescription(G); StructureDescription(D1);
774
"(Z x Z x Z) . S3"
775
"(Z x Z) . C3"
776
gap> Q := D1/D2;
777
Group([ (), (1,2,4)(3,5,7)(6,8,9), (1,3,6)(2,5,8)(4,7,9) ])
778
gap> StructureDescription(Q);
779
"C3 x C3"
780
gap> Exponent(G);
781
infinity
782
gap> phi := IsomorphismMatrixGroup(G);;
783
gap> Display(Image(phi,ClassTransposition(0,2,1,4)));
784
[ [ 0, 0, 1/2, -1/2, 0, 0 ],
785
[ 0, 0, 0, 1, 0, 0 ],
786
[ 2, 1, 0, 0, 0, 0 ],
787
[ 0, 1, 0, 0, 0, 0 ],
788
[ 0, 0, 0, 0, 1, 0 ],
789
[ 0, 0, 0, 0, 0, 1 ] ]
790
]]>
791
</Example>
792
793
When investigating a group, a basic task is to find relations among
794
the generators:
795
796
<ManSection>
797
<Meth Name="EpimorphismFromFpGroup"
798
Arg="G, r" Label="for an rcwa group and a search radius"/>
799
<Meth Name="EpimorphismFromFpGroup"
800
Arg="G, r, maxparts"
801
Label="for rcwa group, search radius and bound on number of affine parts"/>
802
<Returns>
803
an epimorphism from a finitely presented group to the
804
rcwa group&nbsp;<A>G</A>.
805
</Returns>
806
<Description>
807
The argument <A>r</A> is the <Q>search radius</Q>, i.e. the
808
radius of the ball around&nbsp;1 which is scanned for relations.
809
In general, the larger <A>r</A> is chosen the smaller the kernel
810
of the returned epimorphism is. If the group&nbsp;<A>G</A> has
811
finite presentations, the kernel will in principle get trivial
812
provided that <A>r</A> is chosen large enough.
813
If the optional argument <A>maxparts</A> is given, it limits the
814
search space to elements with at most <A>maxparts</A> affine parts.
815
<Example>
816
<![CDATA[
817
gap> a := ClassTransposition(2,4,3,4);;
818
gap> b := ClassTransposition(4,6,8,12);;
819
gap> c := ClassTransposition(3,4,4,6);;
820
gap> G := SparseRep(Group(a,b,c));
821
<(2(4),3(4)),(4(6),8(12)),(3(4),4(6))>
822
gap> phi := EpimorphismFromFpGroup(G,6);
823
#I there are 3 generators and 12 relators of total length 330
824
#I there are 3 generators and 11 relators of total length 312
825
[ a, b, c ] -> [ ( 2(4), 3(4) ), ( 4(6), 8(12) ), ( 3(4), 4(6) ) ]
826
gap> RelatorsOfFpGroup(Source(phi));
827
[ a^2, b^2, c^2, (b*c)^3, (a*b)^6, (a*b*c*b)^3, (a*c*b*c)^3,
828
(a*b*a*c)^12, ((a*b)^2*a*c)^12, (a*b*(a*c)^2)^12, (a*b*c*a*c*b)^12 ]
829
]]>
830
</Example>
831
</Description>
832
</ManSection>
833
834
A related very common task is to factor group elements into generators:
835
836
<ManSection>
837
<Meth Name ="PreImagesRepresentative" Arg="phi, g"
838
Label="for an epi. from a free group to an rcwa group"/>
839
<Returns>
840
a representative of the set of preimages of&nbsp;<A>g</A> under
841
the epimorphism&nbsp;<A>phi</A> from a free group to an rcwa group.
842
</Returns>
843
<Description>
844
The epimorphism <A>phi</A> must map the generators of the free
845
group to the generators of the rcwa group one-by-one. <P/>
846
847
This method can be used for factoring elements of rcwa groups
848
into generators. The implementation is based on
849
<C>RepresentativeActionPreImage</C>, see
850
<Ref Oper="RepresentativeAction"
851
Label="G, source, destination, action"/>. <P/>
852
853
<Index Key="PreImagesRepresentatives"
854
Subkey="for an epi. from a free group to an rcwa group">
855
<C>PreImagesRepresentatives</C>
856
</Index>
857
858
Quite frequently, computing several preimages is not harder than
859
computing just one, i.e. often several preimages are found
860
simultaneously. The operation <C>PreImagesRepresentatives</C>
861
takes care of this. It takes the same arguments as
862
<C>PreImagesRepresentative</C> and returns a list of preimages.
863
If multiple preimages are found, their quotients give rise to nontrivial
864
relations among the generators of the image of&nbsp;<A>phi</A>.
865
<Example>
866
<![CDATA[
867
gap> a := RcwaMapping([[2,0,3],[4,-1,3],[4,1,3]]);; SetName(a,"a");
868
gap> b := ClassShift(0,1);; SetName(b,"b");
869
gap> G := Group(a,b);; # G = <<Collatz permutation>, n -> n + 1>
870
gap> phi := EpimorphismFromFreeGroup(G);;
871
gap> g := Comm(a^2*b^4,a*b^3); # a sample element to be factored
872
<rcwa permutation of Z with modulus 8>
873
gap> PreImagesRepresentative(phi,g); # -> a factorization of g
874
b^-3*(b^-1*a^-1)^2*b^3*a*b^-1*a*b^3
875
gap> g = b^-4*a^-1*b^-1*a^-1*b^3*a*b^-1*a*b^3; # check
876
true
877
gap> g := Comm(a*b,Comm(a,b^3));
878
<rcwa permutation of Z with modulus 8>
879
gap> pre := PreImagesRepresentatives(phi,g);
880
[ (b^-1*a^-1)^2*b^2*(b*a)^2*b^-2, b^-1*(a^-1*b)^2*b^2*(a*b^-1)^2*b^-1 ]
881
gap> rel := pre[1]/pre[2]; # -> a nontrivial relation
882
(b^-1*a^-1)^2*b^3*a*b^2*a^-1*b^-2*(b^-1*a)^2*b
883
gap> rel^phi;
884
IdentityMapping( Integers )
885
]]>
886
</Example>
887
</Description>
888
</ManSection>
889
890
</Section>
891
892
<!-- #################################################################### -->
893
894
<Section Label="sec:ActionOnR">
895
<Heading>
896
The natural action of an rcwa group on the underlying ring
897
</Heading>
898
899
Knowing a natural permutation representation of a group usually helps
900
significantly in computing in it and in obtaining results on its structure.
901
This holds particularly for the natural action of an rcwa group on its
902
underlying ring. In this section we describe &RCWA;'s functionality
903
related to this action. <P/>
904
905
<Index Key="Support" Subkey="of an rcwa group"><C>Support</C></Index>
906
<Index Key="MovedPoints" Subkey="of an rcwa group"><C>MovedPoints</C></Index>
907
<Index Key="IsTransitive" Subkey="for an rcwa group, on its underlying ring">
908
<C>IsTransitive</C>
909
</Index>
910
911
The support, i.e. the set of moved points, of an rcwa group can be
912
determined by <C>Support</C> or <C>MovedPoints</C> (these are synonyms).
913
Testing for transitivity on the underlying ring or on a union of residue
914
classes thereof is often feasible:
915
916
<Example>
917
<![CDATA[
918
gap> G := Group(ClassTransposition(1,2,0,4),ClassShift(0,2));;
919
gap> IsTransitive(G,Integers);
920
true
921
]]>
922
</Example>
923
924
<Alt Only="LaTeX">
925
<Index Key="IsTransitiveOnNonnegativeIntegersInSupport"
926
Subkey="for an rcwa group over Z">
927
<C>IsTransitiveOnNonnegativeIntegersIn- Support</C>
928
</Index>
929
<Index Key="TryIsTransitiveOnNonnegativeIntegersInSupport"
930
Subkey="for an rcwa group over Z and a search limit">
931
<C>TryIsTransitiveOnNonnegativeIntegers- InSupport</C>
932
</Index>
933
</Alt>
934
<Alt Not="LaTeX">
935
<Index Key="IsTransitiveOnNonnegativeIntegersInSupport"
936
Subkey="for an rcwa group over Z">
937
<C>IsTransitiveOnNonnegativeIntegersInSupport</C>
938
</Index>
939
<Index Key="TryIsTransitiveOnNonnegativeIntegersInSupport"
940
Subkey="for an rcwa group over Z and a search limit">
941
<C>TryIsTransitiveOnNonnegativeIntegersInSupport</C>
942
</Index>
943
</Alt>
944
<Index Key="TransitivityCertificate"
945
Subkey="for an rcwa group over Z and a search limit">
946
<C>TransitivityCertificate</C>
947
</Index>
948
<Index Key="TryToComputeTransitivityCertificate"
949
Subkey="for an rcwa group over Z and a search limit">
950
<C>TryToComputeTransitivityCertificate</C>
951
</Index>
952
<Index Key="SimplifiedCertificate"
953
Subkey="for a transitivity certificate of an rcwa groups over Z">
954
<C>SimplifiedCertificate</C>
955
</Index>
956
957
Groups generated by class transpositions of the integers act on the set of
958
nonnegative integers. There is a property
959
<C>IsTransitiveOnNonnegativeIntegersInSupport(<A>G</A>)</C> which indicates
960
whether such group acts transitively on the set of nonnegative integers in
961
its support. Since such transitivity test is a computationally hard problem,
962
methods may fail. If <C>IsTransitiveOnNonnegativeIntegersInSupport</C>
963
returns <C>true</C>, an attribute <C>TransitivityCertificate</C> is set;
964
this is a record containing components <C>phi</C>, <C>words</C>,
965
<C>classes</C>, <C>smallpointbound</C>, <C>status</C> and <C>complete</C>
966
as follows:
967
<List>
968
969
<Mark><C>phi</C></Mark>
970
<Item>
971
is an epimorphism from a free group to <A>G</A> which maps generators
972
to generators.
973
</Item>
974
975
<Mark><C>words</C>, <C>classes</C></Mark>
976
<Item>
977
two lists. -- <C>words[i]</C> is a preimage under <C>phi</C> of
978
an element of <A>G</A> which maps all sufficiently large positive
979
integers in the residue classes <C>classes[i]</C> to smaller
980
nonnegative integers.
981
</Item>
982
983
<Mark><C>smallpointbound</C></Mark>
984
<Item>
985
in addition to finding a list of group elements <M>g_i</M> such that
986
for any large enough integer <M>n</M> in the support of <A>G</A> there
987
is some <M>g_i</M> such that <M>n^{g_i} &lt; n</M>, for verifying
988
transitivity it was necessary to check that all integers less than or
989
equal to <C>smallpointbound</C> in the support of <A>G</A> lie in the
990
same orbit.
991
</Item>
992
993
<Mark><C>status</C></Mark>
994
<Item>
995
the string <C>"transitive"</C> in case all checks have been completed
996
successfully.
997
</Item>
998
999
<Mark><C>complete</C></Mark>
1000
<Item>
1001
<C>true</C> in case all checks have been completed successfully.
1002
</Item>
1003
1004
</List>
1005
Parts of this information for possibly intransitive groups can be
1006
obtained by the operation
1007
<C>TryToComputeTransitivityCertificate(<A>G</A>,<A>searchlimit</A>)</C>,
1008
where <A>searchlimit</A> is the maximum radius about a point within
1009
which smaller points are searched and taken into consideration.
1010
This operation interprets an option <C>abortdensity</C> -- if set,
1011
the operation returns the data computed so far once the density of
1012
the set of positive integers in the support of <A>G</A> for which no
1013
group element is found which maps them to smaller integers reaches
1014
or drops below <C>abortdensity</C>. A simplified certificate can be
1015
obtained via <C>SimplifiedCertificate(<A>cert</A>)</C>.
1016
<Example>
1017
<![CDATA[
1018
gap> G := Group(List([[0,2,1,2],[0,3,2,3],[1,2,2,4]],
1019
> ClassTransposition));
1020
<(0(2),1(2)),(0(3),2(3)),(1(2),2(4))>
1021
gap> IsTransitiveOnNonnegativeIntegersInSupport(G);
1022
true
1023
gap> TransitivityCertificate(G);
1024
rec(
1025
classes := [ [ 1(2) ], [ 2(6) ], [ 6(12), 10(12) ], [ 0(12) ],
1026
[ 4(12) ] ], complete := true,
1027
phi := [ a, b, c ] -> [ ( 0(2), 1(2) ), ( 0(3), 2(3) ), ( 1(2), 2(4) )
1028
], smallpointbound := 4, status := "transitive",
1029
words := [ a, b, c, b*c, a*b ] )
1030
gap> SimplifiedCertificate(last);
1031
rec( classes := [ [ 1(2) ], [ 2(4) ], [ 4(12) ], [ 0(12), 8(12) ] ],
1032
complete := true,
1033
phi := [ a, b, c ] -> [ ( 0(2), 1(2) ), ( 0(3), 2(3) ), ( 1(2), 2(4) )
1034
], smallpointbound := 4, status := "transitive",
1035
words := [ a, c, a*b, b*c ] )
1036
gap> G := Group(List([[0,2,1,2],[1,2,2,4],[1,4,2,6]],
1037
> ClassTransposition)); # '3n+1 group'
1038
<(0(2),1(2)),(1(2),2(4)),(1(4),2(6))>
1039
gap> cert := TryToComputeTransitivityCertificate(G,10);
1040
rec(
1041
classes := [ [ 1(2) ], [ 2(4) ], [ 4(32) ], [ 8(24), 44(48), 20(96) ],
1042
[ 0(24), 16(24) ] ], complete := false,
1043
phi := [ a, b, c ] -> [ ( 0(2), 1(2) ), ( 1(2), 2(4) ), ( 1(4), 2(6) )
1044
], remaining := [ 12(48), 28(48), 52(96), 84(96) ],
1045
smallpointbound := 42, status := "unclear",
1046
words := [ a, b, (a*c)^2*b*a*b, c, a*c*b ] )
1047
gap> Union(Flat(cert.classes));
1048
<union of 90 residue classes (mod 96) (6 classes)>
1049
gap> Difference(Integers,Union(Flat(cert.classes)));
1050
12(48) U 28(48) U 52(96) U 84(96)
1051
gap> cert := TryToComputeTransitivityCertificate(G,20); # try larger bound
1052
rec(
1053
classes := [ [ 1(2) ], [ 2(4) ], [ 4(32) ], [ 8(24), 44(48), 20(96) ],
1054
[ 0(24), 16(24) ], [ 12(768), 268(768) ], [ 28(768), 540(768) ] ],
1055
complete := false,
1056
phi := [ a, b, c ] -> [ ( 0(2), 1(2) ), ( 1(2), 2(4) ), ( 1(4), 2(6) )
1057
],
1058
remaining := [ 52(96), 84(96), 60(192), 108(192), 124(192), 172(192),
1059
76(384), 204(384), 220(384), 348(384), 156(768), 396(768),
1060
412(768), 652(768) ], smallpointbound := 1074, status := "unclear",
1061
words := [ a, b, (a*c)^2*b*a*b, c, a*c*b, (a*c)^3*b*c*b*a*b,
1062
(a*c)^4*b*a*b*a*b ] )
1063
gap> Difference(Integers,Union(Flat(cert.classes)));
1064
<union of 44 residue classes (mod 768) (14 classes)>
1065
gap> Intersection([0..100],last);
1066
[ 52, 60, 76, 84 ]
1067
]]>
1068
</Example>
1069
1070
Further, there are methods to compute orbits under the
1071
action of an rcwa group:
1072
1073
<ManSection>
1074
<Heading> Orbit (for an rcwa group and either a point or a set) </Heading>
1075
<Meth Name="Orbit" Arg="G, point" Label="for an rcwa group and a point"/>
1076
<Meth Name="Orbit" Arg="G, set" Label="for an rcwa group and a set"/>
1077
<Returns>
1078
the orbit of the point&nbsp;<A>point</A> respectively the
1079
set&nbsp;<A>set</A> under the natural action of the rcwa
1080
group&nbsp;<A>G</A> on its underlying ring.
1081
</Returns>
1082
<Description>
1083
The second argument can either be an element or a subset of
1084
the underlying ring of the rcwa group&nbsp;<A>G</A>.
1085
Since orbits under the action of rcwa groups can be finite
1086
or infinite, and since infinite orbits are not necessarily
1087
residue class unions, the orbit may either be returned in
1088
the form of a list, in the form of a residue class union
1089
or in the form of an orbit object. It is possible to loop over
1090
orbits returned as orbit objects, they can be compared and
1091
there is a membership test for them. However note that equality
1092
and membership for such orbits cannot always be decided.
1093
<Example>
1094
<![CDATA[
1095
gap> G := Group(ClassShift(0,2),ClassTransposition(0,3,1,3));
1096
<rcwa group over Z with 2 generators>
1097
gap> Orbit(G,0);
1098
Z \ 5(6)
1099
gap> Orbit(G,5);
1100
[ 5 ]
1101
gap> Orbit(G,ResidueClass(0,2));
1102
[ 0(2), 1(6) U 2(6) U 3(6), 1(3) U 3(6), 0(3) U 1(6), 0(3) U 4(6),
1103
1(3) U 0(6), 0(3) U 2(6), 0(6) U 1(6) U 2(6), 2(6) U 3(6) U 4(6),
1104
1(3) U 2(6) ]
1105
gap> Length(Orbit(G,ResidueClass(0,4)));
1106
80
1107
gap> G := Group(ClassTransposition(0,2,1,2),ClassTransposition(0,2,1,4),
1108
> ClassReflection(0,3));
1109
<rcwa group over Z with 3 generators>
1110
gap> orb := Orbit(G,2);
1111
<orbit of 2 under <wild rcwa group over Z with 3 generators>>
1112
gap> 1015808 in orb;
1113
true
1114
gap> First(orb,n->ForAll([n,n+2,n+6,n+8,n+30,n+32,n+36,n+38],IsPrime));
1115
-19
1116
]]>
1117
</Example>
1118
</Description>
1119
</ManSection>
1120
1121
<ManSection>
1122
<Oper Name="GrowthFunctionOfOrbit" Arg="G, n, r_max, size_max"
1123
Label="for an rcwa group, a point and bounds on radius and sphere size"/>
1124
<Meth Name="GrowthFunctionOfOrbit" Arg="orb, r_max, size_max"
1125
Label="for an rcwa group orbit and bounds on radius and sphere size"/>
1126
<Returns>
1127
a list whose (<M>r+1</M>)-th entry is the size of the sphere of
1128
radius <M>r</M> about <A>n</A> under the action of the group <A>G</A>,
1129
where the argument <A>r_max</A> is the largest possible radius to be
1130
considered, and the computation stops once the sphere size exceeds
1131
<A>size_max</A>.
1132
</Returns>
1133
<Description>
1134
An option <C>"small"</C> is interpreted -- see example below.
1135
In place of the group <A>G</A> and the point <A>n</A>, one can pass as
1136
first argument also an rcwa group orbit object <A>orb</A>.
1137
<Example>
1138
<![CDATA[
1139
gap> G := Group(List([[0,4,1,4],[0,3,5,6],[0,4,5,6]],ClassTransposition));
1140
<(0(4),1(4)),(0(3),5(6)),(0(4),5(6))>
1141
gap> GrowthFunctionOfOrbit(G,18,100,20);
1142
[ 1, 1, 2, 3, 4, 3, 4, 4, 4, 4, 3, 3, 3, 4, 3, 4, 4, 5, 5, 6, 8, 6, 5,
1143
5, 4, 3, 3, 4, 4, 4, 3, 3, 5, 4, 5, 6, 5, 2, 3, 3, 2, 3, 3, 4, 5, 4,
1144
4, 4, 6, 5, 5, 3, 4, 2, 3, 4, 4, 2, 3, 4, 4, 2, 3, 3, 4, 3, 5, 3, 5,
1145
4, 5, 6, 5, 3, 4, 5, 6, 5, 4, 3, 5, 4, 5, 5, 4, 4, 5, 5, 3, 4, 5, 3,
1146
3, 4, 5, 4, 2, 3, 4, 4, 4 ]
1147
gap> last = GrowthFunctionOfOrbit(Orbit(G,18),100,20);
1148
true
1149
gap> GrowthFunctionOfOrbit(G,18,20,20:small:=[0..100]);
1150
rec( smallpoints := [ 18, 24, 25, 27, 30, 32, 33, 36, 37, 39, 40, 41,
1151
42, 44, 45, 48, 49, 51, 52, 53, 56, 57, 59, 60, 61, 64, 65, 66,
1152
68, 69, 71, 75, 76, 77, 80, 81, 83, 88, 89, 92, 93, 95, 100 ],
1153
spheresizes := [ 1, 1, 2, 3, 4, 3, 4, 4, 4, 4, 3, 3, 3, 4, 3, 4, 4, 5,
1154
5, 6, 8 ] )
1155
gap> G := Group(List([[0,2,1,2],[1,2,2,4],[1,4,2,6]],ClassTransposition));
1156
<(0(2),1(2)),(1(2),2(4)),(1(4),2(6))>
1157
gap> GrowthFunctionOfOrbit(G,0,100,10000);
1158
[ 1, 1, 1, 1, 1, 1, 1, 2, 3, 3, 4, 5, 7, 6, 7, 9, 12, 14, 19, 21, 28,
1159
29, 37, 42, 55, 57, 72, 78, 99, 113, 148, 164, 215, 226, 288, 344,
1160
462, 478, 612, 686, 894, 985, 1284, 1416, 1847, 2018, 2620, 2902,
1161
3786, 4167, 5432, 5958, 7749, 8568, 11178 ]
1162
]]>
1163
</Example>
1164
</Description>
1165
</ManSection>
1166
1167
<Index Key="DistanceToNextSmallerPointInOrbit">
1168
<C>DistanceToNextSmallerPointInOrbit</C>
1169
</Index>
1170
1171
Given an rcwa group <A>G</A> over &ZZ; and an integer <A>n</A>,
1172
<C>DistanceToNextSmallerPointInOrbit(</C><A>G</A><C>,</C><A>n</A><C>)</C>
1173
computes the smallest number <M>d</M> such that there is a product <M>g</M>
1174
of <M>d</M> generators or inverses of generators of <A>G</A> which maps
1175
<A>n</A> to an integer with absolute value less than |<A>n</A>|, provided
1176
that the orbit of <A>n</A> contains such integer.
1177
1178
&RCWA; provides a function to draw pictures of orbits of rcwa groups
1179
on&nbsp;<M>&ZZ;^2</M>. The pictures are written to files in bitmap-
1180
(bmp-) format. The author has successfully tested this feature both under
1181
Linux and under Windows, and the generated pictures can be processed
1182
further with many common graphics programs:
1183
1184
<ManSection>
1185
<Func Name="DrawOrbitPicture"
1186
Arg="G, p0, bound, h, w, colored, palette, filename"
1187
Label="G, p0, bound, h, w, colored, palette, filename"/>
1188
<Returns> nothing. </Returns>
1189
<Description>
1190
Draws a picture of the orbit(s) of the point(s) <A>p0</A> under the
1191
action of the group <A>G</A> on&nbsp;<M>&ZZ;^2</M>.
1192
The argument <A>p0</A> is either one point or a list of points.
1193
The argument <A>bound</A> denotes the bound to which the ball about
1194
<A>p0</A> is to be computed, in terms of absolute values of coordinates.
1195
The size of the generated picture is <A>h</A>&nbsp;x&nbsp;<A>w</A> pixels.
1196
The argument <A>colored</A> is a boolean which indicates whether a 24-bit
1197
true color picture or a monochrome picture should be generated.
1198
In the former case, <A>palette</A> must be a list of triples of integers
1199
in the range <M>0, \dots, 255</M>, denoting the RGB values of the colors
1200
to be used. In the latter case, <A>palette</A> is not used, and any value
1201
can be passed. The picture is written in bitmap- (bmp-) format to a file
1202
named <A>filename</A>. This is done using the utility function
1203
<C>SaveAsBitmapPicture</C> from &ResClasses;.
1204
<Log>
1205
<![CDATA[
1206
gap> PSL2Z := Image(IsomorphismRcwaGroup(FreeProduct(CyclicGroup(2),
1207
> CyclicGroup(3))));;
1208
gap> DrawOrbitPicture(PSL2Z,[0,1],2000,512,512,false,fail,"example1.bmp");
1209
gap> DrawOrbitPicture(PSL2Z,Combinations([1..4],2),2000,512,512,true,
1210
> [[255,0,0],[0,255,0],[0,0,255]],"example2.bmp");
1211
]]>
1212
</Log>
1213
</Description>
1214
</ManSection>
1215
1216
The pictures drawn in the examples are shown on &RCWA;'s webpage. <P/>
1217
1218
Finite orbits give rise to finite quotients of a group, and finite cycles
1219
can help to check for conjugacy. Therefore it is important to be able
1220
to determine them:
1221
1222
<ManSection>
1223
<Heading>
1224
ShortOrbits (for rcwa groups) &amp; ShortCycles (for rcwa permutations)
1225
</Heading>
1226
<Oper Name="ShortOrbits" Arg="G, S, maxlng"
1227
Label="for rcwa group, set of points and bound on length"/>
1228
<Oper Name="ShortOrbits" Arg="G, S, maxlng, maxn"
1229
Label="for rcwa group, set of points and bounds on length and points"/>
1230
<Oper Name="ShortCycles" Arg="g, S, maxlng"
1231
Label="for rcwa permutation, set of points and bound on length"/>
1232
<Oper Name="ShortCycles" Arg="g, S, maxlng, maxn"
1233
Label="for rcwa permutation, set of points and bounds on length and points"/>
1234
<Oper Name="ShortCycles" Arg="g, maxlng"
1235
Label="for rcwa permutation and bound on length"/>
1236
<Returns>
1237
in the first form a list of all orbits of the rcwa group&nbsp;<A>G</A>
1238
of length at most <A>maxlng</A> which intersect non-trivially with the
1239
set&nbsp;<A>S</A>.
1240
In the second form a list of all orbits of the rcwa group&nbsp;<A>G</A>
1241
of length at most <A>maxlng</A> which intersect non-trivially with
1242
the set&nbsp;<A>S</A> and which, in terms of euclidean norm, do not
1243
exceed <A>maxn</A>.
1244
In the third form a list of all cycles of the rcwa permutation <A>g</A>
1245
of length at most&nbsp;<A>maxlng</A> which intersect non-trivially with
1246
the set&nbsp;<A>S</A>.
1247
In the fourth form a list of all cycles of the rcwa permutation <A>g</A>
1248
of length at most&nbsp;<A>maxlng</A> which intersect non-trivially with
1249
the set&nbsp;<A>S</A> and which, in terms of euclidean norm, do not
1250
exceed <A>maxn</A>.
1251
In the fifth form a list of all cycles of the rcwa permutation <A>g</A>
1252
of length at most <A>maxlng</A> which do not correspond to cycles
1253
consisting of residue classes.
1254
</Returns>
1255
<Description>
1256
The operation <Ref Oper="ShortOrbits"
1257
Label="for rcwa group, set of points and bound on length"/> recognizes
1258
an option <A>finite</A>. If this option is set, it is assumed that all
1259
orbits are finite, in order to speed up the computation. If furthermore
1260
<A>maxlng</A> is negative, a list of <E>all</E> orbits which intersect
1261
non-trivially with&nbsp;<A>S</A> is returned. <P/>
1262
1263
<Index Key="CyclesOnFiniteOrbit"><C>CyclesOnFiniteOrbit</C></Index>
1264
1265
There is an operation
1266
<C>CyclesOnFiniteOrbit(</C><A>G</A><C>,</C><A>g</A><C>,</C><A>n</A><C>)</C>
1267
which returns a list of all cycles of the rcwa permutation <A>g</A> on the
1268
orbit of the point <A>n</A> under the action of the rcwa group <A>G</A>.
1269
Here <A>g</A> is assumed to be an element of <A>G</A>, and the orbit
1270
of <A>n</A> is assumed to be finite.
1271
<Example>
1272
<![CDATA[
1273
gap> G := Group(ClassTransposition(1,4,2,4)*ClassTransposition(1,4,3,4),
1274
> ClassTransposition(3,9,6,18)*ClassTransposition(1,6,3,9));;
1275
gap> List(ShortOrbits(G,[-15..15],100),
1276
> orb->StructureDescription(Action(G,orb)));
1277
[ "A15", "A4", "1", "1", "C3", "1", "((C2 x C2 x C2) : C7) : C3", "1",
1278
"1", "C3", "A19" ]
1279
gap> ShortCycles(mKnot(7),[1..100],20);
1280
[ [ 1 ], [ 2 ], [ 3 ], [ 4 ], [ 5 ], [ 6 ], [ 7, 8 ], [ 9, 10 ],
1281
[ 11, 12 ], [ 13, 14, 16, 18, 20, 22, 19, 17, 15 ], [ 21, 24 ],
1282
[ 23, 26 ], [ 25, 28, 32, 36, 31, 27, 30, 34, 38, 33, 29 ],
1283
[ 35, 40 ], [ 37, 42, 48, 54, 47, 41, 46, 52, 45, 39, 44, 50, 43 ],
1284
[ 77, 88, 100, 114, 130, 148, 127, 109, 124, 107, 122, 105, 120, 103,
1285
89 ] ]
1286
gap> G := Group(List([[0,2,1,2],[0,5,4,5],[1,4,0,6]],ClassTransposition));;
1287
gap> CyclesOnFiniteOrbit(G,G.1*G.2,0);
1288
[ [ 0, 1, 4, 9, 8, 5 ], [ 6, 7 ], [ 10, 11, 14, 19, 18, 15 ], [ 12, 13 ] ]
1289
gap> List(CyclesOnFiniteOrbit(G,G.1*G.2*G.3*G.1*G.3*G.2,32),Length);
1290
[ 3148, 3148 ]
1291
]]>
1292
</Example>
1293
</Description>
1294
</ManSection>
1295
1296
<ManSection>
1297
<Heading>
1298
ShortResidueClassOrbits &amp; ShortResidueClassCycles
1299
</Heading>
1300
<Oper Name="ShortResidueClassOrbits" Arg="G, modulusbound, maxlng"
1301
Label="for rcwa group and bounds on modulus and length"/>
1302
<Oper Name="ShortResidueClassCycles" Arg="g, modulusbound, maxlng"
1303
Label="for rcwa permutation and bounds on modulus and length"/>
1304
<Returns>
1305
in the first form a list of all orbits of residue classes under the
1306
action of the rcwa group <A>G</A> which contain a residue class
1307
<M>r(m)</M> such that <M>m</M> divides <A>modulusbound</A> and
1308
which are not longer than <A>maxlng</A>.
1309
In the second form a list of all cycles of residue classes of the
1310
rcwa permutation&nbsp;<A>g</A> which contain a residue class
1311
<M>r(m)</M> such that <M>m</M> divides <A>modulusbound</A> and
1312
which are not longer than <A>maxlng</A>.
1313
</Returns>
1314
<Description>
1315
We are only talking about a <E>cycle</E> of residue classes of
1316
an rcwa permutation <M>g</M> if the restrictions of <M>g</M> to all
1317
contained residue classes are affine.
1318
Similarly we are only talking about an <E>orbit</E> of residue
1319
classes under the action of an rcwa group <M>G</M> if the
1320
restrictions of all elements of <M>G</M> to all residue classes
1321
in the orbit are affine. <P/>
1322
1323
The returned lists may contain additional cycles, resp., orbits,
1324
which do not contain a residue class <M>r(m)</M> such that <M>m</M>
1325
divides <A>modulusbound</A>, but which happen to be found without
1326
additional efforts.
1327
<Example>
1328
<![CDATA[
1329
gap> g := ClassTransposition(0,2,1,2)*ClassTransposition(0,4,1,6);
1330
<rcwa permutation of Z with modulus 12>
1331
gap> ShortResidueClassCycles(g,Mod(g)^2,20);
1332
[ [ 2(12), 3(12) ], [ 10(12), 11(12) ], [ 4(24), 5(24), 7(36), 6(36) ],
1333
[ 20(24), 21(24), 31(36), 30(36) ],
1334
[ 8(48), 9(48), 13(72), 19(108), 18(108), 12(72) ],
1335
[ 40(48), 41(48), 61(72), 91(108), 90(108), 60(72) ],
1336
[ 16(96), 17(96), 25(144), 37(216), 55(324), 54(324), 36(216), 24(144)
1337
],
1338
[ 80(96), 81(96), 121(144), 181(216), 271(324), 270(324), 180(216),
1339
120(144) ] ]
1340
gap> G := Group(List([[0,6,5,6],[1,4,4,6],[2,4,3,6]],ClassTransposition));
1341
<(0(6),5(6)),(1(4),4(6)),(2(4),3(6))>
1342
gap> ShortResidueClassOrbits(G,48,10);
1343
[ [ 7(12) ], [ 8(12) ], [ 1(24), 4(36) ], [ 2(24), 3(36) ],
1344
[ 12(24), 17(24), 28(36) ], [ 18(24), 23(24), 27(36) ],
1345
[ 37(48), 58(72), 87(108) ], [ 38(48), 57(72), 88(108) ],
1346
[ 0(48), 5(48), 10(72), 15(108) ], [ 6(48), 11(48), 9(72), 16(108) ] ]
1347
]]>
1348
</Example>
1349
</Description>
1350
</ManSection>
1351
1352
<ManSection>
1353
<Func Name="ComputeCycleLength"
1354
Arg="g, n" Label="for an rcwa permutation and a point"/>
1355
<Returns>
1356
a record containing the length, the largest point and the position of the
1357
largest point of the cycle of the rcwa permutation <A>g</A> which contains
1358
the point <A>n</A>, provided that this cycle is finite.
1359
</Returns>
1360
<Description>
1361
If the cycle is infinite, the function will run into an infinite loop
1362
unless the option <C>"abortat"</C> is set to the maximum number of iterates
1363
to be tried before aborting. Iterates are not stored, to save memory.
1364
The function interprets an option <C>"notify"</C>, which defaults to 10000;
1365
every <Q>notify</Q> iterations, the number of binary digits of the latest
1366
iterate is printed. This output can be suppressed by the option <C>quiet</C>.
1367
The function also interprets an option <C>"small"</C>, which may be set to
1368
a range within which small points are recorded and returned in a component
1369
<C>smallpoints</C>.
1370
<Example>
1371
<![CDATA[
1372
gap> g := Product(List([[0,5,3,5],[1,2,0,6],[2,4,3,6]],
1373
> ClassTransposition));
1374
<rcwa permutation of Z with modulus 180>
1375
gap> ComputeCycleLength(g,20:small:=[0..1000]);
1376
n = 20: after 10000 steps, the iterate has 1919 binary digits.
1377
n = 20: after 20000 steps, the iterate has 2908 binary digits.
1378
n = 20: after 30000 steps, the iterate has 1531 binary digits.
1379
n = 20: after 40000 steps, the iterate has 708 binary digits.
1380
rec( aborted := false, g := <rcwa permutation of Z with modulus 180>,
1381
length := 45961,
1382
maximum := 180479928411509527091314790144929480041473309862957394384783\
1383
0525935437431021442346166422201250935268553945158085769924448388724679753\
1384
5271669245363980744610119632280105994423399614803956244808653465492205657\
1385
8650363041608376587943180444494842094693691286183613056599672737336761093\
1386
3101035841077322874883200384115281051837032147150147712534199292886436789\
1387
7520389780289517825203780151058517520194926468391308525704499649905091899\
1388
9667529835495635671154681958992898010506577172313321500572646883756736685\
1389
0158653917532084531267455434808219032998691038943070902228427549279555530\
1390
6429870190316109419051531138721361826083376315737131067799731181096142797\
1391
4868525347003646887454985757711743327946232372385342293662007684758208408\
1392
8635715976464060647431260835037213863991037813998261883899050447111540742\
1393
5857187943077255493709629738212709349458790098815926920248565399938335540\
1394
8092502449690267365120996852, maxpos := 19825, n := 20,
1395
smallpoints := [ 20, 23, 66, 99, 294, 295, 298, 441, 447, 882, 890,
1396
893 ] )
1397
]]>
1398
</Example>
1399
</Description>
1400
</ManSection>
1401
1402
<ManSection>
1403
<Oper Name="CycleRepresentativesAndLengths" Arg="g, S"
1404
Label="for rcwa permutation and set of seed points"/>
1405
<Returns>
1406
a list of pairs (cycle representative, length of cycle) for all
1407
cycles of the rcwa permutation <A>g</A> which have a nontrivial
1408
intersection with the set <A>S</A>, where fixed points are omitted.
1409
</Returns>
1410
<Description>
1411
The rcwa permutation <A>g</A> is assumed to have only finite
1412
cycles. If <A>g</A> has an infinite cycle which intersects
1413
non-trivially with <A>S</A>, this may cause an infinite loop
1414
unless a cycle length limit is set via the option <C>abortat</C>.
1415
The output can be suppressed by the option <C>quiet</C>.
1416
<Example>
1417
<![CDATA[
1418
gap> g := ClassTransposition(0,2,1,2)*ClassTransposition(0,4,1,6);;
1419
gap> CycleRepresentativesAndLengths(g,[0..50]);
1420
[ [ 2, 2 ], [ 4, 4 ], [ 8, 6 ], [ 10, 2 ], [ 14, 2 ], [ 16, 8 ],
1421
[ 20, 4 ], [ 22, 2 ], [ 26, 2 ], [ 28, 4 ], [ 32, 10 ], [ 34, 2 ],
1422
[ 38, 2 ], [ 40, 6 ], [ 44, 4 ], [ 46, 2 ], [ 50, 2 ] ]
1423
gap> g := Product(List([[0,5,3,5],[1,2,0,6],[2,4,3,6]],
1424
> ClassTransposition));
1425
<rcwa permutation of Z with modulus 180>
1426
gap> CycleRepresentativesAndLengths(g,[0..100]:abortat:=100000);
1427
n = 20: after 10000 steps, the iterate has 1919 binary digits.
1428
n = 20: after 20000 steps, the iterate has 2908 binary digits.
1429
n = 20: after 30000 steps, the iterate has 1531 binary digits.
1430
n = 20: after 40000 steps, the iterate has 708 binary digits.
1431
n = 79: after 10000 steps, the iterate has 1679 binary digits.
1432
n = 100: after 10000 steps, the iterate has 712 binary digits.
1433
n = 100: after 20000 steps, the iterate has 2507 binary digits.
1434
n = 100: after 30000 steps, the iterate has 3311 binary digits.
1435
n = 100: after 40000 steps, the iterate has 3168 binary digits.
1436
n = 100: after 50000 steps, the iterate has 3947 binary digits.
1437
n = 100: after 60000 steps, the iterate has 4793 binary digits.
1438
n = 100: after 70000 steps, the iterate has 5325 binary digits.
1439
n = 100: after 80000 steps, the iterate has 6408 binary digits.
1440
n = 100: after 90000 steps, the iterate has 7265 binary digits.
1441
n = 100: after 100000 steps, the iterate has 7918 binary digits.
1442
[ [ 0, 7 ], [ 5, 3 ], [ 7, 7159 ], [ 11, 9 ], [ 19, 342 ],
1443
[ 20, 45961 ], [ 25, 3 ], [ 26, 21 ], [ 29, 2 ], [ 31, 3941 ],
1444
[ 34, 19 ], [ 37, 7 ], [ 40, 5 ], [ 41, 7 ], [ 46, 3 ], [ 49, 2 ],
1445
[ 59, 564 ], [ 61, 577 ], [ 65, 3 ], [ 67, 23 ], [ 71, 41 ],
1446
[ 79, 16984 ], [ 80, 5 ], [ 85, 3 ], [ 86, 3 ], [ 89, 2 ], [ 91, 9 ],
1447
[ 94, 1355 ], [ 97, 7 ], [ 100, fail ] ]
1448
]]>
1449
</Example>
1450
</Description>
1451
</ManSection>
1452
1453
Often one also wants to know which residue classes an rcwa mapping
1454
or an rcwa group fixes setwise:
1455
1456
<ManSection>
1457
<Oper Name="FixedResidueClasses" Arg="g, maxmod"
1458
Label="for rcwa mapping and bound on modulus"/>
1459
<Oper Name="FixedResidueClasses" Arg="G, maxmod"
1460
Label="for rcwa group and bound on modulus"/>
1461
<Returns>
1462
the set of residue classes with modulus greater than 1 and less
1463
than or equal to <A>maxmod</A> which the rcwa mapping <A>g</A>,
1464
respectively the rcwa group <A>G</A>, fixes setwise.
1465
</Returns>
1466
<Description>
1467
<Example>
1468
<![CDATA[
1469
gap> FixedResidueClasses(ClassTransposition(0,2,1,4),8);
1470
[ 2(3), 3(4), 4(5), 6(7), 3(8), 7(8) ]
1471
gap> FixedResidueClasses(Group(ClassTransposition(0,2,1,4),
1472
> ClassTransposition(0,3,1,3)),12);
1473
[ 2(3), 8(9), 11(12) ]
1474
]]>
1475
</Example>
1476
</Description>
1477
</ManSection>
1478
1479
Frequently one needs to compute balls of certain radius around points or
1480
group elements, be it to estimate the growth of a group, be it to see how
1481
an orbit looks like, be it to search for a group element with certain
1482
properties or be it for other purposes:
1483
1484
<ManSection>
1485
<Heading>
1486
Ball (for group, element and radius or group, point, radius and action)
1487
</Heading>
1488
<Meth Name ="Ball" Arg="G, g, r"
1489
Label="for group, element and radius"/>
1490
<Meth Name ="Ball" Arg="G, p, r, action"
1491
Label="for group, point, radius and action"/>
1492
<Meth Name ="Ball" Arg="G, p, r"
1493
Label="for group, point and radius"/>
1494
<Returns>
1495
the ball of radius&nbsp;<A>r</A> around the element&nbsp;<A>g</A> in
1496
the group&nbsp;<A>G</A>, respectively
1497
the ball of radius&nbsp;<A>r</A> around the point&nbsp;<A>p</A> under
1498
the action&nbsp;<A>action</A> of the group&nbsp;<A>G</A>, respectively
1499
the ball of radius&nbsp;<A>r</A> around the point&nbsp;<A>p</A> under
1500
the action&nbsp;<C>OnPoints</C> of the group&nbsp;<A>G</A>,
1501
</Returns>
1502
<Description>
1503
All balls are understood with respect to
1504
<C>GeneratorsOfGroup(<A>G</A>)</C>.
1505
As membership tests can be expensive, the former method does not check
1506
whether <A>g</A> is indeed an element of&nbsp;<A>G</A>.
1507
The methods require that element- / point comparisons are cheap.
1508
They are not only applicable to rcwa groups.
1509
If the option <A>Spheres</A> is set, the ball is split up and
1510
returned as a list of spheres. There is a related operation
1511
<C>RestrictedBall(<A>G</A>,<A>g</A>,<A>r</A>,<A>modulusbound</A>)</C>
1512
specifically for rcwa groups which computes only those elements of the
1513
ball whose moduli do not exceed <A>modulusbound</A>, and which can be
1514
reached from <A>g</A> without computing intermediate elements whose
1515
moduli do exceed <A>modulusbound</A>. The latter operation interprets
1516
an option <C>"boundaffineparts"</C>. -- If this option is set and the
1517
group <A>G</A> and the element <A>g</A> are in sparse representation,
1518
then <A>modulusbound</A> is actually taken to be a bound on the number
1519
of affine parts rather than a bound on the modulus.
1520
1521
<Index Key="RestrictedBall" Subkey="G, g, r, modulusbound">
1522
<C>RestrictedBall</C>
1523
</Index>
1524
1525
<Example>
1526
<![CDATA[
1527
gap> PSL2Z := Image(IsomorphismRcwaGroup(FreeProduct(CyclicGroup(2),
1528
> CyclicGroup(3))));;
1529
gap> List([1..10],k->Length(Ball(PSL2Z,[0,1],k,OnTuples)));
1530
[ 4, 8, 14, 22, 34, 50, 74, 106, 154, 218 ]
1531
gap> Ball(Group((1,2),(2,3),(3,4)),(),2:Spheres);
1532
[ [ () ], [ (3,4), (2,3), (1,2) ],
1533
[ (2,3,4), (2,4,3), (1,2)(3,4), (1,2,3), (1,3,2) ] ]
1534
gap> G := Group(List([[1,2,4,6],[1,3,2,6],[2,3,4,6]],ClassTransposition));;
1535
gap> B := RestrictedBall(G,One(G),20,36:Spheres);; # try replacing 36 by 72
1536
gap> List(B,Length);
1537
[ 1, 3, 6, 12, 4, 6, 6, 4, 4, 4, 6, 6, 3, 3, 2, 0, 0, 0, 0, 0, 0 ]
1538
]]>
1539
</Example>
1540
</Description>
1541
</ManSection>
1542
1543
It is possible to determine group elements which map a given tuple of elements
1544
of the underlying ring to a given other tuple, if such elements exist:
1545
1546
<ManSection>
1547
<Meth Name="RepresentativeAction" Arg="G, source, destination, action"
1548
Label="G, source, destination, action"/>
1549
<Returns>
1550
an element of <A>G</A> which maps <A>source</A>
1551
to&nbsp;<A>destination</A> under the action given by&nbsp;<A>action</A>.
1552
</Returns>
1553
<Description>
1554
If an element satisfying this condition does not exist, this method
1555
either returns <C>fail</C> or runs into an infinite loop.
1556
The problem whether <A>source</A> and <A>destination</A> lie in
1557
the same orbit under the action <A>action</A> of&nbsp;<A>G</A> is hard,
1558
and in its general form most likely computationally undecidable. <P/>
1559
1560
<Index Key="RepresentativeActionPreImage"
1561
Subkey="G, source, destination, action, F">
1562
<C>RepresentativeActionPreImage</C>
1563
</Index>
1564
1565
In cases where rather a word in the generators of&nbsp;<A>G</A> than
1566
the actual group element is needed, one should use the operation
1567
<C>RepresentativeActionPreImage</C> instead. This operation takes
1568
five arguments. The first four are the same as those of
1569
<C>RepresentativeAction</C>, and the fifth is a free group whose
1570
generators are to be used as letters of the returned word. Note that
1571
<C>RepresentativeAction</C> calls <C>RepresentativeActionPreImage</C>
1572
and evaluates the returned word. The evaluation of the word can very
1573
well take most of the time if <A>G</A> is wild and coefficient
1574
explosion occurs. <P/>
1575
1576
The algorithm is based on computing balls of increasing radius
1577
around <A>source</A> and <A>destination</A> until they intersect
1578
non-trivially.
1579
<Example>
1580
<![CDATA[
1581
gap> a := RcwaMapping([[2,0,3],[4,-1,3],[4,1,3]]);; SetName(a,"a");
1582
gap> b := ClassShift(1,4:Name:="b");; G := Group(a,b);;
1583
gap> elm := RepresentativeAction(G,[7,4,9],[4,5,13],OnTuples);;
1584
gap> Display(elm);
1585
1586
Rcwa permutation of Z with modulus 12
1587
1588
/
1589
| n-3 if n in 1(6) U 10(12)
1590
| n+4 if n in 5(12) U 9(12)
1591
n |-> < n+1 if n in 4(12)
1592
| n if n in 0(6) U 2(6) U 3(12) U 11(12)
1593
|
1594
\
1595
1596
gap> List([7,4,9],n->n^elm);
1597
[ 4, 5, 13 ]
1598
gap> elm := RepresentativeAction(G,[6,-3,8],[-9,4,11],OnPoints);;
1599
gap> Display(elm);
1600
1601
Rcwa permutation of Z with modulus 12
1602
1603
/
1604
| 2n/3 if n in 0(6) U 3(12)
1605
| (4n+1)/3 if n in 2(6) U 11(12)
1606
| (4n-1)/3 if n in 4(6) U 7(12)
1607
n |-> < (2n-8)/3 if n in 1(12)
1608
| (4n-17)/3 if n in 5(12)
1609
| (4n-15)/3 if n in 9(12)
1610
|
1611
\
1612
1613
gap> [6,-3,8]^elm; List([6,-3,8],n->n^elm); # `OnPoints' allows reordering
1614
[ -9, 4, 11 ]
1615
[ 4, -9, 11 ]
1616
gap> F := FreeGroup("a","b");; phi := EpimorphismByGenerators(F,G);;
1617
gap> w := RepresentativeActionPreImage(G,[10,-4,9,5],[4,5,13,-8],
1618
> OnTuples,F);
1619
a*b^-1*a^-1*(b^-1*a)^2*b*a*b^-2*a*b*a^-1*b
1620
gap> elm := w^phi;
1621
<rcwa permutation of Z with modulus 324>
1622
gap> List([10,-4,9,5],n->n^elm);
1623
[ 4, 5, 13, -8 ]
1624
]]>
1625
</Example>
1626
</Description>
1627
</ManSection>
1628
1629
Sometimes an rcwa group fixes a certain partition of the underlying ring
1630
into unions of residue classes. If this happens, then any orbit is clearly
1631
a subset of exactly one of these parts. Further, such a partition often
1632
gives rise to proper quotients of the group:
1633
1634
<ManSection>
1635
<Oper Name ="ProjectionsToInvariantUnionsOfResidueClasses"
1636
Arg="G, m" Label="for rcwa group and modulus"/>
1637
<Returns>
1638
the projections of the rcwa group&nbsp;<A>G</A> to the unions of
1639
residue classes (mod&nbsp;<A>m</A>) which it fixes setwise.
1640
</Returns>
1641
<Description>
1642
The corresponding partition of a set of representatives for
1643
the residue classes (mod&nbsp;<A>m</A>) can be obtained by the
1644
operation <C>OrbitsModulo(<A>G</A>,<A>m</A>)</C>.
1645
<Index Key="OrbitsModulo" Subkey="for an rcwa group and a modulus">
1646
<C>OrbitsModulo</C>
1647
</Index>
1648
<Example>
1649
<![CDATA[
1650
gap> G := Group(ClassTransposition(0,2,1,2),ClassShift(3,4));;
1651
gap> ProjectionsToInvariantUnionsOfResidueClasses(G,4);
1652
[ [ ( 0(2), 1(2) ), ClassShift( 3(4) ) ] ->
1653
[ ( 0(4), 1(4) ), IdentityMapping( Integers ) ],
1654
[ ( 0(2), 1(2) ), ClassShift( 3(4) ) ] ->
1655
[ ( 2(4), 3(4) ), <rcwa permutation of Z with modulus 4> ] ]
1656
gap> List(last,phi->Support(Image(phi)));
1657
[ 0(4) U 1(4), 2(4) U 3(4) ]
1658
]]>
1659
</Example>
1660
</Description>
1661
</ManSection>
1662
1663
Given two partitions of the underlying ring into the same number of
1664
unions of residue classes, there is always an rcwa permutation which
1665
maps the one to the other:
1666
1667
<ManSection>
1668
<Meth Name="RepresentativeAction" Arg="RCWA(R), P1, P2"
1669
Label="for RCWA(R) and 2 partitions of R into residue classes"/>
1670
<Returns>
1671
an element of RCWA(<M>R</M>) which maps the partition&nbsp;<A>P1</A>
1672
to&nbsp;<A>P2</A>.
1673
</Returns>
1674
<Description>
1675
The arguments <A>P1</A> and <A>P2</A> must be partitions of the
1676
underlying ring <M>R</M> into the same number of unions of residue
1677
classes.
1678
The method for <M>R = &ZZ;</M> recognizes the option <C>IsTame</C>,
1679
which can be used to demand a tame result. If this option is set and
1680
there is no tame rcwa permutation which maps <A>P1</A> to&nbsp;<A>P2</A>,
1681
the method runs into an infinite loop. This happens if the condition
1682
in Theorem&nbsp;2.8.9 in&nbsp;<Cite Key="Kohl05"/> is not satisfied.
1683
If the option <C>IsTame</C> is not set and the partitions <A>P1</A>
1684
and <A>P2</A> both consist entirely of single residue classes, then
1685
the returned mapping is affine on any residue class in&nbsp;<A>P1</A>.
1686
<Example>
1687
<![CDATA[
1688
gap> P1 := AllResidueClassesModulo(3);
1689
[ 0(3), 1(3), 2(3) ]
1690
gap> P2 := List([[0,2],[1,4],[3,4]],ResidueClass);
1691
[ 0(2), 1(4), 3(4) ]
1692
gap> elm := RepresentativeAction(RCWA(Integers),P1,P2);
1693
<rcwa permutation of Z with modulus 3>
1694
gap> P1^elm = P2;
1695
true
1696
gap> IsTame(elm);
1697
false
1698
gap> elm := RepresentativeAction(RCWA(Integers),P1,P2:IsTame);
1699
<tame rcwa permutation of Z with modulus 24>
1700
gap> P1^elm = P2;
1701
true
1702
gap> elm := RepresentativeAction(RCWA(Integers),
1703
> [ResidueClass(1,3),
1704
> ResidueClassUnion(Integers,3,[0,2])],
1705
> [ResidueClassUnion(Integers,5,[2,4]),
1706
> ResidueClassUnion(Integers,5,[0,1,3])]);
1707
<rcwa permutation of Z with modulus 6>
1708
gap> [ResidueClass(1,3),ResidueClassUnion(Integers,3,[0,2])]^elm;
1709
[ 2(5) U 4(5), Z \ 2(5) U 4(5) ]
1710
]]>
1711
</Example>
1712
</Description>
1713
</ManSection>
1714
1715
<ManSection>
1716
<Oper Name="CollatzLikeMappingByOrbitTree" Arg="G, n, min_r, max_r"
1717
Label="for rcwa group, root point and range of radii"/>
1718
<Returns>
1719
either an rcwa mapping <M>f</M> which maps the sphere of radius
1720
<M>r</M> about <A>n</A> under the action of <A>G</A> into the sphere
1721
of radius <M>r-1</M> about <A>n</A> for every <M>r</M> ranging from
1722
<A>min_r</A> to <A>max_r</A>, or <C>fail</C>.
1723
</Returns>
1724
<Description>
1725
Obviously not for every rcwa group and every root point a mapping
1726
<M>f</M> with these properties exists, and if it exists, it
1727
usually depends on the choice of generators of the group.
1728
<Example>
1729
<![CDATA[
1730
gap> G := Group(ClassTransposition(0,2,1,2),ClassTransposition(1,2,2,4),
1731
> ClassTransposition(1,4,2,6));;
1732
gap> G := SparseRep(G);;
1733
gap> f := CollatzLikeMappingByOrbitTree(G,0,4,10);
1734
<rcwa mapping of Z with modulus 4 and 4 affine parts>
1735
gap> Display(f);
1736
1737
Rcwa mapping of Z with modulus 4 and 4 affine parts
1738
1739
/
1740
| n+1 if n in 0(4)
1741
| (3n+1)/2 if n in 1(4)
1742
n |-> < n/2 if n in 2(4)
1743
| n-1 if n in 3(4)
1744
|
1745
\
1746
1747
gap> B := Ball(G,0,15:Spheres);
1748
[ [ 0 ], [ 1 ], [ 2 ], [ 3 ], [ 6 ], [ 7 ], [ 14 ], [ 9, 15 ], [ 8, 18, 30 ],
1749
[ 5, 19, 31 ], [ 4, 10, 38, 62 ], [ 11, 25, 39, 41, 63 ],
1750
[ 22, 24, 40, 50, 78, 82, 126 ], [ 23, 33, 51, 79, 83, 127 ],
1751
[ 32, 46, 66, 102, 158, 166, 254 ],
1752
[ 21, 47, 67, 103, 105, 159, 167, 169, 255 ] ]
1753
gap> List([3..15],i->IsSubset(B[i-1],B[i]^f));
1754
[ true, true, true, true, true, true, true, true, true, true, true, true,
1755
true ]
1756
gap> Trajectory(f,52,[0,1]);
1757
[ 52, 53, 80, 81, 122, 61, 92, 93, 140, 141, 212, 213, 320, 321, 482, 241,
1758
362, 181, 272, 273, 410, 205, 308, 309, 464, 465, 698, 349, 524, 525, 788,
1759
789, 1184, 1185, 1778, 889, 1334, 667, 666, 333, 500, 501, 752, 753, 1130,
1760
565, 848, 849, 1274, 637, 956, 957, 1436, 1437, 2156, 2157, 3236, 3237,
1761
4856, 4857, 7286, 3643, 3642, 1821, 2732, 2733, 4100, 4101, 6152, 6153,
1762
9230, 4615, 4614, 2307, 2306, 1153, 1730, 865, 1298, 649, 974, 487, 486,
1763
243, 242, 121, 182, 91, 90, 45, 68, 69, 104, 105, 158, 79, 78, 39, 38, 19,
1764
18, 9, 14, 7, 6, 3, 2, 1 ]
1765
]]>
1766
</Example>
1767
</Description>
1768
</ManSection>
1769
1770
</Section>
1771
1772
<!-- #################################################################### -->
1773
1774
<Section Label="sec:MethodsForTameGroups">
1775
<Heading>
1776
Special attributes of tame residue-class-wise affine groups
1777
</Heading>
1778
1779
There are a couple of attributes which a priori make only sense for tame
1780
rcwa groups. With their help, various structural information about a given
1781
such group can be obtained.
1782
We have already seen above that there are for example methods for
1783
<C>IsSolvable</C>, <C>IsPerfect</C> and <C>DerivedSubgroup</C> available
1784
for tame rcwa groups, while testing wild groups for solvability or
1785
perfectness is currently not always feasible. The purpose of this section
1786
is to describe the specific attributes of tame groups which are needed for
1787
these computations.
1788
1789
<ManSection>
1790
<Heading>
1791
RespectedPartition (of a tame rcwa group or -permutation)
1792
</Heading>
1793
<Attr Name="RespectedPartition"
1794
Arg="G" Label="of a tame rcwa group"/>
1795
<Attr Name="RespectedPartition"
1796
Arg="g" Label="of a tame rcwa permutation"/>
1797
<Returns>
1798
a shortest and coarsest possible respected partition
1799
of the rcwa group <A>G</A> / of the rcwa permutation&nbsp;<A>g</A>.
1800
</Returns>
1801
<Description>
1802
A tame element <M>g</M>&nbsp;<M>\in</M>&nbsp;RCWA(<M>R</M>) permutes a
1803
partition of&nbsp;<M>R</M> into finitely many residue classes on all of
1804
which it is affine.
1805
Given a tame group <M>G</M>&nbsp;<M>&lt;</M>&nbsp;RCWA(<M>R</M>),
1806
there is a common such partition for all elements of&nbsp;<M>G</M>.
1807
We call the mentioned partitions <E>respected partitions</E>
1808
of&nbsp;<M>g</M> or&nbsp;<M>G</M>, respectively. <P/>
1809
1810
An rcwa group or an rcwa permutation has a respected partition
1811
if and only if it is tame. This holds either by definition or by
1812
Theorem&nbsp;2.5.8 in&nbsp;<Cite Key="Kohl05"/>, depending on how
1813
one introduces the notion of tameness. <P/>
1814
1815
<Index Key="RespectsPartition" Subkey="for an rcwa group">
1816
<C>RespectsPartition</C>
1817
</Index>
1818
<Index Key="RespectsPartition" Subkey="for an rcwa permutation">
1819
<C>RespectsPartition</C>
1820
</Index>
1821
There is an operation <C>RespectsPartition(<A>G</A>,<A>P</A>)</C> /
1822
<C>RespectsPartition(<A>g</A>,<A>P</A>)</C>, which tests whether
1823
<A>G</A> or&nbsp;<A>g</A> respects a given partition&nbsp;<A>P</A>.
1824
The permutation induced by <A>g</A> on&nbsp;<C>P</C> can be computed
1825
efficiently by <C>PermutationOpNC(<A>g</A>,P,OnPoints)</C>.
1826
<Index Key="PermutationOpNC" Subkey="g, P, OnPoints">
1827
<C>PermutationOpNC</C>
1828
</Index>
1829
<Example>
1830
<![CDATA[
1831
gap> G := Group(ClassTransposition(0,4,1,6),ClassShift(0,2));
1832
<rcwa group over Z with 2 generators>
1833
gap> IsTame(G);
1834
true
1835
gap> Size(G);
1836
infinity
1837
gap> P := RespectedPartition(G);
1838
[ 0(4), 2(4), 1(6), 3(6), 5(6) ]
1839
]]>
1840
</Example>
1841
</Description>
1842
</ManSection>
1843
1844
<ManSection>
1845
<Heading>
1846
ActionOnRespectedPartition &amp; KernelOfActionOnRespectedPartition
1847
</Heading>
1848
<Attr Name="ActionOnRespectedPartition"
1849
Arg="G" Label="for a tame rcwa group"/>
1850
<Attr Name="KernelOfActionOnRespectedPartition"
1851
Arg="G" Label="for a tame rcwa group"/>
1852
<Attr Name="RankOfKernelOfActionOnRespectedPartition"
1853
Arg="G" Label="for a tame rcwa group"/>
1854
<Returns>
1855
the action of the tame rcwa group&nbsp;<A>G</A> on
1856
<C>RespectedPartition(<A>G</A>)</C>, the kernel of
1857
this action or the rank of the latter, respectively.
1858
</Returns>
1859
<Description>
1860
The method for <C>KernelOfActionOnRespectedPartition</C> uses the
1861
package <Package>Polycyclic</Package>&nbsp;<Cite Key="Polycyclic"/>.
1862
1863
The rank of the largest free abelian subgroup of the kernel of the
1864
action of&nbsp;<A>G</A> on its stored respected partition is
1865
<C>RankOfKernelOfActionOnRespectedPartition(<A>G</A>)</C>.
1866
<Example>
1867
<![CDATA[
1868
gap> G := Group(ClassTransposition(0,4,1,6),ClassShift(0,2));;
1869
gap> H := ActionOnRespectedPartition(G);
1870
Group([ (1,3), (1,2) ])
1871
gap> H = Action(G,P);
1872
true
1873
gap> Size(H);
1874
6
1875
gap> K := KernelOfActionOnRespectedPartition(G);
1876
<rcwa group over Z with 3 generators>
1877
gap> RankOfKernelOfActionOnRespectedPartition(G);
1878
3
1879
gap> Index(G,K);
1880
6
1881
gap> List(GeneratorsOfGroup(K),Factorization);
1882
[ [ ClassShift( 0(4) ) ], [ ClassShift( 2(4) ) ], [ ClassShift( 1(6) ) ] ]
1883
gap> Image(IsomorphismPcpGroup(K));
1884
Pcp-group with orders [ 0, 0, 0 ]
1885
]]>
1886
</Example>
1887
</Description>
1888
</ManSection>
1889
1890
Let <M>G</M> be a tame rcwa group over&nbsp;&ZZ;, let <M>\mathcal{P}</M>
1891
be a respected partition of&nbsp;<M>G</M> and put <M>m := |\mathcal{P}|</M>.
1892
Then there is an rcwa permutation <M>g</M> which maps <M>\mathcal{P}</M>
1893
to the partition of&nbsp;&ZZ; into the residue classes (mod&nbsp;<M>m</M>),
1894
and the conjugate <M>G^g</M> of&nbsp;<M>G</M> under such a permutation
1895
is integral (cf. <Cite Key="Kohl05"/>, Theorem&nbsp;2.5.14). <P/>
1896
1897
<Index Key="IntegralConjugate" Subkey="of a tame rcwa group">
1898
<C>IntegralConjugate</C>
1899
</Index>
1900
<Index Key="IntegralConjugate" Subkey="of a tame rcwa permutation">
1901
<C>IntegralConjugate</C>
1902
</Index>
1903
<Index Key="IntegralizingConjugator" Subkey="of a tame rcwa group">
1904
<C>IntegralizingConjugator</C>
1905
</Index>
1906
<Index Key="IntegralizingConjugator" Subkey="of a tame rcwa permutation">
1907
<C>IntegralizingConjugator</C>
1908
</Index>
1909
1910
The conjugate <M>G^g</M> can be determined by the operation
1911
<C>IntegralConjugate</C>, and the conjugating permutation&nbsp;<M>g</M>
1912
can be determined by the operation <C>IntegralizingConjugator</C>.
1913
Both operations are applicable to rcwa permutations as well.
1914
Note that a tame rcwa group does not determine its integral conjugate
1915
uniquely.
1916
1917
<Example>
1918
<![CDATA[
1919
gap> G := Group(ClassTransposition(0,4,1,6),ClassShift(0,2));;
1920
gap> G^IntegralizingConjugator(G) = IntegralConjugate(G);
1921
true
1922
gap> RespectedPartition(G);
1923
[ 0(4), 2(4), 1(6), 3(6), 5(6) ]
1924
gap> RespectedPartition(G)^IntegralizingConjugator(G);
1925
[ 0(5), 1(5), 2(5), 3(5), 4(5) ]
1926
gap> last = RespectedPartition(IntegralConjugate(G));
1927
true
1928
]]>
1929
</Example>
1930
1931
</Section>
1932
1933
<!-- #################################################################### -->
1934
1935
<Section Label="sec:Random">
1936
<Heading>Generating pseudo-random elements of RCWA(R) and CT(R)</Heading>
1937
1938
<Index Key="Random" Subkey="RCWA(R)"><C>Random</C></Index>
1939
<Index Key="Random" Subkey="CT(R)"><C>Random</C></Index>
1940
There are methods for the operation <C>Random</C> for RCWA(<M>R</M>)
1941
and CT(<M>R</M>). These methods are designed to be suitable for generating
1942
interesting examples. No particular distribution is guaranteed.
1943
1944
<Log>
1945
<![CDATA[
1946
gap> elm := Random(RCWA(Integers));;
1947
gap> Display(elm);
1948
1949
Rcwa permutation of Z with modulus 180
1950
1951
/
1952
| 6n+12 if n in 2(10) U 4(10) U 6(10) U 8(10)
1953
| 3n+3 if n in 1(20) U 5(20) U 9(20) U 17(20)
1954
| 6n+10 if n in 0(10)
1955
| (n+1)/2 if n in 15(60) U 27(60) U 39(60) U 51(60)
1956
| (n+7)/2 if n in 19(60) U 31(60) U 43(60) U 55(60)
1957
| 3n+1 if n in 13(20)
1958
| (-n+17)/6 if n in 23(180) U 35(180) U 59(180) U 71(180) U
1959
n |-> < 95(180) U 131(180) U 143(180) U 179(180)
1960
| (-n-1)/6 if n in 11(180) U 47(180) U 83(180) U 155(180)
1961
| (-n+7)/2 if n in 3(60)
1962
| (n+3)/2 if n in 7(60)
1963
| (n-17)/6 if n in 107(180)
1964
| (-n+11)/6 if n in 119(180)
1965
| (-n+29)/6 if n in 167(180)
1966
|
1967
\
1968
]]>
1969
</Log>
1970
1971
The elements which are returned by this method are obtained by
1972
multiplying class shifts (see <Ref Func="ClassShift" Label="r, m"/>),
1973
class reflections (see <Ref Func="ClassReflection" Label="r, m"/>) and
1974
class transpositions (see <Ref Func="ClassTransposition"
1975
Label="r1, m1, r2, m2"/>).
1976
These factors can be retrieved by factoring:
1977
1978
<Log>
1979
<![CDATA[
1980
gap> Factorization(elm);
1981
[ ClassTransposition(0,2,3,4), ClassTransposition(1,2,4,6), ClassShift(0,2),
1982
ClassShift(1,3), ClassReflection(2,5), ClassReflection(1,3),
1983
ClassReflection(1,2) ]
1984
]]>
1985
</Log>
1986
1987
</Section>
1988
1989
<!-- #################################################################### -->
1990
1991
<Section Label="sec:CategoriesOfRcwaGroups">
1992
<Heading>The categories of residue-class-wise affine groups</Heading>
1993
1994
<ManSection>
1995
<Filt Name="IsRcwaGroup" Arg="G"/>
1996
<Filt Name="IsRcwaGroupOverZ" Arg="G"/>
1997
<Filt Name="IsRcwaGroupOverZ_pi" Arg="G"/>
1998
<Filt Name="IsRcwaGroupOverGFqx" Arg="G"/>
1999
<Returns>
2000
<C>true</C> if <A>G</A> is an rcwa group,
2001
an rcwa group over the ring of integers,
2002
an rcwa group over a semilocalization of the ring of integers or
2003
an rcwa group over a polynomial ring in one variable over a finite field,
2004
respectively, and <C>false</C> otherwise.
2005
</Returns>
2006
<Description>
2007
2008
<Index Key="IsRcwaGroupOverZOrZ_pi">
2009
<C>IsRcwaGroupOverZOrZ&uscore;pi</C>
2010
</Index>
2011
2012
Often the same methods can be used for rcwa groups over the ring of
2013
integers and over its semilocalizations. For this reason there is
2014
a category <C>IsRcwaGroupOverZOrZ&uscore;pi</C> which is the union of
2015
<C>IsRcwaGroupOverZ</C> and <C>IsRcwaGroupOverZ&uscore;pi</C>. <P/>
2016
2017
<Index Key="IsNaturalRCWA"><C>IsNaturalRCWA</C></Index>
2018
<Index Key="IsNaturalCT"><C>IsNaturalCT</C></Index>
2019
2020
To allow distinguishing the groups RCWA(<M>R</M>) and CT(<M>R</M>) from
2021
others, they have the characteristic property <C>IsNaturalRCWA</C> or
2022
<C>IsNaturalCT</C>, respectively.
2023
2024
</Description>
2025
</ManSection>
2026
2027
</Section>
2028
2029
<!-- #################################################################### -->
2030
2031
</Chapter>
2032
2033
<!-- #################################################################### -->
2034
2035