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

610986 views
1
<!-- #################################################################### -->
2
<!-- ## ## -->
3
<!-- ## examples.xml RCWA documentation Stefan Kohl ## -->
4
<!-- ## ## -->
5
<!-- #################################################################### -->
6
7
<Chapter Label="ch:Examples"><Heading>Examples</Heading>
8
9
<Ignore Remark="settings for the example tester">
10
<Example>
11
<![CDATA[
12
gap> SizeScreen([75,24]);;
13
gap> SetAssertionLevel(0);
14
]]>
15
</Example>
16
</Ignore>
17
18
This chapter discusses a number of examples of rcwa mappings
19
and -groups in detail. All of them show different aspects of the package,
20
and the order in which they appear is entirely arbitrary. In particular
21
they are not ordered by degree of difficulty or interest. <P/>
22
23
<Index Key="LoadRCWAExamples"><C>LoadRCWAExamples</C></Index>
24
<Index Key="AssignGlobals"><C>AssignGlobals</C></Index>
25
26
The rcwa mappings, rcwa groups and other objects defined in this chapter can
27
be found in the file <F>pkg/rcwa/examples/examples.g</F>. This file can be
28
read into the current &GAP; session by the function
29
<Ref Func="LoadRCWAExamples"/> which takes no arguments and returns the name
30
of a variable which the record containing the examples got assigned to.
31
The global variable assignments made in a section of this chapter can be
32
made by applying the function <C>AssignGlobals</C> to the respective
33
component of the examples record. The component names are given at the end
34
of the corresponding sections. <P/>
35
36
The discussions of the examples are typically far from being exhaustive.
37
It is quite likely that in many instances by just a few little modifications
38
or additional easy commands you can find out interesting things yourself
39
-- have fun!
40
41
<!-- #################################################################### -->
42
43
<Section Label="sec:ThompsonsGroupV">
44
<Heading>
45
Thompson's group V
46
</Heading>
47
48
Thompson's group V, also known as Higman-Thompson group, is a finitely
49
presented infinite simple group. This group has been found by Graham Higman,
50
cf.&nbsp;<Cite Key="Higman74"/>. We show that the group
51
52
<Example>
53
<![CDATA[
54
gap> G := Group(List([[0,2,1,4],[0,4,1,4],[1,4,2,4],[2,4,3,4]],
55
> ClassTransposition));
56
<(0(2),1(4)),(0(4),1(4)),(1(4),2(4)),(2(4),3(4))>
57
]]>
58
</Example>
59
60
is isomorphic to Thompson's group V.
61
This isomorphism has been pointed out by John P. McDermott.
62
We take a slightly different set of generators:
63
64
<Example>
65
<![CDATA[
66
gap> k := ClassTransposition(0,2,1,2);;
67
gap> l := ClassTransposition(1,2,2,4);;
68
gap> m := ClassTransposition(0,2,1,4);;
69
gap> n := ClassTransposition(1,4,2,4);;
70
gap> H := Group(k,l,m,n);
71
<(0(2),1(2)),(1(2),2(4)),(0(2),1(4)),(1(4),2(4))>
72
gap> G = H; # k, l, m and n generate G as well
73
true
74
]]>
75
</Example>
76
77
Now we verify that our four generators satisfy the relations given on
78
page&nbsp;50 in&nbsp;<Cite Key="Higman74"/>, when we read <C>k</C>
79
as&nbsp;<M>\kappa</M>, <C>l</C> as&nbsp;<M>\lambda</M>, <C>m</C>
80
as&nbsp;<M>\mu</M> and <C>n</C> as&nbsp;<M>\nu</M>:
81
82
<Example>
83
<![CDATA[
84
gap> HigmanThompsonRels :=
85
> [ k^2, l^2, m^2, n^2, # (1) in Higman's book
86
> l*k*m*k*l*n*k*n*m*k*l*k*m, # (2) "
87
> k*n*l*k*m*n*k*l*n*m*n*l*n*m, # (3) "
88
> (l*k*m*k*l*n)^3, (m*k*l*k*m*n)^3, # (4) "
89
> (l*n*m)^2*k*(m*n*l)^2*k, # (5) "
90
> (l*n*m*n)^5, # (6) "
91
> (l*k*n*k*l*n)^3*k*n*k*(m*k*n*k*m*n)^3*k*n*k*n,# (7) "
92
> ((l*k*m*n)^2*(m*k*l*n)^2)^3, # (8) "
93
> (l*n*l*k*m*k*m*n*l*n*m*k*m*k)^4, # (9) "
94
> (m*n*m*k*l*k*l*n*m*n*l*k*l*k)^4, #(10) "
95
> (l*m*k*l*k*m*l*k*n*k)^2, #(11) "
96
> (m*l*k*m*k*l*m*k*n*k)^2 ]; #(12) "
97
[ IdentityMapping( Integers ), IdentityMapping( Integers ),
98
IdentityMapping( Integers ), IdentityMapping( Integers ),
99
IdentityMapping( Integers ), IdentityMapping( Integers ),
100
IdentityMapping( Integers ), IdentityMapping( Integers ),
101
IdentityMapping( Integers ), IdentityMapping( Integers ),
102
IdentityMapping( Integers ), IdentityMapping( Integers ),
103
IdentityMapping( Integers ), IdentityMapping( Integers ),
104
IdentityMapping( Integers ), IdentityMapping( Integers ) ]
105
]]>
106
</Example>
107
108
We conclude that our group is an homomorphic image of Thompson's group V.
109
But since Thompson's group V is simple and our group is not trivial,
110
this means indeed that the two groups are isomorphic. <P/>
111
112
In fact it is straightforward to show that <C>G</C> is the group
113
<C>CT([2],Integers)</C> which is generated by the set of all
114
class transpositions which interchange residue classes modulo powers
115
of&nbsp;2. First we check that <C>G</C> contains all 11 class
116
transpositions which interchange residue classes modulo 2 or&nbsp;4:
117
118
<Example>
119
<![CDATA[
120
gap> S := Filtered(List(ClassPairs(4),ClassTransposition),
121
> ct->Mod(ct) in [2,4]);
122
[ ( 0(2), 1(2) ), ( 0(2), 1(4) ), ( 0(2), 3(4) ), ( 0(4), 1(4) ),
123
( 0(4), 2(4) ), ( 0(4), 3(4) ), ( 1(2), 0(4) ), ( 1(2), 2(4) ),
124
( 1(4), 2(4) ), ( 1(4), 3(4) ), ( 2(4), 3(4) ) ]
125
gap> IsSubset(G,S);
126
true
127
]]>
128
</Example>
129
130
Then we give a function which takes a class transposition
131
<M>\tau \in {\rm CT}_\emptyset(&ZZ;)</M>, and which returns
132
a factorization of an element <M>\gamma</M> satisfying
133
<M>\tau^\gamma \in S</M> into <M>g_1 := \tau_{0(2),1(4)} \in S</M>,
134
<M>g_2 := \tau_{0(2),3(4)} \in S</M>, <M>g_3 := \tau_{1(2),0(4)} \in S</M>,
135
<M>g_4 := \tau_{1(2),2(4)} \in S</M>, <M>h_1 := \tau_{0(4),1(4)} \in S</M>
136
and <M>h_2 := \tau_{1(4),2(4)} \in S</M>:
137
138
<Listing Type="GAP code">
139
<![CDATA[
140
ReducingConjugator := function ( tau )
141
142
local w, F, g1, g2, g3, g4, h1, h2, h, cls, cl, r;
143
144
g1 := ClassTransposition(0,2,1,4); h1 := ClassTransposition(0,4,1,4);
145
g2 := ClassTransposition(0,2,3,4); h2 := ClassTransposition(1,4,2,4);
146
g3 := ClassTransposition(1,2,0,4);
147
g4 := ClassTransposition(1,2,2,4);
148
149
F := FreeGroup("g1","g2","g3","g4","h1","h2");
150
151
w := One(F); if Mod(tau) <= 4 then return w; fi;
152
153
# Before we can reduce the moduli of the interchanged residue classes,
154
# we must make sure that both of them have at least modulus 4.
155
cls := TransposedClasses(tau);
156
if Mod(cls[1]) = 2 then
157
if Residue(cls[1]) = 0 then
158
if Residue(cls[2]) mod 4 = 1 then tau := tau^g2; w := w * F.2;
159
else tau := tau^g1; w := w * F.1; fi;
160
else
161
if Residue(cls[2]) mod 4 = 0 then tau := tau^g4; w := w * F.4;
162
else tau := tau^g3; w := w * F.3; fi;
163
fi;
164
fi;
165
166
while Mod(tau) > 4 do # Now we can successively reduce the moduli.
167
if not ForAny(AllResidueClassesModulo(2),
168
cl -> IsEmpty(Intersection(cl,Support(tau))))
169
then
170
cls := TransposedClasses(tau);
171
h := Filtered([h1,h2],
172
hi->Length(Filtered(cls,cl->IsSubset(Support(hi),cl)))=1);
173
h := h[1]; tau := tau^h;
174
if h = h1 then w := w * F.5; else w := w * F.6; fi;
175
fi;
176
cl := TransposedClasses(tau)[2]; # class with larger modulus
177
r := Residue(cl);
178
if r mod 4 = 1 then tau := tau^g1; w := w * F.1;
179
elif r mod 4 = 3 then tau := tau^g2; w := w * F.2;
180
elif r mod 4 = 0 then tau := tau^g3; w := w * F.3;
181
elif r mod 4 = 2 then tau := tau^g4; w := w * F.4; fi;
182
od;
183
184
return w;
185
end;
186
]]>
187
</Listing>
188
189
After assigning <C>g1</C>, <C>g2</C>, <C>g3</C>, <C>g4</C>, <C>h1</C>
190
and&nbsp;<C>h2</C> appropriately, we obtain for example:
191
192
<Listing Type="Example">
193
<![CDATA[
194
gap> ReducingConjugator(ClassTransposition(3,16,34,256));
195
h2*g1*h1*g1*h1*g1*h1*g1*h2*g2*h2*g4*h2*g4*h2*g3
196
gap> gamma := h2*g1*h1*g1*h1*g1*h1*g1*h2*g2*h2*g4*h2*g4*h2*g3;
197
<rcwa permutation of Z with modulus 256>
198
gap> ct := ClassTransposition(3,16,34,256)^gamma;;
199
gap> IsClassTransposition(ct);;
200
gap> ct;
201
ClassTransposition(1,4,2,4)
202
]]>
203
</Listing>
204
205
Thompson's group V can also be embedded in a natural way into CT(GF(2)[x]):
206
207
<Example>
208
<![CDATA[
209
gap> x := Indeterminate(GF(2));; SetName(x,"x");
210
gap> R := PolynomialRing(GF(2),1);;
211
gap> k := ClassTransposition(0,x,1,x);;
212
gap> l := ClassTransposition(1,x,x,x^2);;
213
gap> m := ClassTransposition(0,x,1,x^2);;
214
gap> n := ClassTransposition(1,x^2,x,x^2);;
215
gap> G := Group(k,l,m,n);
216
<rcwa group over GF(2)[x] with 4 generators>
217
]]>
218
</Example>
219
220
The correctness of this representation can likewise be verified by simply
221
checking the defining relations given above. <P/>
222
223
Enter <C>AssignGlobals(LoadRCWAExamples().HigmanThompson);</C>
224
in order to assign the global variables defined in this section.
225
226
</Section>
227
228
<!-- #################################################################### -->
229
230
<Section Label="sec:FactoringTheCollatzPermutation">
231
<Heading>
232
Factoring Collatz' permutation of the integers
233
</Heading>
234
235
In 1932, Lothar Collatz mentioned in his notebook the following permutation
236
of the integers:
237
238
<Example>
239
<![CDATA[
240
gap> Collatz := RcwaMapping([[2,0,3],[4,-1,3],[4,1,3]]);;
241
gap> Display(Collatz);
242
243
Rcwa mapping of Z with modulus 3
244
245
/
246
| 2n/3 if n in 0(3)
247
n |-> < (4n-1)/3 if n in 1(3)
248
| (4n+1)/3 if n in 2(3)
249
\
250
251
gap> ShortCycles(Collatz,[-50..50],50); # There are some finite cycles:
252
[ [ 0 ], [ -1 ], [ 1 ], [ 2, 3 ], [ -2, -3 ], [ 4, 5, 7, 9, 6 ],
253
[ -4, -5, -7, -9, -6 ],
254
[ 44, 59, 79, 105, 70, 93, 62, 83, 111, 74, 99, 66 ],
255
[ -44, -59, -79, -105, -70, -93, -62, -83, -111, -74, -99, -66 ] ]
256
]]>
257
</Example>
258
259
The cycle structure of Collatz' permutation has not been completely
260
determined yet. In particular it is not known whether the cycle
261
containing&nbsp;8 is finite or infinite.
262
Nevertheless, the factorization routine included in this package can
263
determine a factorization of this permutation into class transpositions,
264
i.e. involutions interchanging two disjoint residue classes:
265
266
<Example>
267
<![CDATA[
268
gap> Collatz in CT(Integers); # `Collatz' lies in the simple group CT(Z).
269
true
270
gap> Length(Factorization(Collatz));
271
212
272
]]>
273
</Example>
274
275
Setting the Info level of <C>InfoRCWA</C> equal to&nbsp;2 (simply issue
276
<C>RCWAInfo(2);</C>) causes the factorization routine to display detailed
277
information on the progress of the factoring process. For reasons of saving
278
space, this is not done in this manual. <P/>
279
280
We would like to get a factorization into fewer factors. Firstly, we try
281
to factor the inverse -- just like the various options interpreted by the
282
factorization routine, this has influence on decisions taken during the
283
factoring process:
284
285
<Example>
286
<![CDATA[
287
gap> Length(Factorization(Collatz^-1));
288
129
289
]]>
290
</Example>
291
292
This is already a shorter product, but can still be improved.
293
We remember the <C>mKnot</C>'s, of which the permutation <C>mKnot(3)</C>
294
looks very similar to Collatz' permutation. Therefore it is straightforward
295
to try to factor both <C>mKnot(3)</C> and <C>Collatz/mKnot(3)</C>, and to
296
look whether the sum of the numbers of factors is less than&nbsp;129:
297
298
<Example>
299
<![CDATA[
300
gap> KnotFacts := Factorization(mKnot(3));;
301
gap> QuotFacts := Factorization(Collatz/mKnot(3));;
302
gap> List([KnotFacts,QuotFacts],Length);
303
[ 59, 9 ]
304
gap> CollatzFacts := Concatenation(QuotFacts,KnotFacts);
305
[ ( 0(6), 4(6) ), ( 0(6), 5(6) ), ( 0(6), 3(6) ), ( 0(6), 1(6) ),
306
( 0(6), 2(6) ), ( 2(3), 4(6) ), ( 0(3), 4(6) ), ( 2(3), 1(6) ),
307
( 0(3), 1(6) ), ( 0(36), 35(36) ), ( 0(36), 22(36) ),
308
( 0(36), 18(36) ), ( 0(36), 17(36) ), ( 0(36), 14(36) ),
309
( 0(36), 20(36) ), ( 0(36), 4(36) ), ( 2(36), 8(36) ),
310
( 2(36), 16(36) ), ( 2(36), 13(36) ), ( 2(36), 9(36) ),
311
( 2(36), 7(36) ), ( 2(36), 6(36) ), ( 2(36), 3(36) ),
312
( 2(36), 10(36) ), ( 2(36), 15(36) ), ( 2(36), 12(36) ),
313
( 2(36), 5(36) ), ( 21(36), 28(36) ), ( 21(36), 33(36) ),
314
( 21(36), 30(36) ), ( 21(36), 23(36) ), ( 21(36), 34(36) ),
315
( 21(36), 31(36) ), ( 21(36), 27(36) ), ( 21(36), 25(36) ),
316
( 21(36), 24(36) ), ( 26(36), 32(36) ), ( 26(36), 29(36) ),
317
( 10(18), 35(36) ), ( 5(18), 35(36) ), ( 10(18), 17(36) ),
318
( 5(18), 17(36) ), ( 8(12), 14(24) ), ( 6(9), 17(18) ),
319
( 3(9), 17(18) ), ( 0(9), 17(18) ), ( 6(9), 16(18) ), ( 3(9), 16(18) ),
320
( 0(9), 16(18) ), ( 6(9), 11(18) ), ( 3(9), 11(18) ), ( 0(9), 11(18) ),
321
( 6(9), 4(18) ), ( 3(9), 4(18) ), ( 0(9), 4(18) ), ( 0(6), 14(24) ),
322
( 0(6), 2(24) ), ( 8(12), 17(18) ), ( 7(12), 17(18) ),
323
( 8(12), 11(18) ), ( 7(12), 11(18) ), PrimeSwitch(3)^-1,
324
( 7(12), 17(18) ), ( 2(6), 17(18) ), ( 0(3), 17(18) ),
325
PrimeSwitch(3)^-1, PrimeSwitch(3)^-1, PrimeSwitch(3)^-1 ]
326
gap> Product(CollatzFacts) = Collatz; # Check.
327
true
328
]]>
329
</Example>
330
331
The factors <C>PrimeSwitch(3)</C> are products of 6 class transpositions
332
(cf.&nbsp;<Ref Func="PrimeSwitch" Label="p"/>). <P/>
333
334
Enter <C>AssignGlobals(LoadRCWAExamples().CollatzlikePerms);</C>
335
in order to assign the global variables defined in this section.
336
337
</Section>
338
339
<!-- #################################################################### -->
340
341
<Section Label="sec:3nplus1Group">
342
<Heading>
343
The <M>3n+1</M> group
344
</Heading>
345
346
The following group acts transitively on the set of positive integers
347
for which the <M>3n+1</M> conjecture holds and which are not divisible by 6:
348
349
<Example>
350
<![CDATA[
351
gap> a := ClassTransposition(1,2,4,6);;
352
gap> b := ClassTransposition(1,3,2,6);;
353
gap> c := ClassTransposition(2,3,4,6);;
354
gap> G := Group(a,b,c);
355
<(1(2),4(6)),(1(3),2(6)),(2(3),4(6))>
356
gap> LoadDatabaseOfGroupsGeneratedBy3ClassTranspositions();
357
"3CTsGroups6"
358
gap> 3CTsGroups6.Id3CTsGroup(G,3CTsGroups6.grps); # 'catalogue number' of G
359
44132
360
]]>
361
</Example>
362
363
To see this, consider the action of <M>G</M> on the <Q><M>3n+1</M> tree</Q>.
364
The vertices of this tree are the positive integers for which the <M>3n+1</M>
365
conjecture holds, and for every vertex <M>n</M> there is an edge from
366
<M>n</M> to <M>T(n)</M>, where <M>T</M> denotes the Collatz mapping
367
<Alt Only="LaTeX">
368
<Display>
369
<![CDATA[T: \ \ \mathbb{Z} \longrightarrow \mathbb{Z}, \ \ \ \
370
n \ \longmapsto \
371
\begin{cases}
372
\frac{n}{2} & \text{if} \ \ n \ \ \text{is even}, \\
373
\frac{3n+1}{2} & \text{if} \ \ n \ \ \text{is odd}
374
\end{cases}]]>
375
</Display>
376
</Alt>
377
<Alt Only="HTML"><![CDATA[<center>
378
<img src = "collatz.png" width = "342" height = "63"
379
alt = "T: Z -> Z, n |-> (n/2 if n even, (3n+1)/2 if n odd)"/>
380
</center>]]></Alt>
381
<Alt Only="Text"><Verb><![CDATA[
382
/
383
| n/2 if n even,
384
T: Z -> Z, n |-> <
385
| (3n+1)/2 if n odd
386
\
387
]]></Verb></Alt>
388
(cf. Chapter&nbsp;<Ref Label="ch:AboutRCWA"/>).
389
It is easy to check that for every vertex <M>n</M>, either <M>a</M>,
390
<M>b</M> or <M>c</M> maps <M>n</M> to <M>T(n)</M>, and that the
391
other two generators either fix <M>n</M> or map it to one of its
392
preimages under&nbsp;<M>T</M>.
393
So the <M>3n+1</M> conjecture is equivalent to the assertion that the
394
group <M>G</M> acts transitively on <M>\mathbb{N} \setminus 0(6)</M>.
395
First let's have a look at balls of small radius about 1 under the
396
action of <M>G</M> -- these consist of those numbers whose trajectory
397
under <M>T</M> reaches 1 quickly:
398
399
<Example>
400
<![CDATA[
401
gap> Ball(G,1,5,OnPoints);
402
[ 1, 2, 4, 5, 8, 10, 16, 32, 64 ]
403
gap> Ball(G,1,10,OnPoints);
404
[ 1, 2, 3, 4, 5, 8, 10, 13, 16, 20, 21, 26, 32, 40, 52, 53, 64, 80, 85,
405
128, 160, 170, 256, 320, 340, 341, 512, 1024, 2048 ]
406
gap> Ball(G,1,15,OnPoints);
407
[ 1, 2, 3, 4, 5, 7, 8, 10, 11, 13, 16, 17, 20, 21, 22, 23, 26, 32, 34,
408
35, 40, 44, 45, 46, 52, 53, 64, 68, 69, 70, 75, 80, 85, 104, 106, 113,
409
128, 136, 140, 141, 151, 160, 170, 208, 212, 213, 226, 227, 256, 272,
410
277, 280, 301, 302, 320, 340, 341, 416, 424, 452, 453, 454, 512, 640,
411
680, 682, 832, 848, 853, 904, 908, 909, 1024, 1280, 1360, 1364, 1365,
412
1664, 1696, 1706, 1808, 1813, 1816, 2048, 2560, 2720, 2728, 4096,
413
5120, 5440, 5456, 5461, 8192, 10240, 10880, 10912, 10922, 16384,
414
32768, 65536 ]
415
gap> Ball(G,1,15,OnPoints:Spheres);
416
[ [ 1 ], [ 2, 4 ], [ 8 ], [ 16 ], [ 5, 32 ], [ 10, 64 ],
417
[ 3, 20, 21, 128 ], [ 40, 256 ], [ 13, 80, 85, 512 ],
418
[ 26, 160, 170, 1024 ], [ 52, 53, 320, 340, 341, 2048 ],
419
[ 17, 104, 106, 113, 640, 680, 682, 4096 ],
420
[ 34, 35, 208, 212, 213, 226, 227, 1280, 1360, 1364, 1365, 8192 ],
421
[ 11, 68, 69, 70, 75, 416, 424, 452, 453, 454, 2560, 2720, 2728, 16384
422
],
423
[ 22, 23, 136, 140, 141, 151, 832, 848, 853, 904, 908, 909, 5120,
424
5440, 5456, 5461, 32768 ],
425
[ 7, 44, 45, 46, 272, 277, 280, 301, 302, 1664, 1696, 1706, 1808,
426
1813, 1816, 10240, 10880, 10912, 10922, 65536 ] ]
427
gap> List(Ball(G,1,50,OnPoints:Spheres),Length);
428
[ 1, 2, 1, 1, 2, 2, 4, 2, 4, 4, 6, 8, 12, 14, 17, 20, 26, 32, 43, 52,
429
66, 81, 104, 133, 170, 211, 271, 335, 424, 542, 686, 873, 1096, 1376,
430
1730, 2205, 2794, 3522, 4429, 5611, 7100, 8978, 11343, 14296, 18058,
431
22828, 28924, 36532, 46146, 58399, 73713 ]
432
gap> FloatQuotientsList(last);
433
[ 2., 0.5, 1., 2., 1., 2., 0.5, 2., 1., 1.5, 1.33333, 1.5, 1.16667,
434
1.21429, 1.17647, 1.3, 1.23077, 1.34375, 1.2093, 1.26923, 1.22727,
435
1.28395, 1.27885, 1.2782, 1.24118, 1.28436, 1.23616, 1.26567, 1.2783,
436
1.26568, 1.27259, 1.25544, 1.25547, 1.25727, 1.27457, 1.26712,
437
1.26056, 1.25752, 1.26688, 1.26537, 1.26451, 1.26342, 1.26034,
438
1.26315, 1.26415, 1.26704, 1.26303, 1.26317, 1.26553, 1.26223 ]
439
gap> Difference(Filtered([1..100],n->n mod 6 <> 0),Ball(G,1,40,OnPoints));
440
[ 27, 31, 41, 47, 55, 62, 63, 71, 73, 82, 83, 91, 94, 95, 97 ]
441
gap> T := RcwaMapping([[1,0,2],[3,1,2]]);;
442
gap> List(last2,n->Length(Trajectory(T,n,[1])));
443
[ 71, 68, 70, 67, 72, 69, 69, 66, 74, 71, 71, 60, 68, 68, 76 ]
444
]]>
445
</Example>
446
447
It is convenient to define an epimorphism from the free group of rank 3
448
to <M>G</M>:
449
450
<Example>
451
<![CDATA[
452
gap> F := FreeGroup("a","b","c");
453
<free group on the generators [ a, b, c ]>
454
gap> phi := EpimorphismByGenerators(F,G);
455
[ a, b, c ] -> [ ( 1(2), 4(6) ), ( 1(3), 2(6) ), ( 2(3), 4(6) ) ]
456
]]>
457
</Example>
458
459
We can compute balls about 1 in <M>G</M>:
460
461
<Example>
462
<![CDATA[
463
gap> B := Ball(G,One(G),7:Spheres);;
464
gap> List(B,Length);
465
[ 1, 3, 6, 12, 24, 48, 96, 192 ]
466
gap> List(B[3],Order);
467
[ 12, infinity, infinity, infinity, infinity, 12 ]
468
gap> List(B[3],g->PreImagesRepresentative(phi,g));
469
[ b*a, c*b, c*a, b*c, a*c, a*b ]
470
gap> g := a*b;; Order(g);;
471
gap> Display(g);
472
473
Rcwa permutation of Z with modulus 18, of order 12
474
475
( 1(6), 8(36), 4(18), 2(12) ) ( 3(6), 20(36), 10(18) )
476
( 5(6), 32(36), 16(18) )
477
478
]]>
479
</Example>
480
481
Spending some more time to compute <C>B := Ball(G,One(G),12:Spheres);;</C>,
482
one can check that <M>(ab)^{12}</M> is the shortest word in the generators
483
of <M>G</M> which does not represent the identity in the free product of
484
3 cyclic groups of order 2, but which represents the identity in <M>G</M>.
485
However, the group <M>G</M> has elements of other finite orders as well --
486
for example:
487
488
<Example>
489
<![CDATA[
490
gap> g := (b*a)^3*b*c;; Order(g);;
491
gap> Display(g);
492
493
Rcwa permutation of Z with modulus 36, of order 105
494
495
( 8(9), 16(18), 64(72), 256(288), 85(96), 128(144), 32(36) )
496
( 7(12), 11(18), 22(36) ) ( 5(18), 10(36), 40(144), 13(48),
497
20(72) ) ( 1(24), 2(36), 4(72) ) ( 14(36), 28(72), 112(288),
498
37(96), 56(144) )
499
500
gap> Order(a*c*b*a*b*c*a*c);
501
60
502
]]>
503
</Example>
504
505
With some more efforts, one finds that e.g. <M>(abc)^2c^b</M> has order
506
616, that <M>(abc)^2b</M> has order 2310, that <M>(ab)^2a^ca^bc</M> has
507
order 27720, and that <M>a(c(ab)^2)^2</M> has order 65520.
508
Of course <M>G</M> has many elements of infinite order as well.
509
Some of them have infinite cycles, like e.g.
510
511
<Example>
512
<![CDATA[
513
gap> g := b*c;;
514
gap> Display(g);
515
516
Rcwa permutation of Z with modulus 12
517
518
/
519
| 4n if n in 1(3)
520
| 2n if n in 5(6)
521
n |-> < n/2 if n in 2(12)
522
| n/4 if n in 8(12)
523
| n if n in 0(3)
524
\
525
526
gap> Sinks(g);
527
[ 4(12) ]
528
gap> Trajectory(g,last[1],10);
529
[ 4(12), 16(48), 64(192), 256(768), 1024(3072), 4096(12288),
530
16384(49152), 65536(196608), 262144(786432), 1048576(3145728) ]
531
gap> Trajectory(g,4,20);
532
[ 4, 16, 64, 256, 1024, 4096, 16384, 65536, 262144, 1048576, 4194304,
533
16777216, 67108864, 268435456, 1073741824, 4294967296, 17179869184,
534
68719476736, 274877906944, 1099511627776 ]
535
]]>
536
</Example>
537
538
Others seem to have only finite cycles. Some of these appear to have
539
<Q>on average</Q> comparatively <Q>short</Q> cycles, like e.g.
540
541
<Example>
542
<![CDATA[
543
gap> g := a*b*a*c*b*c;
544
<rcwa permutation of Z with modulus 144>
545
gap> cycs := ShortCycles(g,[0..10000],100,10^20);;
546
gap> Difference([0..10000],Union(cycs));
547
[ ]
548
gap> Collected(List(cycs,Length));
549
[ [ 1, 2222 ], [ 3, 1945 ], [ 4, 1111 ], [ 5, 93 ], [ 6, 926 ],
550
[ 7, 31 ], [ 8, 864 ], [ 9, 10 ], [ 10, 289 ], [ 11, 4 ], [ 12, 95 ],
551
[ 13, 1 ], [ 14, 31 ], [ 16, 12 ], [ 18, 4 ], [ 20, 1 ] ]
552
]]>
553
</Example>
554
555
If the cycle of <M>g</M> containing some <M>n \in &ZZ;</M> is finite
556
and has a certain length <M>l</M>, then there is some <M>m \in &ZZ;</M>
557
such that for every <M>k \in &ZZ;</M> the cycle of <M>g</M> containing
558
<M>n + km</M> has length <M>l</M> as well. Thus, in other words, every
559
finite cycle of <M>g</M> <Q>belongs to</Q> a cycle of residue classes.
560
(This is a special property of <M>g</M> which is not shared by every
561
rcwa permutation -- cf. e.g. Collatz' permutation from
562
Section&nbsp;<Ref Label="sec:FactoringTheCollatzPermutation"/>.)
563
We can find some of these infinitely many <Q>residue class cycles</Q>:
564
565
<Example>
566
<![CDATA[
567
gap> cycsrc := ShortResidueClassCycles(g,Mod(g),20);
568
[ [ 0(6) ], [ 3(6), 160(288), 20(36) ],
569
[ 7(18), 352(864), 44(108), 28(72) ],
570
[ 11(18), 544(864), 2896(4608), 362(576), 68(108), 88(144) ],
571
[ 13(18), 640(864), 80(108), 52(72) ], [ 10(36) ], [ 34(36) ],
572
[ 1(54), 64(2592), 8(324), 4(216), 16(1152), 2(144) ],
573
[ 5(54), 256(2592), 1360(13824), 170(1728), 32(324), 40(432),
574
208(2304), 26(288) ],
575
[ 17(54), 832(2592), 4432(13824), 23632(73728), 2954(9216), 554(1728),
576
104(324), 136(432) ],
577
[ 37(54), 1792(2592), 224(324), 148(216), 784(1152), 98(144) ],
578
[ 41(54), 1984(2592), 10576(13824), 1322(1728), 248(324), 328(432),
579
1744(2304), 218(288) ],
580
[ 53(54), 2560(2592), 13648(13824), 72784(73728), 9098(9216),
581
1706(1728), 320(324), 424(432) ], [ 38(72), 58(108), 304(576) ],
582
[ 62(72), 94(108), 496(576) ] ]
583
gap> List(cycsrc,Length);
584
[ 1, 3, 4, 6, 4, 1, 1, 6, 8, 8, 6, 8, 8, 3, 3 ]
585
gap> Sum(List(Flat(cycsrc),cl->1/Mod(cl)));
586
97459/110592
587
gap> Float(last); # about 88% 'coverage'
588
0.881248
589
gap> cycsrc := ShortResidueClassCycles(g,3*Mod(g),20);
590
[ [ 0(6) ], [ 3(6), 160(288), 20(36) ],
591
[ 7(18), 352(864), 44(108), 28(72) ],
592
[ 11(18), 544(864), 2896(4608), 362(576), 68(108), 88(144) ],
593
[ 13(18), 640(864), 80(108), 52(72) ], [ 10(36) ], [ 34(36) ],
594
[ 1(54), 64(2592), 8(324), 4(216), 16(1152), 2(144) ],
595
[ 5(54), 256(2592), 1360(13824), 170(1728), 32(324), 40(432),
596
208(2304), 26(288) ],
597
[ 17(54), 832(2592), 4432(13824), 23632(73728), 2954(9216), 554(1728),
598
104(324), 136(432) ],
599
[ 37(54), 1792(2592), 224(324), 148(216), 784(1152), 98(144) ],
600
[ 41(54), 1984(2592), 10576(13824), 1322(1728), 248(324), 328(432),
601
1744(2304), 218(288) ],
602
[ 53(54), 2560(2592), 13648(13824), 72784(73728), 9098(9216),
603
1706(1728), 320(324), 424(432) ], [ 38(72), 58(108), 304(576) ],
604
[ 62(72), 94(108), 496(576) ],
605
[ 23(162), 1120(7776), 5968(41472), 746(5184), 140(972), 184(1296),
606
976(6912), 5200(36864), 650(4608), 122(864) ],
607
[ 35(162), 1696(7776), 9040(41472), 48208(221184), 257104(1179648),
608
32138(147456), 6026(27648), 1130(5184), 212(972), 280(1296) ],
609
[ 73(162), 3520(7776), 440(972), 292(648), 1552(3456), 8272(18432),
610
1034(2304), 194(432) ],
611
[ 77(162), 3712(7776), 19792(41472), 2474(5184), 464(972), 616(1296),
612
3280(6912), 17488(36864), 2186(4608), 410(864) ],
613
[ 89(162), 4288(7776), 22864(41472), 121936(221184), 650320(1179648),
614
81290(147456), 15242(27648), 2858(5184), 536(972), 712(1296) ],
615
[ 127(162), 6112(7776), 764(972), 508(648), 2704(3456), 14416(18432),
616
1802(2304), 338(432) ],
617
[ 14(216), 22(324), 112(1728), 592(9216), 74(1152) ],
618
[ 86(216), 130(324), 688(1728), 3664(9216), 458(1152) ] ]
619
gap> List(cycsrc,Length);
620
[ 1, 3, 4, 6, 4, 1, 1, 6, 8, 8, 6, 8, 8, 3, 3, 10, 10, 8, 10, 10, 8, 5,
621
5 ]
622
gap> Sum(List(Flat(cycsrc),Density));
623
5097073/5308416
624
gap> Float(last); # already about 96% 'coverage'
625
0.960187
626
]]>
627
</Example>
628
629
There are also some elements of infinite order whose cycles seem to be
630
all finite, but <Q>on average</Q> pretty <Q>long</Q> -- e.g.
631
632
<Example>
633
<![CDATA[
634
gap> g := (b*a*c)^2*a;;
635
gap> Display(g);
636
637
Rcwa permutation of Z with modulus 288
638
639
/
640
| (16n-1)/3 if n in 1(3)
641
| (9n+5)/4 if n in 3(24) U 11(24)
642
| (27n+19)/4 if n in 15(24) U 23(24)
643
| (3n+1)/4 if n in 5(24)
644
| (n-3)/6 if n in 21(24)
645
| (27n+29)/8 if n in 9(48) U 41(48)
646
| (9n+7)/8 if n in 17(48) U 33(48)
647
| (2n-7)/9 if n in 8(36)
648
n |-> < (4n-11)/9 if n in 32(36)
649
| (27n+38)/8 if n in 14(48)
650
| (3n+2)/8 if n in 26(48)
651
| (9n+10)/8 if n in 38(48)
652
| (3n+4)/4 if n in 20(72)
653
| n/4 if n in 56(72)
654
| (9n+14)/16 if n in 2(96)
655
| (27n+58)/16 if n in 50(96)
656
| n if n in 0(6)
657
\
658
659
gap> List([1..100],n->Length(Cycle(g,n)));
660
[ 6, 1, 6, 6, 6, 1, 194, 6, 216, 26, 26, 1, 26, 194, 65, 26, 26, 1, 216,
661
26, 6, 216, 46, 1, 640, 26, 70, 194, 216, 1, 70, 26, 216, 216, 26, 1,
662
194, 216, 73, 26, 110, 1, 194, 216, 194, 111, 39, 1, 194, 640, 640,
663
194, 26, 1, 171, 194, 204, 640, 216, 1, 111, 70, 91, 26, 194, 1, 216,
664
216, 26, 111, 65, 1, 50, 194, 26, 216, 640, 1, 502, 26, 111, 40, 110,
665
1, 26, 194, 385, 640, 88, 1, 100, 111, 65, 110, 416, 1, 171, 194, 194,
666
640 ]
667
gap> Length(Cycle(g,25));
668
640
669
gap> Maximum(Cycle(g,25));
670
323270249684063829
671
gap> Length(Cycle(g,25855));
672
4751
673
gap> Maximum(Cycle(g,25855));
674
507359605810239426786254778159924369135184044618585904603866210104085
675
gap> cycs := ShortCycles(g,[0..50000],10000,10^100);;
676
gap> S := [0..50000];;
677
gap> for cyc in cycs do S := Difference(S,cyc); od;
678
gap> S; # no cycle containing some n in [0..50000] has length > 10000
679
[ ]
680
]]>
681
</Example>
682
683
Taking a look at the lengths of the trajectories of the Collatz mapping
684
<M>T</M> starting at the points in a cycle, we can see how a cycle of
685
<M>g</M> goes <Q>up and down</Q> in the <M>3n+1</M> tree:
686
687
<Example>
688
<![CDATA[
689
gap> List(Cycle(g,25),n->Length(Trajectory(T,n,[1])));
690
[ 17, 21, 25, 29, 33, 31, 35, 34, 32, 33, 37, 41, 45, 44, 42, 39, 43,
691
41, 45, 44, 42, 43, 40, 38, 35, 39, 37, 41, 40, 44, 48, 46, 50, 49,
692
47, 48, 45, 42, 46, 44, 48, 47, 45, 46, 50, 49, 47, 43, 41, 38, 39,
693
36, 34, 30, 27, 31, 29, 33, 32, 30, 31, 35, 33, 37, 36, 40, 39, 43,
694
41, 45, 44, 42, 43, 47, 51, 55, 53, 57, 56, 54, 55, 59, 58, 62, 66,
695
64, 68, 67, 65, 66, 63, 60, 64, 62, 66, 65, 63, 64, 68, 67, 65, 61,
696
59, 56, 52, 49, 53, 51, 55, 54, 52, 53, 57, 55, 59, 58, 56, 57, 54,
697
50, 48, 45, 49, 47, 51, 50, 54, 52, 56, 55, 53, 54, 58, 62, 66, 70,
698
74, 72, 76, 75, 79, 83, 87, 91, 90, 94, 93, 97, 95, 99, 98, 96, 97,
699
94, 91, 88, 85, 89, 87, 91, 90, 88, 89, 86, 84, 81, 85, 83, 87, 86,
700
90, 94, 98, 97, 101, 105, 109, 107, 111, 110, 108, 109, 113, 117, 115,
701
119, 118, 122, 126, 125, 123, 120, 124, 122, 126, 125, 123, 124, 121,
702
119, 116, 117, 114, 111, 115, 113, 117, 116, 114, 115, 119, 123, 122,
703
120, 117, 121, 119, 123, 122, 120, 121, 118, 116, 112, 110, 106, 103,
704
107, 105, 109, 108, 106, 107, 111, 109, 113, 112, 116, 114, 118, 117,
705
115, 116, 113, 110, 111, 108, 104, 102, 99, 103, 101, 105, 104, 108,
706
106, 110, 109, 107, 108, 112, 111, 109, 105, 102, 103, 100, 98, 95,
707
92, 96, 94, 98, 97, 95, 96, 93, 91, 88, 92, 90, 94, 93, 97, 101, 105,
708
109, 108, 106, 103, 107, 105, 109, 108, 106, 107, 104, 102, 99, 103,
709
101, 105, 104, 108, 112, 110, 114, 113, 111, 112, 116, 115, 113, 109,
710
106, 110, 108, 112, 111, 109, 110, 114, 112, 116, 115, 113, 114, 111,
711
107, 105, 102, 103, 100, 98, 95, 99, 97, 101, 100, 104, 103, 107, 105,
712
109, 108, 106, 107, 104, 101, 98, 99, 96, 94, 91, 92, 89, 87, 84, 85,
713
82, 80, 77, 81, 79, 83, 82, 86, 85, 89, 88, 86, 83, 80, 81, 78, 76,
714
73, 74, 71, 68, 72, 70, 74, 73, 71, 72, 76, 80, 79, 83, 87, 91, 90,
715
88, 85, 89, 87, 91, 90, 88, 89, 86, 84, 81, 85, 83, 87, 86, 90, 94,
716
92, 96, 95, 93, 94, 98, 96, 100, 99, 97, 98, 102, 106, 110, 114, 113,
717
111, 108, 112, 110, 114, 113, 111, 112, 109, 107, 104, 108, 106, 110,
718
109, 113, 117, 115, 119, 118, 116, 117, 114, 111, 115, 113, 117, 116,
719
114, 115, 119, 118, 116, 112, 110, 107, 108, 105, 103, 100, 104, 102,
720
106, 105, 109, 108, 112, 110, 114, 113, 111, 112, 116, 115, 113, 109,
721
106, 103, 104, 101, 99, 95, 91, 88, 92, 90, 94, 93, 91, 92, 96, 94,
722
98, 97, 95, 96, 100, 98, 102, 101, 105, 104, 102, 99, 100, 97, 93, 89,
723
87, 84, 85, 82, 80, 77, 74, 78, 76, 80, 79, 77, 78, 75, 73, 69, 67,
724
64, 68, 66, 70, 69, 73, 71, 75, 74, 72, 73, 70, 67, 68, 65, 63, 60,
725
64, 62, 66, 65, 69, 68, 66, 63, 64, 61, 59, 56, 60, 58, 62, 61, 65,
726
64, 62, 59, 60, 57, 55, 51, 48, 49, 46, 44, 40, 37, 34, 35, 32, 28,
727
26, 23, 27, 25, 29, 28, 32, 30, 34, 33, 31, 32, 36, 35, 33, 29, 26,
728
27, 24, 22, 19, 23, 21, 25, 24, 28, 27, 25, 22, 23, 20, 18, 14, 18,
729
22, 20, 24, 23, 21, 22, 19, 16, 20, 18, 22, 21, 19, 20, 24, 23, 21,
730
17, 15, 17, 15, 19, 18, 16 ]
731
gap> lngs := List(Cycle(g,25855),n->Length(Trajectory(T,n,[1])));;
732
gap> Minimum(lngs);
733
55
734
gap> Maximum(lngs);
735
521
736
gap> Position(lngs,55);
737
15
738
gap> Position(lngs,521);
739
2807
740
]]>
741
</Example>
742
743
Finally let's have a look at elements of <M>G</M> with small modulus:
744
745
<Example>
746
<![CDATA[
747
gap> B := RestrictedBall(G,One(G),20,36:Spheres);;
748
gap> List(B,Length);
749
[ 1, 3, 6, 12, 4, 6, 6, 4, 4, 4, 6, 6, 3, 3, 2, 0, 0, 0, 0, 0, 0 ]
750
gap> Sum(last);
751
70
752
gap> Position(last2,0)-2;
753
14
754
]]>
755
</Example>
756
757
So we have 70 elements of modulus 36 or less in <M>G</M> which
758
can be reached from the identity by successive multiplication with
759
generators without passing elements with mudulus exceeding 36.
760
Further we see that the longest word in the generators yielding an
761
element with modulus at most 36 has length&nbsp;14.
762
Now we double our bound on the modulus:
763
764
<Example>
765
<![CDATA[
766
gap> B := RestrictedBall(G,One(G),100,72:Spheres);;
767
gap> List(B,Length);
768
[ 1, 3, 6, 12, 22, 14, 18, 22, 24, 26, 26, 34, 35, 32, 37, 38, 46, 58,
769
65, 73, 82, 91, 93, 96, 110, 121, 114, 117, 146, 138, 148, 168, 174,
770
196, 215, 214, 232, 255, 280, 305, 315, 359, 377, 371, 363, 366, 397,
771
419, 401, 405, 405, 401, 407, 415, 435, 424, 401, 359, 338, 330, 332,
772
281, 278, 271, 269, 254, 255, 257, 258, 258, 233, 215, 202, 185, 154,
773
121, 88, 55, 35, 20, 10, 5, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
774
0, 0, 0, 0, 0 ]
775
gap> Sum(last);
776
15614
777
gap> Position(last2,0)-2;
778
83
779
gap> Collected(List(Flat(B),Modulus));
780
[ [ 1, 1 ], [ 6, 3 ], [ 12, 4 ], [ 18, 2 ], [ 24, 4 ], [ 36, 56 ],
781
[ 48, 4 ], [ 72, 15540 ] ]
782
]]>
783
</Example>
784
785
We observe that there are 15540 elements in <M>G</M> with modulus 72
786
which are <Q>reachable</Q> from the identity by successive
787
multiplication with generators without passing elements with mudulus
788
exceeding 72. Further we see that the longest word in the generators
789
yielding an element with modulus at most 72 has length&nbsp;83. <P/>
790
791
It is obvious that many questions regarding the group <M>G</M>
792
remain open.
793
794
</Section>
795
796
<!-- #################################################################### -->
797
798
<Section Label="sec:GroupWithHugeFiniteOrbits">
799
<Heading>
800
A group with huge finite orbits
801
</Heading>
802
803
In this section we investigate a group which has huge finite orbits on &ZZ;.
804
805
<Example>
806
<![CDATA[
807
gap> a := ClassTransposition(0,2,1,2);;
808
gap> b := ClassTransposition(0,5,4,5);;
809
gap> c := ClassTransposition(1,4,0,6);;
810
gap> G := Group(a,b,c);
811
<(0(2),1(2)),(0(5),4(5)),(1(4),0(6))>
812
gap> LoadDatabaseOfGroupsGeneratedBy3ClassTranspositions();
813
"3CTsGroups6"
814
gap> 3CTsGroups6.Id3CTsGroup(G,3CTsGroups6.grps); # 'catalogue number' of G
815
1284
816
]]>
817
</Example>
818
819
We look for orbits of length at most 100 containing an integer in the
820
range <C>[0..1000]</C>:
821
822
<Example>
823
<![CDATA[
824
gap> orbs := ShortOrbits(G,[0..1000],100);;
825
gap> List(orbs,Length);
826
[ 16, 2, 24, 2, 2, 2, 8, 2, 8, 2, 2, 8, 2, 8, 2, 2, 2, 40, 2, 8, 24, 2,
827
8, 2, 2, 8, 2, 24, 8, 2, 56, 2, 2, 2, 8, 2, 8, 2, 2, 8, 2, 8, 2, 2, 2,
828
24, 2, 8, 2, 8, 2, 2, 8, 2, 8, 2, 24, 2, 2, 2, 8, 2, 8, 2, 2, 8, 2, 8,
829
2, 2, 2, 2, 8, 24, 2, 8, 2, 2, 8, 2, 24, 8, 2, 2, 2, 2, 8, 2, 8, 2, 2,
830
8, 2, 8, 2, 2, 2, 24, 2, 8, 2, 8, 2, 2, 8, 2, 8, 2, 24, 2, 2 ]
831
gap> Collected(last);
832
[ [ 2, 67 ], [ 8, 32 ], [ 16, 1 ], [ 24, 9 ], [ 40, 1 ], [ 56, 1 ] ]
833
gap> Length(Difference([0..1000],Union(orbs)));
834
491
835
]]>
836
</Example>
837
838
So almost half of the integers in the range <C>[0..1000]</C> lie in
839
orbits of length larger than 100. In fact there are much larger orbits.
840
For example:
841
842
<Example>
843
<![CDATA[
844
gap> B := Ball(G,32,500,OnPoints:Spheres);; # compute ball about 32
845
gap> Position(B,[]); # <> fail -> we have exhausted the orbit
846
354
847
gap> Sum(List(B,Length)); # the orbit length
848
6296
849
gap> Maximum(Flat(B)); # the largest integer in the orbit
850
3301636381609509797437679
851
gap> B := Ball(G,736,5000,OnPoints:Spheres);; # the same for 736 ...
852
gap> Position(B,[]);
853
2997
854
gap> Sum(List(B,Length)); # the orbit length for this time
855
495448
856
gap> Maximum(Flat(B));
857
2461374276522713949036151811903149785690151467356354652860276957152301465\
858
0546360696627187194849439881973442451686685024708652634593861146709752378\
859
847078493406287854573381920553713155967741550498839
860
]]>
861
</Example>
862
863
It seems that the cycles of <M>abc</M> completely traverse all orbits
864
of <M>G</M>, with the only exception of the orbit of 0. Let's check this
865
in the above examples:
866
867
<Example>
868
<![CDATA[
869
gap> g := a*b*c;;
870
gap> Display(g);
871
872
Rcwa permutation of Z with modulus 60
873
874
/
875
| n-1 if n in 3(30) U 9(30) U 17(30) U 23(30) U 27(30) U
876
| 29(30)
877
| 3n/2 if n in 0(20) U 12(20) U 16(20)
878
| n+1 if n in 2(20) U 6(20) U 10(20)
879
| (2n+1)/3 if n in 7(30) U 13(30) U 19(30)
880
| n+3 if n in 1(30) U 11(30)
881
n |-> < n-5 if n in 15(30) U 25(30)
882
| (3n+12)/2 if n in 4(20)
883
| (3n-12)/2 if n in 8(20)
884
| n+5 if n in 14(20)
885
| n-3 if n in 18(20)
886
| (2n-7)/3 if n in 5(30)
887
| (2n+9)/3 if n in 21(30)
888
\
889
890
gap> Length(Cycle(g,32));
891
6296
892
gap> Length(Cycle(g,736));
893
495448
894
]]>
895
</Example>
896
897
Representatives and lengths of the cycles of <M>g</M> which intersect
898
nontrivially with the range <C>[0..1000]</C> are as follows:
899
900
<Example>
901
<![CDATA[
902
gap> CycleRepresentativesAndLengths(g,[0..1000]:notify:=50000);
903
n = 736: after 50000 steps, the iterate has 157 binary digits.
904
n = 736: after 100000 steps, the iterate has 135 binary digits.
905
n = 736: after 150000 steps, the iterate has 131 binary digits.
906
n = 736: after 200000 steps, the iterate has 507 binary digits.
907
n = 736: after 250000 steps, the iterate has 414 binary digits.
908
n = 736: after 300000 steps, the iterate has 457 binary digits.
909
n = 736: after 350000 steps, the iterate has 465 binary digits.
910
n = 736: after 400000 steps, the iterate has 325 binary digits.
911
n = 736: after 450000 steps, the iterate has 534 binary digits.
912
n = 896: after 50000 steps, the iterate has 359 binary digits.
913
n = 896: after 100000 steps, the iterate has 206 binary digits.
914
[ [ 1, 15 ], [ 2, 2 ], [ 16, 24 ], [ 22, 2 ], [ 26, 2 ], [ 32, 6296 ],
915
[ 46, 2 ], [ 52, 8 ], [ 56, 296 ], [ 62, 2 ], [ 76, 8 ], [ 82, 2 ],
916
[ 86, 2 ], [ 92, 8 ], [ 106, 2 ], [ 112, 104 ], [ 116, 8 ],
917
[ 122, 2 ], [ 136, 440 ], [ 142, 2 ], [ 146, 2 ], [ 152, 40 ],
918
[ 166, 2 ], [ 172, 8 ], [ 176, 24 ], [ 182, 2 ], [ 196, 8 ],
919
[ 202, 2 ], [ 206, 2 ], [ 212, 8 ], [ 226, 2 ], [ 232, 24 ],
920
[ 236, 8 ], [ 242, 2 ], [ 256, 56 ], [ 262, 2 ], [ 266, 2 ],
921
[ 272, 408 ], [ 286, 2 ], [ 292, 8 ], [ 296, 104 ], [ 302, 2 ],
922
[ 316, 8 ], [ 322, 2 ], [ 326, 2 ], [ 332, 8 ], [ 346, 2 ],
923
[ 352, 264 ], [ 356, 8 ], [ 362, 2 ], [ 376, 1304 ], [ 382, 2 ],
924
[ 386, 2 ], [ 392, 24 ], [ 406, 2 ], [ 412, 8 ], [ 416, 200 ],
925
[ 422, 2 ], [ 436, 8 ], [ 442, 2 ], [ 446, 2 ], [ 452, 8 ],
926
[ 466, 2 ], [ 472, 104 ], [ 476, 8 ], [ 482, 2 ], [ 496, 24 ],
927
[ 502, 2 ], [ 506, 2 ], [ 512, 696 ], [ 526, 2 ], [ 532, 8 ],
928
[ 536, 3912 ], [ 542, 2 ], [ 556, 8 ], [ 562, 2 ], [ 566, 2 ],
929
[ 572, 8 ], [ 586, 2 ], [ 592, 888 ], [ 596, 8 ], [ 602, 2 ],
930
[ 616, 728 ], [ 622, 2 ], [ 626, 2 ], [ 632, 2776 ], [ 646, 2 ],
931
[ 652, 8 ], [ 656, 24 ], [ 662, 2 ], [ 676, 8 ], [ 682, 2 ],
932
[ 686, 2 ], [ 692, 8 ], [ 706, 2 ], [ 712, 24 ], [ 716, 8 ],
933
[ 722, 2 ], [ 736, 495448 ], [ 742, 2 ], [ 746, 2 ], [ 752, 1272 ],
934
[ 766, 2 ], [ 772, 8 ], [ 776, 376 ], [ 782, 2 ], [ 796, 8 ],
935
[ 802, 2 ], [ 806, 2 ], [ 812, 8 ], [ 826, 2 ], [ 832, 120 ],
936
[ 836, 8 ], [ 842, 2 ], [ 856, 2264 ], [ 862, 2 ], [ 866, 2 ],
937
[ 872, 24 ], [ 886, 2 ], [ 892, 8 ], [ 896, 132760 ], [ 902, 2 ],
938
[ 916, 8 ], [ 922, 2 ], [ 926, 2 ], [ 932, 8 ], [ 946, 2 ],
939
[ 952, 456 ], [ 956, 8 ], [ 962, 2 ], [ 976, 24 ], [ 982, 2 ],
940
[ 986, 2 ], [ 992, 1064 ] ]
941
]]>
942
</Example>
943
944
So far the author has checked that all positive integers less than
945
173176 lie in finite cycles of <M>g</M>. Several of them are longer
946
than 1000000, and the cycle containing 25952 has length 245719352.
947
Whether the cycle containing 173176 is finite or infinite has not
948
been checked so far -- in any case it is longer than 5700000000, and
949
it exceeds <M>10^{40000}</M>. Presumably it is finite as well, but
950
checking this may require a lot of computing time. <P/>
951
952
On the one hand the cycles of <M>g</M> seem to behave <Q>randomly</Q>,
953
perhaps as if they would ascend or descend from one point to the next
954
by a certain factor depending on which side a thrown coin falls on.
955
-- In this <Q>model</Q>, cycles would be finite with probability 1
956
since the simple random walk on &ZZ; is recurrent.
957
On the other, there seems to be quite some structure on them,
958
however little is known so far. <P/>
959
960
First we observe that each orbit under the action of <M>G</M>
961
seems to split into two cycles of <M>h := abcacb</M> of the same
962
length (of course this has been checked for many more orbits than
963
those shown here):
964
965
<Example>
966
<![CDATA[
967
gap> h := a*b*c*a*c*b;
968
<rcwa permutation of Z with modulus 360>
969
gap> List(CyclesOnFiniteOrbit(G,h,32),Length);
970
[ 3148, 3148 ]
971
gap> List(CyclesOnFiniteOrbit(G,h,736),Length);
972
[ 247724, 247724 ]
973
]]>
974
</Example>
975
976
One cycle seems to contain the points at the odd positions and the
977
other seems to contain the points at the even positions in the
978
cycle of <M>g</M>:
979
980
<Example>
981
<![CDATA[
982
gap> cycle_g := Cycle(g,32);;
983
gap> positions1 := List(Cycle(h,32),n->Position(cycle_g,n));;
984
gap> Collected(positions1 mod 2);
985
[ [ 1, 3148 ] ]
986
gap> positions2 := List(Cycle(h,33),n->Position(cycle_g,n));;
987
gap> Collected(positions2 mod 2);
988
[ [ 0, 3148 ] ]
989
]]>
990
</Example>
991
992
However the ordering in which these points are traversed looks
993
pretty <Q>scrambled</Q>:
994
995
<Example>
996
<![CDATA[
997
gap> positions1{[1..200]};
998
[ 1, 6271, 6291, 6281, 6285, 6287, 6283, 6289, 6273, 6275, 6277, 6279,
999
6293, 5, 15, 17, 19, 6259, 6261, 6263, 6265, 21, 23, 25, 41, 6227,
1000
6229, 6231, 6233, 6235, 6237, 6239, 43, 53, 55, 57, 63, 59, 61, 65,
1001
45, 47, 49, 51, 67, 6223, 6221, 69, 6163, 6215, 6205, 6209, 6211,
1002
6207, 6213, 6165, 6171, 6177, 6179, 6181, 6183, 6175, 6173, 6185,
1003
6189, 6191, 6187, 6193, 6169, 6167, 6195, 6199, 6201, 6197, 6203,
1004
6217, 73, 83, 85, 87, 103, 113, 115, 117, 4357, 4361, 4363, 4359,
1005
4365, 4371, 4373, 4375, 4377, 4369, 4367, 4379, 119, 121, 123, 125,
1006
129, 131, 127, 133, 139, 141, 143, 145, 137, 135, 147, 149, 151, 153,
1007
155, 159, 161, 157, 163, 169, 175, 4283, 4281, 177, 4271, 4273, 4275,
1008
4277, 181, 4255, 4257, 4259, 4261, 4263, 4265, 4267, 183, 2161, 2163,
1009
4195, 4199, 4201, 4197, 4203, 4209, 4211, 4213, 4215, 4207, 4205,
1010
4217, 2165, 2167, 2169, 2171, 2175, 2177, 2173, 2179, 2185, 2187,
1011
2189, 2191, 2183, 2181, 2193, 2195, 2197, 2199, 2201, 2467, 2469,
1012
4117, 4121, 4123, 4119, 4125, 4131, 4133, 4135, 4137, 4129, 4127,
1013
4139, 2471, 2473, 2475, 2477, 2487, 2489, 2491, 2507, 2517, 2519,
1014
2521, 2537, 3923, 3925, 3941, 3943 ]
1015
]]>
1016
</Example>
1017
1018
</Section>
1019
1020
<!-- #################################################################### -->
1021
1022
<Section Label="sec:FourTransitiveGroup">
1023
<Heading>
1024
A group which acts 4-transitively on the positive integers
1025
</Heading>
1026
1027
In this section, we would like to show that the group <M>G</M> generated
1028
by the two permutations
1029
1030
<Example>
1031
<![CDATA[
1032
gap> a := RcwaMapping([[3,0,2],[3,1,4],[3,0,2],[3,-1,4]]);;
1033
gap> u := RcwaMapping([[3,0,5],[9,1,5],[3,-1,5],[9,-2,5],[9,4,5]]);;
1034
gap> SetName(a,"a"); SetName(u,"u"); G := Group(a,u);;
1035
]]>
1036
</Example>
1037
1038
which we have already investigated in earlier examples acts 4-transitively
1039
on the set of positive integers.
1040
1041
Obviously, it acts on the set of positive integers.
1042
First we show that this action is transitive.
1043
1044
We start by checking in which residue classes sufficiently large positive
1045
integers are mapped to smaller ones by a suitable group element:
1046
1047
<Example>
1048
<![CDATA[
1049
gap> List([a,a^-1,u,u^-1],DecreasingOn);
1050
[ 1(2), 0(3), 0(5) U 2(5), 2(3) ]
1051
gap> Union(last);
1052
Z \ 4(30) U 16(30) U 28(30)
1053
]]>
1054
</Example>
1055
1056
We see that we cannot always choose such a group element from the set of
1057
generators and their inverses -- otherwise the union would be
1058
<C>Integers</C>.
1059
1060
<Example>
1061
<![CDATA[
1062
gap> List([a,a^-1,u,u^-1,a^2,a^-2,u^2,u^-2],DecreasingOn);
1063
[ 1(2), 0(3), 0(5) U 2(5), 2(3), 1(8) U 7(8), 0(3) U 2(9) U 7(9),
1064
0(25) U 12(25) U 17(25) U 20(25), 2(3) U 1(9) U 3(9) ]
1065
gap> Union(last); # Still not enough ...
1066
Z \ 4(90) U 58(90) U 76(90)
1067
gap> List([a,a^-1,u,u^-1,a^2,a^-2,u^2,u^-2,a*u,u*a,(a*u)^-1,(u*a)^-1],
1068
> DecreasingOn);
1069
[ 1(2), 0(3), 0(5) U 2(5), 2(3), 1(8) U 7(8), 0(3) U 2(9) U 7(9),
1070
0(25) U 12(25) U 17(25) U 20(25), 2(3) U 1(9) U 3(9),
1071
3(5) U 0(10) U 7(20) U 9(20), 0(5) U 2(5), 2(3), 3(9) U 4(9) U 8(9) ]
1072
gap> Union(last); # ... but that's it!
1073
Integers
1074
]]>
1075
</Example>
1076
1077
Finally, we have to deal with <Q>small</Q> integers. We use the notation for
1078
the coefficients of rcwa mappings introduced at the beginning of this manual.
1079
Let <M>c_{r(m)} &gt; a_{r(m)}</M>. Then we easily see that
1080
<M>(a_{r(m)}n+b_{r(m)})/c_{r(m)} &gt; n</M> implies
1081
<M>n &lt; b_{r(m)}/(c_{r(m)}-a_{r(m)})</M>.
1082
Thus we can restrict our considerations to integers
1083
<M>n &lt; b_{\rm max}</M>, where <M>b_{\rm max}</M> is the largest
1084
second entry of a coefficient triple of one of the group elements
1085
in our list:
1086
1087
<Example>
1088
<![CDATA[
1089
gap> List([a,a^-1,u,u^-1,a^2,a^-2,u^2,u^-2,a*u,u*a,(a*u)^-1,(u*a)^-1],
1090
> f->Maximum(List(Coefficients(f),c->c[2])));
1091
[ 1, 1, 4, 2, 7, 7, 56, 28, 25, 17, 17, 11 ]
1092
gap> Maximum(last);
1093
56
1094
]]>
1095
</Example>
1096
1097
Thus this upper bound is 56. The rest is easy -- all we have to do is
1098
to check that the orbit containing&nbsp;1 contains also all other positive
1099
integers less than or equal to&nbsp;56:
1100
1101
<Example>
1102
<![CDATA[
1103
gap> S := [1];;
1104
gap> while not IsSubset(S,[1..56]) do
1105
> S := Union(S,S^a,S^u,S^(a^-1),S^(u^-1));
1106
> od;
1107
gap> IsSubset(S,[1..56]);
1108
true
1109
]]>
1110
</Example>
1111
1112
Checking 2-transitivity is computationally harder, and in the sequel we
1113
will omit some steps which are in practice needed to find out
1114
<Q>what&nbsp;to&nbsp;do</Q>.
1115
1116
The approach taken here is to show that the stabilizer of&nbsp;1
1117
in&nbsp;<M>G</M> acts transitively on the set of positive integers greater
1118
than&nbsp;1. We do this by similar means as used above for showing the
1119
transitivity of the action of <M>G</M> on the positive integers.
1120
1121
We start by determining all products of at most 5 generators and their
1122
inverses, which stabilize&nbsp;1 (taking at most 4-generator products would
1123
not suffice!):
1124
1125
<Example>
1126
<![CDATA[
1127
gap> gens := [a,u,a^-1,u^-1];;
1128
gap> tups := Concatenation(List([1..5],k->Tuples([1..4],k)));;
1129
gap> Length(tups);
1130
1364
1131
gap> tups := Filtered(tups,tup->ForAll([[1,3],[3,1],[2,4],[4,2]],
1132
> l->PositionSublist(tup,l)=fail));;
1133
gap> Length(tups);
1134
484
1135
gap> stab := [];;
1136
gap> for tup in tups do
1137
> n := 1;
1138
> for i in tup do n := n^gens[i]; od;
1139
> if n = 1 then Add(stab,tup); fi;
1140
> od;
1141
gap> Length(stab);
1142
118
1143
gap> stabelm := List(stab,tup->Product(List(tup,i->gens[i])));;
1144
gap> ForAll(stabelm,elm->1^elm=1); # Check.
1145
true
1146
]]>
1147
</Example>
1148
1149
The resulting products have various different not quite small moduli:
1150
1151
<Example>
1152
<![CDATA[
1153
gap> List(stabelm,Modulus);
1154
[ 4, 3, 16, 25, 9, 81, 64, 100, 108, 100, 25, 75, 27, 243, 324, 243,
1155
256, 400, 144, 400, 100, 432, 324, 400, 80, 400, 625, 25, 75, 135,
1156
150, 75, 225, 81, 729, 486, 729, 144, 144, 81, 729, 1296, 729, 6561,
1157
1024, 1600, 192, 1600, 400, 576, 432, 1600, 320, 1600, 2500, 100, 100,
1158
180, 192, 192, 108, 972, 1728, 972, 8748, 1600, 400, 320, 80, 1600,
1159
2500, 300, 2500, 625, 625, 75, 675, 75, 75, 135, 405, 600, 120, 600,
1160
1875, 75, 225, 405, 225, 225, 675, 243, 2187, 729, 2187, 216, 216,
1161
243, 2187, 1944, 2187, 19683, 576, 144, 576, 432, 81, 81, 729, 2187,
1162
5184, 324, 8748, 243, 2187, 19683, 26244, 19683 ]
1163
gap> Lcm(last);
1164
12597120000
1165
gap> Collected(Factors(last));
1166
[ [ 2, 10 ], [ 3, 9 ], [ 5, 4 ] ]
1167
]]>
1168
</Example>
1169
1170
Similar as before, we determine for any of the above mappings the
1171
residue classes whose elements larger than the largest <M>b_{r(m)}</M>
1172
- coefficient of the respective mapping are mapped to smaller integers:
1173
1174
<Example>
1175
<![CDATA[
1176
gap> decs := List(stabelm,DecreasingOn);;
1177
gap> List(decs,Modulus);
1178
[ 2, 3, 8, 25, 9, 9, 16, 100, 12, 50, 25, 75, 27, 81, 54, 81, 64, 400,
1179
48, 200, 100, 72, 108, 400, 80, 200, 625, 25, 75, 45, 75, 75, 225, 81,
1180
243, 81, 243, 144, 144, 81, 243, 216, 243, 243, 128, 1600, 64, 400,
1181
400, 48, 144, 1600, 320, 400, 2500, 100, 100, 60, 96, 192, 108, 324,
1182
144, 324, 972, 400, 400, 80, 80, 400, 2500, 100, 1250, 625, 625, 25,
1183
75, 75, 75, 45, 135, 600, 120, 150, 1875, 75, 225, 135, 225, 225, 675,
1184
243, 729, 243, 729, 108, 216, 243, 729, 162, 729, 2187, 144, 144, 144,
1185
144, 81, 81, 243, 729, 1296, 324, 972, 243, 729, 2187, 1458, 2187 ]
1186
gap> Lcm(last);
1187
174960000
1188
]]>
1189
</Example>
1190
1191
Since the least common multiple of the moduli of these unions of residue
1192
classes is as large as 174960000, directly forming their union and
1193
checking whether it is equal to the set of integers would take relatively
1194
much time and memory. However, starting with the set of integers and
1195
subtracting the above sets one-by-one in a suitably chosen order is cheap:
1196
1197
<Example>
1198
<![CDATA[
1199
gap> SortParallel(decs,stabelm,
1200
> function(S1,S2)
1201
> return First([1..100],k->Factorial(k) mod Modulus(S1)=0)
1202
> < First([1..100],k->Factorial(k) mod Modulus(S2)=0);
1203
> end);
1204
gap> S := Integers;;
1205
gap> for i in [1..Length(decs)] do
1206
> S_old := S; S := Difference(S,decs[i]);
1207
> if S <> S_old then ViewObj(S); Print("\n"); fi;
1208
> if S = [] then maxind := i; break; fi;
1209
> od;
1210
0(2)
1211
2(6) U 4(6)
1212
<union of 8 residue classes (mod 30)>
1213
<union of 19 residue classes (mod 90) (9 classes)>
1214
<union of 114 residue classes (mod 720)>
1215
<union of 99 residue classes (mod 720)>
1216
<union of 57 residue classes (mod 720)>
1217
<union of 54 residue classes (mod 720)>
1218
<union of 41 residue classes (mod 720)>
1219
<union of 35 residue classes (mod 720)>
1220
<union of 8 residue classes (mod 720) (6 classes)>
1221
4(720) U 94(720) U 148(720) U 238(720)
1222
<union of 24 residue classes (mod 5760)>
1223
<union of 72 residue classes (mod 51840)>
1224
<union of 48 residue classes (mod 51840)>
1225
<union of 192 residue classes (mod 259200)>
1226
<union of 168 residue classes (mod 259200)>
1227
<union of 120 residue classes (mod 259200)>
1228
<union of 96 residue classes (mod 259200)>
1229
<union of 72 residue classes (mod 259200)>
1230
<union of 60 residue classes (mod 259200)>
1231
<union of 48 residue classes (mod 259200)>
1232
<union of 24 residue classes (mod 259200)>
1233
<union of 12 residue classes (mod 259200) (6 classes)>
1234
<union of 24 residue classes (mod 777600)>
1235
<union of 12 residue classes (mod 777600) (6 classes)>
1236
111604(194400) U 14404(777600) U 208804(777600)
1237
[ ]
1238
]]>
1239
</Example>
1240
1241
Similar as above, it remains to check that the <Q>small</Q> integers all
1242
lie in the orbit containing&nbsp;2. Obviously, it is sufficient to check
1243
that any integer greater than&nbsp;2 is mapped to a smaller one by some
1244
suitably chosen element of the stabilizer under consideration:
1245
1246
<Example>
1247
<![CDATA[
1248
gap> Maximum(List(stabelm{[1..maxind]},
1249
> f->Maximum(List(Coefficients(f),c->c[2]))));
1250
6581
1251
gap> Filtered([3..6581],n->Minimum(List(stabelm,elm->n^elm))>=n);
1252
[ 4 ]
1253
]]>
1254
</Example>
1255
1256
We have to treat 4 separately:
1257
1258
<Example>
1259
<![CDATA[
1260
gap> 1^(u*a*u^2*a^-1*u);
1261
1
1262
gap> 4^(u*a*u^2*a^-1*u);
1263
3
1264
]]>
1265
</Example>
1266
1267
Now we know that any positive integer greater than&nbsp;1 lies in the same
1268
orbit under the action of the stabilizer of&nbsp;1 in&nbsp;<M>G</M>
1269
as&nbsp;2, thus that this stabilizer acts transitively on
1270
<M>&NN; \setminus \{1\}</M>. But this means that we have established
1271
the 2-transitivity of the action of <M>G</M> on&nbsp;&NN;. <P/>
1272
1273
In the following, we essentially repeat the above steps to show that
1274
this action is indeed 3-transitive:
1275
1276
<Example>
1277
<![CDATA[
1278
gap> tups := Concatenation(List([1..6],k->Tuples([1..4],k)));;
1279
gap> tups := Filtered(tups,tup->ForAll([[1,3],[3,1],[2,4],[4,2]],
1280
> l->PositionSublist(tup,l)=fail));;
1281
gap> stab := [];;
1282
gap> for tup in tups do
1283
> l := [1,2];
1284
> for i in tup do l := List(l,n->n^gens[i]); od;
1285
> if l = [1,2] then Add(stab,tup); fi;
1286
> od;
1287
gap> Length(stab);
1288
212
1289
gap> stabelm := List(stab,tup->Product(List(tup,i->gens[i])));;
1290
gap> decs := List(stabelm,DecreasingOn);;
1291
gap> SortParallel(decs,stabelm,function(S1,S2)
1292
> return First([1..100],k->Factorial(k) mod Mod(S1)=0)
1293
> < First([1..100],k->Factorial(k) mod Mod(S2)=0); end);
1294
gap> S := Integers;;
1295
gap> for i in [1..Length(decs)] do
1296
> S_old := S; S := Difference(S,decs[i]);
1297
> if S <> S_old then ViewObj(S); Print("\n"); fi;
1298
> if S = [] then break; fi;
1299
> od;
1300
Z \ 1(8) U 7(8)
1301
<union of 151 residue classes (mod 240)>
1302
<union of 208 residue classes (mod 720)>
1303
<union of 51 residue classes (mod 720)>
1304
<union of 45 residue classes (mod 720)>
1305
<union of 39 residue classes (mod 720)>
1306
<union of 33 residue classes (mod 720)>
1307
<union of 23 residue classes (mod 720)>
1308
<union of 19 residue classes (mod 720) (7 classes)>
1309
<union of 17 residue classes (mod 720) (6 classes)>
1310
<union of 16 residue classes (mod 720) (7 classes)>
1311
<union of 14 residue classes (mod 720) (9 classes)>
1312
<union of 8 residue classes (mod 720) (6 classes)>
1313
<union of 7 residue classes (mod 720) (6 classes)>
1314
238(360) U 4(720) U 148(720) U 454(720)
1315
<union of 38 residue classes (mod 5760)>
1316
<union of 37 residue classes (mod 5760)>
1317
<union of 25 residue classes (mod 5760)>
1318
<union of 21 residue classes (mod 5760)>
1319
<union of 17 residue classes (mod 5760) (13 classes)>
1320
<union of 16 residue classes (mod 5760) (12 classes)>
1321
<union of 138 residue classes (mod 51840)>
1322
<union of 48 residue classes (mod 51840)>
1323
<union of 32 residue classes (mod 51840)>
1324
<union of 20 residue classes (mod 51840) (14 classes)>
1325
<union of 16 residue classes (mod 51840) (12 classes)>
1326
<union of 68 residue classes (mod 259200)>
1327
<union of 42 residue classes (mod 259200)>
1328
<union of 32 residue classes (mod 259200)>
1329
<union of 26 residue classes (mod 259200)>
1330
<union of 25 residue classes (mod 259200)>
1331
<union of 11 residue classes (mod 259200) (10 classes)>
1332
<union of 10 residue classes (mod 259200) (9 classes)>
1333
<union of 7 residue classes (mod 259200) (6 classes)>
1334
13414(129600) U 2164(259200) U 66964(259200) U 228964(259200)
1335
2164(259200) U 66964(259200) U 228964(259200)
1336
[ ]
1337
gap> Maximum(List(stabelm,f->Maximum(List(Coefficients(f),c->c[2]))));
1338
515816
1339
gap> smallnum := [4..515816];;
1340
gap> for i in [1..Length(stabelm)] do
1341
> smallnum := Filtered(smallnum,n->n^stabelm[i]>=n);
1342
> od;
1343
gap> smallnum;
1344
[ ]
1345
]]>
1346
</Example>
1347
1348
The same for 4-transitivity:
1349
1350
<Example>
1351
<![CDATA[
1352
gap> tups := Concatenation(List([1..8],k->Tuples([1..4],k)));;
1353
gap> tups := Filtered(tups,tup->ForAll([[1,3],[3,1],[2,4],[4,2]],
1354
> l->PositionSublist(tup,l)=fail));;
1355
gap> stab := [];;
1356
gap> for tup in tups do
1357
> l := [1,2,3];
1358
> for i in tup do l := List(l,n->n^gens[i]); od;
1359
> if l = [1,2,3] then Add(stab,tup); fi;
1360
> od;
1361
gap> Length(stab);
1362
528
1363
gap> stabelm := [];;
1364
gap> for i in [1..Length(stab)] do
1365
> elm := One(G);
1366
> for j in stab[i] do
1367
> if Modulus(elm) > 10000 then elm := fail; break; fi;
1368
> elm := elm * gens[j];
1369
> od;
1370
> if elm <> fail then Add(stabelm,elm); fi;
1371
> od;
1372
gap> Length(stabelm);
1373
334
1374
gap> decs := List(stabelm,DecreasingOn);;
1375
gap> SortParallel(decs,stabelm,
1376
> function(S1,S2)
1377
> return First([1..100],k->Factorial(k) mod Modulus(S1) = 0)
1378
> < First([1..100],k->Factorial(k) mod Modulus(S2) = 0);
1379
> end);
1380
gap> S := Integers;;
1381
gap> for i in [1..Length(decs)] do
1382
> S_old := S; S := Difference(S,decs[i]);
1383
> if S <> S_old then ViewObj(S); Print("\n"); fi;
1384
> if S = [] then maxind := i; break; fi;
1385
> od;
1386
Z \ 1(8) U 7(8)
1387
<union of 46 residue classes (mod 72)>
1388
<union of 20 residue classes (mod 72) (8 classes)>
1389
4(18)
1390
<union of 28 residue classes (mod 576)>
1391
<union of 22 residue classes (mod 576)>
1392
<union of 21 residue classes (mod 576)>
1393
40(72) U 4(144) U 94(144) U 346(576) U 418(576)
1394
<union of 16 residue classes (mod 576) (6 classes)>
1395
<union of 15 residue classes (mod 576) (6 classes)>
1396
4(144) U 94(144) U 346(576) U 418(576)
1397
<union of 30 residue classes (mod 5184)>
1398
<union of 26 residue classes (mod 5184)>
1399
<union of 6 residue classes (mod 1296)>
1400
<union of 504 residue classes (mod 129600)>
1401
<union of 324 residue classes (mod 129600)>
1402
<union of 282 residue classes (mod 129600)>
1403
<union of 239 residue classes (mod 129600)>
1404
<union of 218 residue classes (mod 129600)>
1405
<union of 194 residue classes (mod 129600)>
1406
<union of 154 residue classes (mod 129600)>
1407
<union of 97 residue classes (mod 129600)>
1408
<union of 85 residue classes (mod 129600)>
1409
<union of 77 residue classes (mod 129600)>
1410
<union of 67 residue classes (mod 129600)>
1411
<union of 125 residue classes (mod 259200)>
1412
<union of 108 residue classes (mod 259200)>
1413
<union of 107 residue classes (mod 259200)>
1414
<union of 101 residue classes (mod 259200)>
1415
<union of 100 residue classes (mod 259200)>
1416
<union of 84 residue classes (mod 259200)>
1417
<union of 80 residue classes (mod 259200)>
1418
<union of 76 residue classes (mod 259200)>
1419
<union of 70 residue classes (mod 259200)>
1420
<union of 66 residue classes (mod 259200)>
1421
<union of 54 residue classes (mod 259200)>
1422
<union of 53 residue classes (mod 259200)>
1423
<union of 47 residue classes (mod 259200)>
1424
<union of 43 residue classes (mod 259200)>
1425
<union of 31 residue classes (mod 259200)>
1426
<union of 24 residue classes (mod 259200)>
1427
<union of 23 residue classes (mod 259200)>
1428
<union of 13 residue classes (mod 259200) (8 classes)>
1429
57406(129600) U 115006(129600) U 192676(259200) U 250276(259200)
1430
57406(129600) U 192676(259200) U 250276(259200) U 374206(388800)
1431
57406(129600) U 192676(259200) U 250276(259200)
1432
250276(259200) U 57406(388800) U 316606(388800) U 451876(777600)
1433
316606(388800) U 451876(777600) U 509476(777600) U 768676(777600)
1434
<union of 18 residue classes (mod 3110400) (6 classes)>
1435
451876(777600) U 509476(777600) U 705406(777600) U 768676(777600)
1436
U 2649406(3110400)
1437
451876(777600) U 705406(777600) U 768676(777600) U 2649406(3110400)
1438
451876(777600) U 705406(777600) U 2649406(3110400)
1439
705406(777600) U 2007076(3110400) U 2649406(3110400) U 2784676(3110400)
1440
<union of 14 residue classes (mod 9331200) (8 classes)>
1441
2260606(2332800) U 5759806(9331200) U 5895076(9331200) U 8227876(9331200)
1442
4593406(6998400) U 15091006(27993600) U 17559076(27993600)
1443
U 24557476(27993600)
1444
<union of 14 residue classes (mod 83980800) (8 classes)>
1445
18590206(20995200) U 24557476(83980800) U 45552676(83980800)
1446
U 71078206(83980800)
1447
[ ]
1448
gap> Maximum(List(stabelm{[1..maxind]},
1449
> f->Maximum(List(Coefficients(f),c->c[2]))));
1450
58975
1451
gap> smallnum := [5..58975];;
1452
gap> for i in [1..maxind] do
1453
> smallnum := Filtered(smallnum,n->n^stabelm[i]>=n);
1454
> od;
1455
gap> smallnum;
1456
[ ]
1457
]]>
1458
</Example>
1459
1460
There is even some evidence that the degree of transitivity of the action of
1461
<M>G</M> on the positive integers is higher than&nbsp;4:
1462
1463
<Example>
1464
<![CDATA[
1465
gap> phi := EpimorphismFromFreeGroup(G);
1466
[ a, u ] -> [ a, u ]
1467
gap> F := Source(phi);
1468
<free group on the generators [ a, u ]>
1469
gap> List([5..20],
1470
> n->RepresentativeActionPreImage(G,[1,2,3,4,5],
1471
> [1,2,3,4,n],OnTuples,F));
1472
[ <identity ...>, a^-3*u^4*a*u^-2*a^2, a^-1*(a^-1*u)^4*a^-1*u^-1*a,
1473
a^4*u^-2*a^-4, a^-1*u^-4*a, (u^2*a^-1)^2*u^-2, u^-2*a^-2*u^4,
1474
a^-1*u^2*a, a^-1*u^-6*a, a^2*u^4*a^2*u^2, u^-4*a*u^-2*a^-3,
1475
a^-1*u^-2*a^-3*u^4*a^2, a^2*(a*u^2)^2, (a*u^-4)^2*a^-2,
1476
u^-2*a*u^2*a*u^-2, u^-4*a^2*u^2 ]
1477
]]>
1478
</Example>
1479
1480
Enter <C>AssignGlobals(LoadRCWAExamples().CollatzlikePerms);</C>
1481
in order to assign the global variables defined in this section.
1482
1483
</Section>
1484
1485
<!-- #################################################################### -->
1486
1487
<Section Label="sec:ThreeButNotFourTransitiveGroup">
1488
<Heading>
1489
A group which acts 3-transitively, but not 4-transitively on &ZZ;
1490
</Heading>
1491
1492
In this section, we would like to show that the group <M>G</M> generated
1493
by the two permutations <M>n \mapsto n + 1</M> and <M>\tau_{1(2),0(4)}</M>
1494
acts 3-transitively, but not 4-transitively on the set of integers.
1495
1496
<Example>
1497
<![CDATA[
1498
gap> G := Group(ClassShift(0,1),ClassTransposition(1,2,0,4));
1499
<rcwa group over Z with 2 generators>
1500
gap> IsTame(G);
1501
false
1502
gap> (G.1^-2*G.2)^3*(G.1^2*G.2)^3; # G <> the free product C_infty * C_2.
1503
IdentityMapping( Integers )
1504
gap> Display(G:CycleNotation:=false);
1505
1506
Wild rcwa group over Z, generated by
1507
1508
[
1509
Tame rcwa permutation of Z: n -> n + 1
1510
1511
Rcwa permutation of Z with modulus 4, of order 2
1512
1513
/
1514
| 2n-2 if n in 1(2)
1515
n |-> < (n+2)/2 if n in 0(4)
1516
| n if n in 2(4)
1517
\
1518
1519
]
1520
]]>
1521
</Example>
1522
1523
This group acts transitively on&nbsp;&ZZ;, since already the cyclic
1524
group generated by the first of the two generators does so. Next we have to
1525
show that it acts 2-transitively. We essentially proceed as in the example
1526
in the previous section, by checking that the stabilizer of&nbsp;0
1527
acts transitively on <M>&ZZ; \setminus \{0\}</M>.
1528
1529
<Example>
1530
<![CDATA[
1531
gap> gens := [ClassShift(0,1)^-1,ClassTransposition(1,2,0,4),
1532
> ClassShift(0,1)];;
1533
gap> tups := Concatenation(List([1..6],k->Tuples([-1,0,1],k)));;
1534
gap> tups := Filtered(tups,tup->ForAll([[0,0],[-1,1],[1,-1]],
1535
> l->PositionSublist(tup,l)=fail));;
1536
gap> Length(tups);
1537
189
1538
gap> stab := [];;
1539
gap> for tup in tups do
1540
> n := 0;
1541
> for i in tup do n := n^gens[i+2]; od;
1542
> if n = 0 then Add(stab,tup); fi;
1543
> od;
1544
gap> stabelm := List(stab,tup->Product(List(tup,i->gens[i+2])));;
1545
gap> Collected(List(stabelm,Modulus));
1546
[ [ 4, 6 ], [ 8, 4 ], [ 16, 3 ] ]
1547
gap> decs := List(stabelm,DecreasingOn);
1548
[ 0(4), 3(4), 0(4), 3(4), 2(4), 0(4), 4(8), 2(4), 2(4), 0(4), 1(4),
1549
0(8), 3(8) ]
1550
gap> Union(decs);
1551
Integers
1552
]]>
1553
</Example>
1554
1555
Similar as in the previous section, it remains to check that the integers
1556
with <Q>small</Q> absolute value all lie in the orbit containing&nbsp;1 under
1557
the action of the stabilizer of&nbsp;0:
1558
1559
<Example>
1560
<![CDATA[
1561
gap> Maximum(List(stabelm,f->Maximum(List(Coefficients(f),
1562
> c->AbsInt(c[2])))));
1563
21
1564
gap> S := [1];;
1565
gap> for elm in stabelm do S := Union(S,S^elm,S^(elm^-1)); od;
1566
gap> IsSubset(S,Difference([-21..21],[0])); # Not yet ..
1567
false
1568
gap> for elm in stabelm do S := Union(S,S^elm,S^(elm^-1)); od;
1569
gap> IsSubset(S,Difference([-21..21],[0])); # ... but now!
1570
true
1571
]]>
1572
</Example>
1573
1574
Now we have to check for 3-transitivity. Since we cannot find for every
1575
residue class an element of the pointwise stabilizer of <M>\{0,1\}</M>
1576
which properly divides its elements, we also have to take additions and
1577
subtractions into consideration. Since the moduli of all of our stabilizer
1578
elements are quite small, simply looking at sets of representatives is cheap:
1579
1580
<Example>
1581
<![CDATA[
1582
gap> tups := Concatenation(List([1..10],k->Tuples([-1,0,1],k)));;
1583
gap> tups := Filtered(tups,tup->ForAll([[0,0],[-1,1],[1,-1]],
1584
> l->PositionSublist(tup,l)=fail));;
1585
gap> Length(tups);
1586
3069
1587
gap> stab := [];;
1588
gap> for tup in tups do
1589
> l := [0,1];
1590
> for i in tup do l := List(l,n->n^gens[i+2]); od;
1591
> if l = [0,1] then Add(stab,tup); fi;
1592
> od;
1593
gap> Length(stab);
1594
10
1595
gap> stabelm := List(stab,tup->Product(List(tup,i->gens[i+2])));;
1596
gap> Maximum(List(stabelm,Modulus));
1597
8
1598
gap> Maximum(List(stabelm,
1599
> f->Maximum(List(Coefficients(f),c->AbsInt(c[2])))));
1600
8
1601
gap> decsp := List(stabelm,elm->Filtered([9..16],n->n^elm<n));
1602
[ [ 9, 13 ], [ 10, 12, 14, 16 ], [ 12, 16 ], [ 9, 13 ], [ 12, 16 ],
1603
[ 9, 11, 13, 15 ], [ 9, 11, 13, 15 ], [ 12, 16 ], [ 12, 16 ],
1604
[ 9, 11, 13, 15 ] ]
1605
gap> Union(decsp);
1606
[ 9, 10, 11, 12, 13, 14, 15, 16 ]
1607
gap> decsm := List(stabelm,elm->Filtered([-16..-9],n->n^elm>n));
1608
[ [ -15, -13, -11, -9 ], [ -16, -12 ], [ -16, -12 ], [ -15, -11 ],
1609
[ -16, -14, -12, -10 ], [ -15, -11 ], [ -15, -11 ],
1610
[ -16, -14, -12, -10 ], [ -16, -14, -12, -10 ], [ -15, -11 ] ]
1611
gap> Union(decsm);
1612
[ -16, -15, -14, -13, -12, -11, -10, -9 ]
1613
gap> S := [2];;
1614
gap> for elm in stabelm do S := Union(S,S^elm,S^(elm^-1)); od;
1615
gap> IsSubset(S,Difference([-8..8],[0,1]));
1616
true
1617
]]>
1618
</Example>
1619
1620
At this point we have established 3-transitivity.
1621
It remains to check that the group <M>G</M> does not act 4-transitively.
1622
We do this by checking that it is not transitive on 4-tuples (mod&nbsp;4).
1623
Since <M>n</M>&nbsp;mod&nbsp;8 determines the image of <M>n</M> under
1624
a generator of <M>G</M> (mod&nbsp;4), it suffices to compute (mod&nbsp;8):
1625
1626
<Example>
1627
<![CDATA[
1628
gap> orb := [[0,1,2,3]];;
1629
gap> extend := function ()
1630
> local gen;
1631
> for gen in gens do
1632
> orb := Union(orb,List(orb,l->List(l,n->n^gen) mod 8));
1633
> od;
1634
> end;;
1635
gap> repeat
1636
> old := ShallowCopy(orb);
1637
> extend(); Print(Length(orb),"\n");
1638
> until orb = old;
1639
7
1640
27
1641
97
1642
279
1643
573
1644
916
1645
1185
1646
1313
1647
1341
1648
1344
1649
1344
1650
gap> Length(Set(List(orb,l->l mod 4)));
1651
120
1652
gap> last < 4^4;
1653
true
1654
]]>
1655
</Example>
1656
1657
This shows that <M>G</M> acts not 4-transitively on&nbsp;&ZZ;.
1658
The corresponding calculation for 3-tuples looks as follows:
1659
1660
<Example>
1661
<![CDATA[
1662
gap> orb := [[0,1,2]];;
1663
gap> repeat
1664
> old := ShallowCopy(orb);
1665
> extend(); Print(Length(orb),"\n");
1666
> until orb = old;
1667
7
1668
27
1669
84
1670
207
1671
363
1672
459
1673
503
1674
512
1675
512
1676
gap> Length(Set(List(orb,l->l mod 4)));
1677
64
1678
gap> last = 4^3;
1679
true
1680
]]>
1681
</Example>
1682
1683
Needless to say that the latter kind of argumentation is not suitable
1684
for proving, but only for disproving <M>k</M>-transitivity.
1685
1686
</Section>
1687
1688
<!-- #################################################################### -->
1689
1690
<Section Label="sec:SlowlyContractingMapping">
1691
<Heading>
1692
An rcwa mapping which seems to be contracting, but very slow
1693
</Heading>
1694
1695
The iterates of an integer under the Collatz mapping <M>T</M> seem to
1696
approach its contraction centre -- this is the finite set where all
1697
trajectories end up after a finite number of steps -- rather quickly and
1698
do not get very large before doing so (of course this is a purely heuristic
1699
statement as the <M>3n+1</M> conjecture has not been proved so far!):
1700
1701
<Example>
1702
<![CDATA[
1703
gap> T := RcwaMapping([[1,0,2],[3,1,2]]);;
1704
gap> S0 := LikelyContractionCentre(T,100,1000);
1705
#I Warning: `LikelyContractionCentre' is highly probabilistic.
1706
The returned result can only be regarded as a rough guess.
1707
See ?LikelyContractionCentre for more information.
1708
[ -136, -91, -82, -68, -61, -55, -41, -37, -34, -25, -17, -10, -7, -5,
1709
-1, 0, 1, 2 ]
1710
gap> S0^T = S0; # This holds by definition of the contraction centre.
1711
true
1712
gap> List([1..30],n->Length(Trajectory(T,n,S0)));
1713
[ 1, 1, 5, 2, 4, 6, 11, 3, 13, 5, 10, 7, 7, 12, 12, 4, 9, 14, 14, 6, 6,
1714
11, 11, 8, 16, 8, 70, 13, 13, 13 ]
1715
gap> Maximum(List([1..1000],n->Length(Trajectory(T,n,S0))));
1716
113
1717
gap> Maximum(List([1..1000],n->Maximum(Trajectory(T,n,S0))));
1718
125252
1719
]]>
1720
</Example>
1721
1722
The following mapping seems to be contracting as well, but its trajectories
1723
are much longer:
1724
1725
<Log>
1726
<![CDATA[
1727
gap> f6 := RcwaMapping([[ 1,0,6],[ 5, 1,6],[ 7,-2,6],
1728
> [11,3,6],[11,-2,6],[11,-1,6]]);;
1729
gap> Display(f6);
1730
1731
Rcwa mapping of Z with modulus 6
1732
1733
/
1734
| n/6 if n in 0(6)
1735
| (5n+1)/6 if n in 1(6)
1736
| (7n-2)/6 if n in 2(6)
1737
n |-> < (11n+3)/6 if n in 3(6)
1738
| (11n-2)/6 if n in 4(6)
1739
| (11n-1)/6 if n in 5(6)
1740
|
1741
\
1742
1743
gap> S0 := LikelyContractionCentre(f6,1000,100000);;
1744
#I Warning: `LikelyContractionCentre' is highly probabilistic.
1745
The returned result can only be regarded as a rough guess.
1746
See ?LikelyContractionCentre for more information.
1747
gap> Trajectory(f6,25,S0);
1748
[ 25, 21, 39, 72, 12, 2 ]
1749
gap> List([1..100],n->Length(Trajectory(f6,n,S0)));
1750
[ 1, 1, 3, 4, 1, 2, 3, 2, 1, 5, 7, 2, 8, 17, 3, 16, 1, 4, 17, 6, 5, 2,
1751
5, 5, 6, 1, 4, 2, 15, 1, 1, 3, 2, 5, 13, 3, 2, 3, 4, 1, 8, 4, 4, 2, 7,
1752
19, 23517, 3, 9, 3, 1, 18, 14, 2, 20, 23512, 14, 2, 6, 6, 1, 4, 19,
1753
12, 23511, 8, 23513, 10, 1, 13, 13, 3, 1, 23517, 7, 20, 7, 9, 9, 6,
1754
12, 8, 6, 18, 14, 23516, 31, 12, 23545, 4, 21, 19, 5, 1, 17, 17, 13,
1755
19, 6, 23515 ]
1756
gap> Maximum(Trajectory(f6,47,S0));
1757
7363391777762473304431877054771075818733690108051469808715809256737742295\
1758
45698886054
1759
]]>
1760
</Log>
1761
1762
Computing the trajectory of 3224 takes quite a while -- this trajectory
1763
ascends to about <M>3 \cdot 10^{2197}</M>, before it approaches the fixed
1764
point&nbsp;2 after 19949562 steps. <P/>
1765
1766
When constructing the mapping <C>f6</C>, the denominators of the
1767
partial mappings have been chosen to be equal and the numerators have
1768
been chosen to be numbers coprime to the common denominator, whose product
1769
is just a little bit smaller than the <C>Modulus(f6)</C>th power of the
1770
denominator. In the example we have <M>5 \cdot 7 \cdot 11^3 = 46585</M>
1771
and <M>6^6 = 46656</M>. <P/>
1772
1773
Although the trajectories of <C>T</C> are much shorter than those of
1774
<C>f6</C>, it seems likely that this does not make the problem of deciding
1775
whether the mapping&nbsp;<C>T</C> is contracting essentially easier --
1776
even for mappings with much shorter trajectories than&nbsp;<C>T</C>
1777
the problem seems to be equally hard. A solution can usually only be found
1778
in trivial cases, i.e. for example when there is some <M>k</M> such that
1779
applying the <M>k</M>th power of the respective mapping to any integer
1780
decreases its absolute value. <P/>
1781
1782
Enter <C>AssignGlobals(LoadRCWAExamples().SlowlyContractingMappings);</C>
1783
in order to assign the global variables defined in this section.
1784
1785
</Section>
1786
1787
<!-- #################################################################### -->
1788
1789
<Section Label="sec:AndaloroResult">
1790
<Heading>Checking a result by P. Andaloro</Heading>
1791
1792
In <Cite Key="Andaloro00"/>, P.&nbsp;Andaloro has shown that proving that
1793
trajectories of integers <M>n \in 1(16)</M> under the Collatz mapping always
1794
contain&nbsp;1 would be sufficient to prove the <M>3n+1</M> conjecture.
1795
In the sequel, this result is verified by &RCWA;. Checking that the
1796
union of the images of the residue class 1(16) under powers of the Collatz
1797
mapping&nbsp;<M>T</M> contains <M>&ZZ; \setminus 0(3)</M> is obviously
1798
enough. Thus we put <M>S := 1(16)</M>, and successively unite the
1799
set&nbsp;<M>S</M> with its image under&nbsp;<M>T</M>:
1800
1801
<Example>
1802
<![CDATA[
1803
gap> T := RcwaMapping([[1,0,2],[3,1,2]]);
1804
<rcwa mapping of Z with modulus 2>
1805
gap> S := ResidueClass(Integers,16,1);
1806
1(16)
1807
gap> S := Union(S,S^T);
1808
1(16) U 2(24)
1809
gap> S := Union(S,S^T);
1810
1(12) U 2(24) U 17(48) U 33(48)
1811
gap> S := Union(S,S^T);
1812
<union of 30 residue classes (mod 144)>
1813
gap> S := Union(S,S^T);
1814
<union of 42 residue classes (mod 144)>
1815
gap> S := Union(S,S^T);
1816
<union of 172 residue classes (mod 432)>
1817
gap> S := Union(S,S^T);
1818
<union of 676 residue classes (mod 1296)>
1819
gap> S := Union(S,S^T);
1820
<union of 810 residue classes (mod 1296)>
1821
gap> S := Union(S,S^T);
1822
<union of 2638 residue classes (mod 3888)>
1823
gap> S := Union(S,S^T);
1824
<union of 33 residue classes (mod 48)>
1825
gap> S := Union(S,S^T);
1826
<union of 33 residue classes (mod 48)>
1827
gap> Union(S,ResidueClass(Integers,3,0)); # Et voila ...
1828
Integers
1829
]]>
1830
</Example>
1831
1832
Further similar computations are shown in
1833
Section&nbsp;<Ref Label="sec:CollatzImagesAndPreImages"/>. <P/>
1834
1835
Enter <C>AssignGlobals(LoadRCWAExamples().CollatzMapping);</C>
1836
in order to assign the global variables defined in this section.
1837
1838
</Section>
1839
1840
<!-- #################################################################### -->
1841
1842
<Section Label="sec:MatthewsLeighExamples">
1843
<Heading>Two examples by Matthews and Leigh</Heading>
1844
1845
In <Cite Key="MatthewsLeigh87"/>, K.&nbsp;R.&nbsp;Matthews and
1846
G.&nbsp;M.&nbsp;Leigh have shown that two trajectories of the following
1847
(surjective, but not injective) mappings are acyclic (mod&nbsp;<M>x</M>)
1848
and divergent:
1849
1850
<Example>
1851
<![CDATA[
1852
gap> x := Indeterminate(GF(4),1);; SetName(x,"x");
1853
gap> R := PolynomialRing(GF(2),1);
1854
GF(2)[x]
1855
gap> ML1 := RcwaMapping(R,x,[[1,0,x],[(x+1)^3,1,x]]*One(R));;
1856
gap> ML2 := RcwaMapping(R,x,[[1,0,x],[(x+1)^2,1,x]]*One(R));;
1857
gap> Display(ML1);
1858
1859
Rcwa mapping of GF(2)[x] with modulus x
1860
1861
/
1862
| P/x if P in 0(x)
1863
P |-> < ((x^3+x^2+x+1)*P + 1)/x if P in 1(x)
1864
|
1865
\
1866
1867
gap> Display(ML2);
1868
1869
Rcwa mapping of GF(2)[x] with modulus x
1870
1871
/
1872
| P/x if P in 0(x)
1873
P |-> < ((x^2+1)*P + 1)/x if P in 1(x)
1874
|
1875
\
1876
1877
gap> List([ML1,ML2],IsSurjective);
1878
[ true, true ]
1879
gap> List([ML1,ML2],IsInjective);
1880
[ false, false ]
1881
gap> traj1 := Trajectory(ML1,One(R),16);
1882
[ 1, x^2+x+1, x^4+x^2+x, x^3+x+1, x^5+x^4+x^2, x^4+x^3+x, x^3+x^2+1,
1883
x^5+x^2+1, x^7+x^6+x^5+x^3+1, x^9+x^7+x^6+x^5+x^3+x+1,
1884
x^11+x^10+x^8+x^7+x^6+x^5+x^2, x^10+x^9+x^7+x^6+x^5+x^4+x,
1885
x^9+x^8+x^6+x^5+x^4+x^3+1, x^11+x^8+x^7+x^6+x^4+x+1,
1886
x^13+x^12+x^11+x^8+x^7+x^6+x^4, x^12+x^11+x^10+x^7+x^6+x^5+x^3 ]
1887
gap> traj2 := Trajectory(ML2,(x^3+x+1)*One(R),16);
1888
[ x^3+x+1, x^4+x+1, x^5+x^3+x^2+x+1, x^6+x^3+1, x^7+x^5+x^4+x^2+x,
1889
x^6+x^4+x^3+x+1, x^7+x^4+x^3+x+1, x^8+x^6+x^5+x^4+x^3+x+1,
1890
x^9+x^6+x^3+x+1, x^10+x^8+x^7+x^5+x^4+x+1,
1891
x^11+x^8+x^7+x^5+x^4+x^3+x^2+x+1, x^12+x^10+x^9+x^8+x^7+x^5+1,
1892
x^13+x^10+x^7+x^4+x, x^12+x^9+x^6+x^3+1,
1893
x^13+x^11+x^10+x^8+x^7+x^5+x^4+x^2+x,
1894
x^12+x^10+x^9+x^7+x^6+x^4+x^3+x+1 ]
1895
]]>
1896
</Example>
1897
1898
The pattern which Matthews and Leigh used to show the divergence of the
1899
above trajectories can be recognized easily by looking at the corresponding
1900
Markov chains with the two states 0&nbsp;mod&nbsp;<M>x</M> and
1901
1&nbsp;mod&nbsp;<M>x</M>:
1902
1903
<Example>
1904
<![CDATA[
1905
gap> traj1modx := Trajectory(ML1,One(R),400,x);;
1906
gap> traj2modx := Trajectory(ML2,(x^3+x+1)*One(R),600,x);;
1907
gap> List(traj1modx{[1..150]},val->Position([Zero(R),One(R)],val)-1);
1908
[ 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1,
1909
1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1,
1910
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1,
1911
1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,
1912
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1913
1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1914
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
1915
gap> List(traj2modx{[1..150]},val->Position([Zero(R),One(R)],val)-1);
1916
[ 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1,
1917
1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1918
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
1919
1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1920
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1921
1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,
1922
0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1 ]
1923
]]>
1924
</Example>
1925
1926
What is important here are the lengths of the intervals between two changes
1927
from one state to the other:
1928
1929
<Example>
1930
<![CDATA[
1931
gap> ChangePoints := l->Filtered([1..Length(l)-1],pos->l[pos]<>l[pos+1]);;
1932
gap> Diffs := l->List([1..Length(l)-1],pos->l[pos+1]-l[pos]);;
1933
gap> Diffs(ChangePoints(traj1modx)); # The pattern in the first ...
1934
[ 1, 1, 2, 4, 2, 2, 4, 8, 4, 4, 8, 16, 8, 8, 16, 32, 16, 16, 32, 64, 32,
1935
32, 64 ]
1936
gap> Diffs(ChangePoints(traj2modx)); # ... and in the second example.
1937
[ 1, 7, 1, 1, 1, 13, 1, 1, 1, 1, 1, 1, 1, 25, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1938
1, 1, 1, 1, 1, 1, 49, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1939
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 97, 1, 1, 1, 1, 1, 1, 1,
1940
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1941
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1942
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 193, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1943
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1944
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1945
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1946
1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
1947
gap> Diffs(ChangePoints(last)); # Make this a bit more obvious.
1948
[ 1, 3, 1, 7, 1, 15, 1, 31, 1, 63, 1 ]
1949
]]>
1950
</Example>
1951
1952
This looks clearly acyclic, thus the trajectories diverge.
1953
Needless to say however that this computational evidence does not replace
1954
the proof along these lines given in the article cited above, but just
1955
sheds a light on the idea behind it. <P/>
1956
1957
Enter <C>AssignGlobals(LoadRCWAExamples().MatthewsLeigh);</C>
1958
in order to assign the global variables defined in this section.
1959
1960
</Section>
1961
1962
<!-- #################################################################### -->
1963
1964
<Section Label="sec:OrdersOfCommutators">
1965
<Heading>Orders of commutators</Heading>
1966
1967
We enter some wild rcwa permutation:
1968
1969
<Example>
1970
<![CDATA[
1971
gap> u := RcwaMapping([[3,0,5],[9,1,5],[3,-1,5],[9,-2,5],[9,4,5]]);;
1972
gap> IsTame(u);;
1973
gap> Display(u);
1974
1975
Wild rcwa permutation of Z with modulus 5
1976
1977
/
1978
| 3n/5 if n in 0(5)
1979
| (9n+1)/5 if n in 1(5)
1980
n |-> < (3n-1)/5 if n in 2(5)
1981
| (9n-2)/5 if n in 3(5)
1982
| (9n+4)/5 if n in 4(5)
1983
\
1984
]]>
1985
</Example>
1986
1987
We would like to compute the order of <M>[u,n \mapsto n + k]</M>
1988
and <M>[u^2,n \mapsto n + k]</M> for different values of&nbsp;<M>k</M>:
1989
1990
<Example>
1991
<![CDATA[
1992
gap> nu := ClassShift(0,1);; # n -> n + 1
1993
gap> l := Filtered([0..100],k->IsTame(Comm(u,nu^k)));
1994
[ 0, 2, 3, 5, 6, 9, 10, 12, 13, 15, 17, 18, 20, 21, 24, 25, 27, 28, 30,
1995
32, 33, 35, 36, 39, 40, 42, 43, 45, 47, 48, 50, 51, 54, 55, 57, 58,
1996
60, 62, 63, 65, 66, 69, 70, 72, 73, 75, 77, 78, 80, 81, 84, 85, 87,
1997
88, 90, 92, 93, 95, 96, 99, 100 ]
1998
gap> List(l,k->Order(Comm(u,nu^k)));
1999
[ 1, 6, 5, 3, 5, 5, 3, infinity, 7, infinity, 7, 5, 3, infinity,
2000
infinity, 3, 5, 7, infinity, 7, infinity, 3, 5, 5, 3, 5, infinity,
2001
infinity, infinity, 5, 3, 5, 5, 3, infinity, 7, infinity, 7, 5, 3,
2002
infinity, infinity, 3, 5, 7, infinity, 7, infinity, 3, 5, 5, 3, 5,
2003
infinity, infinity, infinity, 5, 3, 5, 5, 3 ]
2004
gap> u2 := u^2;
2005
<wild rcwa permutation of Z with modulus 25>
2006
gap> Filtered([1..16],k->IsTame(Comm(u2,nu^k))); # k<15->[u^2,nu^k] wild!
2007
[ 15 ]
2008
gap> Order(Comm(u2,nu^15));
2009
infinity
2010
gap> u2nu17 := Comm(u2,nu^17);
2011
<rcwa permutation of Z with modulus 81>
2012
gap> cycs := ShortCycles(u2nu17,[-100..100],100);;
2013
gap> List(cycs,Length);
2014
[ 72, 73, 72, 72, 72, 73, 72, 72, 73, 72, 72, 73, 72, 72, 73, 72, 72,
2015
73, 72, 72, 73, 72, 72 ]
2016
gap> Lcm(last);
2017
5256
2018
gap> u2nu17^5256; # This element has indeed order 2^3*3^2*73 = 5256.
2019
IdentityMapping( Integers )
2020
gap> u2nu18 := Comm(u2,nu^18);
2021
<rcwa permutation of Z with modulus 81>
2022
gap> cycs := ShortCycles(u2nu18,[-100..100],100);;
2023
gap> List(cycs,Length);
2024
[ 21, 22, 22, 22, 21, 22, 22, 21, 22, 22, 21, 22, 21, 22, 22, 21, 22,
2025
22, 21, 22, 22, 21, 22 ]
2026
gap> Lcm(last);
2027
462
2028
gap> u2nu18^462; # This is an element of order 2*3*7*11 = 462.
2029
IdentityMapping( Integers )
2030
gap> List([Comm(u2,nu^20),Comm(u2,nu^25),Comm(u2,nu^30)],Order);
2031
[ 29, 9, 15 ]
2032
]]>
2033
</Example>
2034
2035
We observe that our commutators have various different orders, and
2036
that the prime factors of these orders are not all <Q>very small</Q>. <P/>
2037
2038
Enter <C>AssignGlobals(LoadRCWAExamples().CollatzlikePerms);</C>
2039
in order to assign the global variables defined in this section.
2040
2041
</Section>
2042
2043
<!-- #################################################################### -->
2044
2045
<Section Label="sec:OddNumberOfGens_FiniteOrder">
2046
<Heading>
2047
An infinite subgroup of CT(GF(2)[x]) with many torsion elements
2048
</Heading>
2049
2050
In this section, we have a look at the following subgroup of CT(GF(2)[x]):
2051
2052
<Example>
2053
<![CDATA[
2054
gap> x := Indeterminate(GF(2));; SetName(x,"x");
2055
gap> R := PolynomialRing(GF(2),1);
2056
GF(2)[x]
2057
gap> a := ClassTransposition(0,x,1,x);;
2058
gap> b := ClassTransposition(0,x^2+1,1,x^2+1);;
2059
gap> c := ClassTransposition(1,x,0,x^2+x);;
2060
gap> G := Group(a,b,c);
2061
<rcwa group over GF(2)[x] with 3 generators>
2062
gap> Display(G);
2063
2064
Rcwa group over GF(2)[x], generated by
2065
2066
[
2067
Rcwa permutation of GF(2)[x]: P -> P + Z(2)^0
2068
2069
Rcwa permutation of GF(2)[x] with modulus x^2+1, of order 2
2070
2071
/
2072
| P + 1 if P in 0(x^2+1) U 1(x^2+1)
2073
P |-> < P if P in x(x^2+1) U x+1(x^2+1)
2074
|
2075
\
2076
2077
2078
Rcwa permutation of GF(2)[x] with modulus x^2+x, of order 2
2079
2080
/
2081
| (x+1)*P + x+1 if P in 1(x)
2082
P |-> < (P + x+1)/(x+1) if P in 0(x^2+x)
2083
| P if P in x(x^2+x)
2084
\
2085
2086
]
2087
]]>
2088
</Example>
2089
2090
We can easily find 2 normal subgroups of&nbsp;<C>G</C>:
2091
2092
<Example>
2093
<![CDATA[
2094
gap> N1 := Subgroup(G,[a*b,a*c]);
2095
<rcwa group over GF(2)[x] with 2 generators>
2096
gap> IsNormal(G,N1);
2097
true
2098
gap> Index(G,N1);
2099
2
2100
gap> G/N1;
2101
Group([ (1,2), (1,2), (1,2) ])
2102
gap> N2 := Subgroup(G,[a*b*c,a*c]);;
2103
gap> IsNormal(G,N2);
2104
true
2105
gap> IsSubgroup(N1,N2);
2106
false
2107
]]>
2108
</Example>
2109
2110
Products of even numbers of generators of&nbsp;<C>G</C> may have
2111
infinite order. For example, we have
2112
2113
<Example>
2114
<![CDATA[
2115
gap> Order(a*b);
2116
2
2117
gap> Order(a*c);
2118
infinity
2119
gap> Order(b*c);
2120
infinity
2121
]]>
2122
</Example>
2123
2124
We would like to have a look at orders of products of odd numbers of
2125
generators. In order to restrict our considerations to <Q>essentially
2126
different</Q> products (as far as we can easily do this), we use
2127
the following auxiliary function:
2128
2129
<Listing Type="GAP code">
2130
<![CDATA[
2131
NormedWords := function ( F, lng )
2132
2133
local words, gens, tuples, w;
2134
2135
gens := GeneratorsOfGroup(F);
2136
tuples := EnumeratorOfTuples([1..3],lng);
2137
words := [];
2138
2139
for w in tuples do
2140
if (w[1] = 1 or not 1 in w)
2141
and PositionSublist(w,[1,1]) = fail
2142
and PositionSublist(w,[2,2]) = fail
2143
and PositionSublist(w,[3,3]) = fail
2144
and PositionSublist(w,[2,1]) = fail
2145
and w[1] < w[lng]
2146
and w{[1,lng]} <> [1,2]
2147
and (w{[1..3]} = [1,2,3] or PositionSublist(w,[1,2,3]) = fail)
2148
then Add(words,w); fi;
2149
od;
2150
2151
words := List(words,word->Product(List(word,i->gens[i])));
2152
return words;
2153
end;
2154
]]>
2155
</Listing>
2156
2157
Now let's compute the possible orders of products of 3, 5, 7 or 9 generators:
2158
2159
<Log>
2160
<![CDATA[
2161
gap> F := FreeGroup("a","b","c");;
2162
gap> phi := EpimorphismByGenerators(F,G);
2163
[ a, b, c ] ->
2164
[ ClassTransposition(0,x,1,x), ClassTransposition(0,x^2+1,1,x^2+1),
2165
ClassTransposition(1,x,0,x^2+x) ]
2166
gap> B3 := NormedWords(F,3);
2167
[ a*b*c ]
2168
gap> B3 := List(B3,g->g^phi);
2169
[ <rcwa permutation of GF(2)[x] with modulus x^3+x> ]
2170
gap> List(B3,Order);
2171
[ 20 ]
2172
gap> B5 := NormedWords(F,5);
2173
[ a*b*c*a*c, a*b*c*b*c ]
2174
gap> B5 := List(B5,g->g^phi);
2175
[ <rcwa permutation of GF(2)[x] with modulus x^3+x>,
2176
<rcwa permutation of GF(2)[x] with modulus x^4+x^3+x^2+x> ]
2177
gap> List(B5,Order);
2178
[ 12, 12 ]
2179
gap> B7 := NormedWords(F,7);
2180
[ a*b*c*a*c*a*c, a*b*c*a*c*b*c, a*b*c*b*c*a*c, a*b*c*b*c*b*c ]
2181
gap> B7 := List(B7,g->g^phi);
2182
[ <rcwa permutation of GF(2)[x] with modulus x^4+x^3+x^2+x>,
2183
<rcwa permutation of GF(2)[x] with modulus x^5+x>,
2184
<rcwa permutation of GF(2)[x] with modulus x^4+x^3+x^2+x>,
2185
<rcwa permutation of GF(2)[x] with modulus x^5+x> ]
2186
gap> List(B7,Order);
2187
[ 12, 12, 12, 30 ]
2188
gap> B9 := NormedWords(F,9);
2189
[ a*b*c*a*b*c*a*b*c, a*b*c*a*c*a*c*a*c, a*b*c*a*c*a*c*b*c, a*b*c*a*c*b*c*a*c,
2190
a*b*c*a*c*b*c*b*c, a*b*c*b*c*a*c*a*c, a*b*c*b*c*a*c*b*c, a*b*c*b*c*b*c*a*c,
2191
a*b*c*b*c*b*c*b*c ]
2192
gap> B9 := List(B9,g->g^phi);;
2193
gap> List(B9,Order);
2194
[ 20, 4, 30, 12, 42, 30, 4, 42, 12 ]
2195
]]>
2196
</Log>
2197
2198
Enter <C>AssignGlobals(LoadRCWAExamples().OddNumberOfGens_FiniteOrder);</C>
2199
in order to assign the global variables defined in this section.
2200
2201
</Section>
2202
2203
<!-- #################################################################### -->
2204
2205
<Section Label="sec:AbelianGroupOverPolynomialRing">
2206
<Heading>An abelian rcwa group over a polynomial ring</Heading>
2207
2208
We enter a 2-generated abelian wild rcwa group over GF(4)[<M>x</M>]:
2209
2210
<Example>
2211
<![CDATA[
2212
gap> x := Indeterminate(GF(4),1);; SetName(x,"x");
2213
gap> R := PolynomialRing(GF(4),1);
2214
GF(2^2)[x]
2215
gap> e := One(GF(4));;
2216
gap> p := x^2 + x + e;; q := x^2 + e;;
2217
gap> r := x^2 + x + Z(4);; s := x^2 + x + Z(4)^2;;
2218
gap> cg := List( AllResidues(R,x^2), pol -> [ p, p * pol mod q, q ] );;
2219
gap> ch := List( AllResidues(R,x^2), pol -> [ r, r * pol mod s, s ] );;
2220
gap> g := RcwaMapping( R, q, cg );
2221
<rcwa mapping of GF(2^2)[x] with modulus x^2+1>
2222
gap> h := RcwaMapping( R, s, ch );
2223
<rcwa mapping of GF(2^2)[x] with modulus x^2+x+Z(2^2)^2>
2224
gap> List([g,h],IsTame);
2225
[ false, false ]
2226
gap> G := Group(g,h);
2227
<rcwa group over GF(2^2)[x] with 2 generators>
2228
gap> IsAbelian(G);
2229
true
2230
gap> IsTame(G);
2231
false
2232
]]>
2233
</Example>
2234
2235
It is easy to see that all orbits on GF(4)[<M>x</M>] under the action
2236
of <C>G</C> are finite. <P/>
2237
2238
Now we compute the action of the group <C>G</C> on one of its orbits, and
2239
make some statistics of the orbits of <C>G</C> containing polynomials of
2240
degree less than&nbsp;4:
2241
2242
<Example>
2243
<![CDATA[
2244
gap> orb := Orbit(G,x^5);
2245
[ x^5, x^5+x^4+x^2+1, x^5+x^3+x^2+Z(2^2)*x+Z(2)^0, x^5+x^3,
2246
x^5+x^4+x^3+x^2+Z(2^2)^2*x+Z(2^2)^2, x^5+x, x^5+x^4+x^3,
2247
x^5+x^2+Z(2^2)^2*x, x^5+x^4+x^2+x, x^5+x^3+x^2+Z(2^2)^2*x+Z(2)^0,
2248
x^5+x^4+Z(2^2)*x+Z(2^2), x^5+x^3+x, x^5+x^4+x^3+x^2+Z(2^2)*x+Z(2^2),
2249
x^5+x^4+x^3+x+1, x^5+x^2+Z(2^2)*x, x^5+x^4+Z(2^2)^2*x+Z(2^2)^2 ]
2250
gap> H := Action(G,orb);
2251
Group([ (1,2,4,7,6,9,12,14)(3,5,8,11,10,13,15,16),
2252
(1,3,6,10)(2,5,9,13)(4,8,12,15)(7,11,14,16) ])
2253
gap> IsAbelian(H); # check ...
2254
true
2255
gap> IsCyclic(H); # H, and therefore also G, is not cyclic
2256
false
2257
gap> Exponent(H);
2258
8
2259
gap> Collected(List(ShortOrbits(G,AllResidues(R,x^4),100),Length));
2260
[ [ 1, 4 ], [ 2, 6 ], [ 4, 12 ], [ 8, 24 ] ]
2261
]]>
2262
</Example>
2263
2264
Changing the generators a little changes the structure of the group
2265
and its action on the underlying ring a lot:
2266
2267
<Example>
2268
<![CDATA[
2269
gap> cg[1][2] := cg[1][2] + (x^2 + e) * p * q;;
2270
gap> ch[7][2] := ch[7][2] + x * r * s;;
2271
gap> g := RcwaMapping( R, q, cg );; h := RcwaMapping( R, s, ch );;
2272
gap> G := Group(g,h);
2273
<rcwa group over GF(2^2)[x] with 2 generators>
2274
gap> IsAbelian(G);
2275
false
2276
gap> Support(G);
2277
GF(2^2)[x] \ [ 1, Z(2^2), Z(2^2)^2 ]
2278
gap> orb := Orbit(G,Zero(R));;
2279
gap> Length(orb);
2280
87
2281
gap> StructureDescription(Action(G,orb));
2282
"A87"
2283
gap> Collected(List(orb,DegreeOfLaurentPolynomial));
2284
[ [ -infinity, 1 ], [ 1, 2 ], [ 2, 4 ], [ 3, 16 ], [ 4, 64 ] ]
2285
gap> S := AllResidues(R,x^6);;
2286
gap> orbs := ShortOrbits(G,S,-1:finite);;
2287
gap> List(orbs,Length);
2288
[ 87, 1, 1, 1, 2, 2, 2, 2, 2, 4, 4, 4, 20, 4, 12, 4, 20, 4, 4, 12, 8, 8,
2289
48, 48, 16, 8, 8, 56, 8, 88, 8, 8, 8, 400, 16, 48, 16, 16, 16, 80, 16,
2290
16, 16, 96, 32, 192, 32, 16, 16, 416, 16, 48, 16, 16, 880, 16, 16, 16,
2291
16, 16, 16, 16, 16, 16, 848, 16, 16, 32, 16, 16, 16, 16, 16, 16, 16 ]
2292
gap> Position(last,880);
2293
55
2294
gap> Set(orbs[55],DegreeOfLaurentPolynomial); # all elm's have same degree
2295
[ 5 ]
2296
gap> H := Action(G,orbs[55]);;
2297
gap> IsPrimitive(H,MovedPoints(H));
2298
false
2299
gap> List(Blocks(H,MovedPoints(H)),Length);
2300
[ 110, 110, 110, 110, 110, 110, 110, 110 ]
2301
]]>
2302
</Example>
2303
2304
Enter <C>AssignGlobals(LoadRCWAExamples().AbelianGroupOverPolynomialRing);</C>
2305
in order to assign the global variables defined in this section.
2306
2307
</Section>
2308
2309
<!-- #################################################################### -->
2310
2311
<Section Label="sec:CheckingForSolvability">
2312
<Heading>Checking for solvability</Heading>
2313
2314
Presently there is no general method available for testing wild rcwa groups
2315
for solvability. However, sometimes the question for solvability can be
2316
answered anyway.
2317
In the example below, the idea is to find a subgroup&nbsp;<A>U</A> which acts
2318
on a finite set&nbsp;<A>S</A> of integers, and which induces on&nbsp;<A>S</A>
2319
a non-solvable finite permutation group:
2320
2321
<Example>
2322
<![CDATA[
2323
gap> a := RcwaMapping([[3,0,2],[3, 1,4],[3,0,2],[3,-1,4]]);;
2324
gap> b := RcwaMapping([[3,0,2],[3,13,4],[3,0,2],[3,-1,4]]);;
2325
gap> G := Group(a,b);;
2326
gap> ShortOrbits(Group(Comm(a,b)),[-10..10],100);
2327
[ [ -10 ], [ -9 ], [ -30, -21, -14, -13, -11, -8 ], [ -7 ], [ -6 ],
2328
[ -12, -5, -4, -3, -2, 1 ], [ -1 ], [ 0 ], [ 2 ], [ 3 ],
2329
[ 4, 5, 6, 7, 10, 15 ], [ 8 ], [ 9 ] ]
2330
gap> S := [ 4, 5, 6, 7, 10, 15 ];;
2331
gap> Cycle(Comm(a,b),4);
2332
[ 4, 7, 10, 15, 5, 6 ]
2333
gap> elm := RepresentativeAction(G,S,Permuted(S,(1,4)),OnTuples);
2334
<rcwa permutation of Z with modulus 81>
2335
gap> List(S,n->n^elm);
2336
[ 7, 5, 6, 4, 10, 15 ]
2337
gap> U := Group(Comm(a,b),elm);
2338
<rcwa group over Z with 2 generators>
2339
gap> Action(U,S);
2340
Group([ (1,4,5,6,2,3), (1,4) ])
2341
gap> IsNaturalSymmetricGroup(last);
2342
true
2343
]]>
2344
</Example>
2345
2346
Thus the subgroup <A>U</A> induces on <A>S</A> a natural symmetric group of
2347
degree&nbsp;6. Therefore the group&nbsp;<A>G</A> is not solvable.
2348
We conclude this example by factoring the group element <A>elm</A> into
2349
generators:
2350
2351
<Example>
2352
<![CDATA[
2353
gap> F := FreeGroup("a","b");
2354
<free group on the generators [ a, b ]>
2355
gap> RepresentativeActionPreImage(G,S,Permuted(S,(1,4)),OnTuples,F);
2356
a^-2*b^-2*a*b*a^-1*b*a*b^-2*a
2357
gap> a^-2*b^-2*a*b*a^-1*b*a*b^-2*a = elm;
2358
true
2359
]]>
2360
</Example>
2361
2362
Enter <C>AssignGlobals(LoadRCWAExamples().CheckingForSolvability);</C>
2363
in order to assign the global variables defined in this section.
2364
2365
</Section>
2366
2367
<!-- #################################################################### -->
2368
2369
<Section Label="sec:LocalExample">
2370
<Heading>Some examples over (semi)localizations of the integers</Heading>
2371
2372
We start with something one can observe when trying to <Q>transfer</Q> an
2373
rcwa mapping from the ring of integers to one of its localizations:
2374
2375
<Example>
2376
<![CDATA[
2377
gap> a := RcwaMapping([[3,0,2],[3,1,4],[3,0,2],[3,-1,4]]);;
2378
gap> IsBijective(a);
2379
true
2380
gap> a2 := LocalizedRcwaMapping(a,2);
2381
<rcwa mapping of Z_( 2 ) with modulus 4>
2382
gap> IsSurjective(a2); # As expected
2383
true
2384
gap> IsInjective(a2); # Why not??
2385
false
2386
gap> 0^a2;
2387
0
2388
gap> (1/3)^a2; # That's the reason!
2389
0
2390
]]>
2391
</Example>
2392
2393
The above can also be explained easily by pointing out that the
2394
modulus of the inverse of <C>a</C> is&nbsp;3, and that 3 is a unit
2395
of&nbsp;<M>&ZZ;_{(2)}</M>.
2396
Moving to <M>&ZZ;_{(2,3)}</M> solves this problem:
2397
2398
<Example>
2399
<![CDATA[
2400
gap> a23 := SemilocalizedRcwaMapping(a,[2,3]);
2401
<rcwa mapping of Z_( 2, 3 ) with modulus 4>
2402
gap> IsBijective(a23);
2403
true
2404
]]>
2405
</Example>
2406
2407
We get additional finite cycles, e.g.:
2408
2409
<Example>
2410
<![CDATA[
2411
gap> List(ShortOrbits(Group(a23),[0..50]/5,50),orb->Cycle(a23,orb[1]));
2412
[ [ 0 ], [ 1/5, 2/5, 3/5 ],
2413
[ 4/5, 6/5, 9/5, 8/5, 12/5, 18/5, 27/5, 19/5, 13/5, 11/5, 7/5 ],
2414
[ 1 ], [ 2, 3 ], [ 14/5, 21/5, 17/5 ],
2415
[ 16/5, 24/5, 36/5, 54/5, 81/5, 62/5, 93/5, 71/5, 52/5, 78/5, 117/5,
2416
89/5, 68/5, 102/5, 153/5, 116/5, 174/5, 261/5, 197/5, 149/5,
2417
113/5, 86/5, 129/5, 98/5, 147/5, 109/5, 83/5, 61/5, 47/5, 34/5,
2418
51/5, 37/5, 29/5, 23/5 ], [ 4, 6, 9, 7, 5 ] ]
2419
gap> List(last,Length);
2420
[ 1, 3, 11, 1, 2, 3, 34, 5 ]
2421
gap> List(ShortOrbits(Group(a23),[0..50]/7,50),orb->Cycle(a23,orb[1]));
2422
[ [ 0 ], [ -1/7, 1/7 ], [ 2/7, 3/7, 4/7, 6/7, 9/7, 5/7 ], [ 1 ],
2423
[ 2, 3 ], [ 4, 6, 9, 7, 5 ] ]
2424
gap> List(last,Length);
2425
[ 1, 2, 6, 1, 2, 5 ]
2426
]]>
2427
</Example>
2428
2429
However the structure of a group with prime set <M>\mathbb{P}</M>
2430
remains invariant under the <Q>transfer</Q> from &ZZ;
2431
to&nbsp;<M>&ZZ;_{(\mathbb{P})}</M>. <P/>
2432
2433
<Q>Transferring</Q> a non-invertible rcwa mapping from the ring of integers
2434
to some of its (semi)localizations can also turn it into an invertible one:
2435
2436
<Example>
2437
<![CDATA[
2438
gap> v := RcwaMapping([[6,0,1],[1,-7,2],[6,0,1],[1,-1,1],
2439
> [6,0,1],[1, 1,2],[6,0,1],[1,-1,1]]);;
2440
gap> Display(v);
2441
2442
Rcwa mapping of Z with modulus 8
2443
2444
/
2445
| 6n if n in 0(2)
2446
| n-1 if n in 3(4)
2447
n |-> < (n-7)/2 if n in 1(8)
2448
| (n+1)/2 if n in 5(8)
2449
|
2450
\
2451
2452
gap> IsInjective(v);
2453
true
2454
gap> IsSurjective(v);
2455
false
2456
gap> Image(v);
2457
Z \ 4(12) U 8(12)
2458
gap> Difference(Integers,last);
2459
4(12) U 8(12)
2460
gap> v2 := LocalizedRcwaMapping(v,2);
2461
<rcwa mapping of Z_( 2 ) with modulus 8>
2462
gap> IsBijective(v2);
2463
true
2464
gap> Display(v2^-1);
2465
2466
Rcwa permutation of Z_( 2 ) with modulus 4
2467
2468
/
2469
| 1/3 n / 2 if n in 0(4)
2470
| 2 n + 7 if n in 1(4)
2471
n |-> < n + 1 if n in 2(4)
2472
| 2 n - 1 if n in 3(4)
2473
|
2474
\
2475
2476
gap> S := ResidueClass(Z_pi(2),2,0);; l := [S];;
2477
gap> for i in [1..10] do Add(l,l[Length(l)]^v2); od;
2478
gap> l; # Visibly v2 is wild ...
2479
[ 0(2), 0(4), 0(8), 0(16), 0(32), 0(64), 0(128), 0(256), 0(512),
2480
0(1024), 0(2048) ]
2481
gap> w2 := RcwaMapping(Z_pi(2),[[1,0,2],[2,-1,1],[1,1,1],[2,-1,1]]);;
2482
gap> v2w2 := Comm(v2,w2);; v2w2^-1;;
2483
gap> Display(v2w2);
2484
2485
Rcwa permutation of Z_( 2 ) with modulus 8
2486
2487
/
2488
| 3 n if n in 2(4)
2489
| n + 4 if n in 1(8)
2490
n |-> < n - 4 if n in 5(8)
2491
| n if n in 0(4) U 3(4)
2492
|
2493
\
2494
]]>
2495
</Example>
2496
2497
Again, viewed as an rcwa mapping of the integers the commutator given at
2498
the end of the example would not be surjective. <P/>
2499
2500
Enter <C>AssignGlobals(LoadRCWAExamples().Semilocals);</C>
2501
in order to assign the global variables defined in this section.
2502
2503
</Section>
2504
2505
<!-- #################################################################### -->
2506
2507
<Section Label="sec:Twisting257CyclesToModulus32">
2508
<Heading>
2509
Twisting 257-cycles into an rcwa mapping with modulus 32
2510
</Heading>
2511
2512
We define an rcwa mapping <A>x</A> of order&nbsp;257 with modulus&nbsp;32.
2513
The easiest way to construct such a mapping is to prescribe a transition
2514
graph and then to assign suitable affine mappings to its vertices.
2515
2516
<Example>
2517
<![CDATA[
2518
gap> x_257 := RcwaMapping(
2519
> [[ 16, 2, 1], [ 16, 18, 1], [ 1, 16, 1], [ 16, 18, 1],
2520
> [ 1, 16, 1], [ 16, 18, 1], [ 1, 16, 1], [ 16, 18, 1],
2521
> [ 1, 16, 1], [ 16, 18, 1], [ 1, 16, 1], [ 16, 18, 1],
2522
> [ 1, 16, 1], [ 16, 18, 1], [ 1, 16, 1], [ 16, 18, 1],
2523
> [ 1, 0, 16], [ 16, 18, 1], [ 1,-14, 1], [ 16, 18, 1],
2524
> [ 1,-14, 1], [ 16, 18, 1], [ 1,-14, 1], [ 16, 18, 1],
2525
> [ 1,-14, 1], [ 16, 18, 1], [ 1,-14, 1], [ 16, 18, 1],
2526
> [ 1,-14, 1], [ 16, 18, 1], [ 1,-14, 1], [ 1,-31, 1]]);;
2527
gap> Order(x_257);; Display(x_257:CycleNotation:=false);
2528
2529
Rcwa permutation of Z with modulus 32, of order 257
2530
2531
/
2532
| 16n+18 if n in 1(2) \ 31(32)
2533
| n+16 if n in 2(32) U 4(32) U 6(32) U 8(32) U 10(32) U
2534
| 12(32) U 14(32)
2535
| n-14 if n in 18(32) U 20(32) U 22(32) U 24(32) U 26(32) U
2536
n |-> < 28(32) U 30(32)
2537
| 16n+2 if n in 0(32)
2538
| n/16 if n in 16(32)
2539
| n-31 if n in 31(32)
2540
|
2541
\
2542
2543
gap> Display(x_257);
2544
2545
Rcwa permutation of Z with modulus 32, of order 257
2546
2547
( 0(32), 2(512), 18(512), 4(512), 20(512), 6(512), 22(512),
2548
8(512), 24(512), 10(512), 26(512), 12(512), 28(512), 14(512),
2549
30(512), 16(512), 1(32), 34(512), 50(512), 36(512), 52(512),
2550
38(512), 54(512), 40(512), 56(512), 42(512), 58(512), 44(512),
2551
60(512), 46(512), 62(512), 48(512), 3(32), 66(512), 82(512),
2552
68(512), 84(512), 70(512), 86(512), 72(512), 88(512), 74(512),
2553
90(512), 76(512), 92(512), 78(512), 94(512), 80(512), 5(32),
2554
98(512), 114(512), 100(512), 116(512), 102(512), 118(512),
2555
104(512), 120(512), 106(512), 122(512), 108(512), 124(512),
2556
110(512), 126(512), 112(512), 7(32), 130(512), 146(512),
2557
132(512), 148(512), 134(512), 150(512), 136(512), 152(512),
2558
138(512), 154(512), 140(512), 156(512), 142(512), 158(512),
2559
144(512), 9(32), 162(512), 178(512), 164(512), 180(512),
2560
166(512), 182(512), 168(512), 184(512), 170(512), 186(512),
2561
172(512), 188(512), 174(512), 190(512), 176(512), 11(32),
2562
194(512), 210(512), 196(512), 212(512), 198(512), 214(512),
2563
200(512), 216(512), 202(512), 218(512), 204(512), 220(512),
2564
206(512), 222(512), 208(512), 13(32), 226(512), 242(512),
2565
228(512), 244(512), 230(512), 246(512), 232(512), 248(512),
2566
234(512), 250(512), 236(512), 252(512), 238(512), 254(512),
2567
240(512), 15(32), 258(512), 274(512), 260(512), 276(512),
2568
262(512), 278(512), 264(512), 280(512), 266(512), 282(512),
2569
268(512), 284(512), 270(512), 286(512), 272(512), 17(32),
2570
290(512), 306(512), 292(512), 308(512), 294(512), 310(512),
2571
296(512), 312(512), 298(512), 314(512), 300(512), 316(512),
2572
302(512), 318(512), 304(512), 19(32), 322(512), 338(512),
2573
324(512), 340(512), 326(512), 342(512), 328(512), 344(512),
2574
330(512), 346(512), 332(512), 348(512), 334(512), 350(512),
2575
336(512), 21(32), 354(512), 370(512), 356(512), 372(512),
2576
358(512), 374(512), 360(512), 376(512), 362(512), 378(512),
2577
364(512), 380(512), 366(512), 382(512), 368(512), 23(32),
2578
386(512), 402(512), 388(512), 404(512), 390(512), 406(512),
2579
392(512), 408(512), 394(512), 410(512), 396(512), 412(512),
2580
398(512), 414(512), 400(512), 25(32), 418(512), 434(512),
2581
420(512), 436(512), 422(512), 438(512), 424(512), 440(512),
2582
426(512), 442(512), 428(512), 444(512), 430(512), 446(512),
2583
432(512), 27(32), 450(512), 466(512), 452(512), 468(512),
2584
454(512), 470(512), 456(512), 472(512), 458(512), 474(512),
2585
460(512), 476(512), 462(512), 478(512), 464(512), 29(32),
2586
482(512), 498(512), 484(512), 500(512), 486(512), 502(512),
2587
488(512), 504(512), 490(512), 506(512), 492(512), 508(512),
2588
494(512), 510(512), 496(512), 31(32) )
2589
2590
gap> Length(Cycle(x_257,0));
2591
257
2592
]]>
2593
</Example>
2594
2595
Enter <C>AssignGlobals(LoadRCWAExamples().LongCyclesOfPrimeLength);</C>
2596
in order to assign the global variables defined in this section.
2597
2598
</Section>
2599
2600
<!-- #################################################################### -->
2601
2602
<Section Label="sec:ModuliOfPowers">
2603
<Heading> The behaviour of the moduli of powers </Heading>
2604
2605
We give some examples of how the series of the moduli of powers of a given
2606
rcwa mapping of the integers can look like.
2607
2608
<Example>
2609
<![CDATA[
2610
gap> a := RcwaMapping([[3,0,2],[3, 1,4],[3,0,2],[3,-1,4]]);;
2611
gap> List([0..4],i->Modulus(a^i));
2612
[ 1, 4, 16, 64, 256 ]
2613
gap> e1 := RcwaMapping([[1,4,1],[2,0,1],[1,0,2],[2,0,1]]);;
2614
gap> e2 := RcwaMapping([[1,4,1],[2,0,1],[1,0,2],[1,0,1],
2615
> [1,4,1],[2,0,1],[1,0,1],[1,0,1]]);;
2616
gap> List([e1,e2],Order);
2617
[ infinity, infinity ]
2618
gap> List([1..20],i->Modulus(e1^i));
2619
[ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 ]
2620
gap> List([1..20],i->Modulus(e2^i));
2621
[ 8, 4, 8, 4, 8, 4, 8, 4, 8, 4, 8, 4, 8, 4, 8, 4, 8, 4, 8, 4 ]
2622
gap> Display(e2);
2623
2624
Rcwa permutation of Z with modulus 8, of order infinity
2625
2626
/
2627
| n+4 if n in 0(4)
2628
| 2n if n in 1(4)
2629
n |-> < n/2 if n in 2(8)
2630
| n if n in 3(4) U 6(8)
2631
|
2632
\
2633
2634
gap> e2^2 = Restriction(RcwaMapping([[1,2,1]]),RcwaMapping([[4,0,1]]));
2635
true
2636
gap> g:=RcwaMapping([[2,2,1],[1, 4,1],[1,0,2],[2,2,1],[1,-4,1],[1,-2,1]]);;
2637
gap> h:=RcwaMapping([[2,2,1],[1,-2,1],[1,0,2],[2,2,1],[1,-1,1],[1, 1,1]]);;
2638
gap> List([0..7],i->Modulus(g^i));
2639
[ 1, 6, 12, 12, 12, 12, 6, 1 ]
2640
gap> List([1..18],i->Modulus((g^3*h)^i));
2641
[ 12, 6, 12, 12, 12, 6, 12, 6, 12, 12, 12, 6, 12, 6, 12, 12, 12, 6 ]
2642
gap> u := RcwaMapping([[3,0,5],[9,1,5],[3,-1,5],[9,-2,5],[9,4,5]]);;
2643
gap> List([0..3],i->Modulus(u^i));
2644
[ 1, 5, 25, 125 ]
2645
gap> v6 := RcwaMapping([[-1,2,1],[1,-1,1],[1,-1,1]]);;
2646
gap> List([0..6],i->Modulus(v6^i));
2647
[ 1, 3, 3, 3, 3, 3, 1 ]
2648
gap> w8 := RcwaMapping([[-1,3,1],[1,-1,1],[1,-1,1],[1,-1,1]]);;
2649
gap> List([0..8],i->Modulus(w8^i));
2650
[ 1, 4, 4, 4, 4, 4, 4, 4, 1 ]
2651
gap> z := RcwaMapping([[2,1,1],[1, 1,1],[2,-1,1],[2, -2,1],
2652
> [1,6,2],[1, 1,1],[1,-6,2],[2, 5,1],
2653
> [1,6,2],[1, 1,1],[1, 1,1],[2, -5,1],
2654
> [1,0,1],[1,-4,1],[1, 0,1],[2,-10,1]]);;
2655
gap> IsBijective(z);
2656
true
2657
gap> List([0..25],i->Modulus(z^i));
2658
[ 1, 16, 32, 64, 64, 128, 128, 128, 128, 128, 128, 256, 256, 256, 256,
2659
256, 256, 512, 512, 512, 512, 512, 512, 1024, 1024, 1024 ]
2660
]]>
2661
</Example>
2662
2663
Enter <C>AssignGlobals(LoadRCWAExamples().ModuliOfPowers);</C>
2664
in order to assign the global variables defined in this section.
2665
2666
</Section>
2667
2668
<!-- #################################################################### -->
2669
2670
<Section Label="sec:CollatzImagesAndPreImages">
2671
<Heading> Images and preimages under the Collatz mapping </Heading>
2672
2673
We have a look at the images of the residue class 1(2)
2674
under powers of the Collatz mapping.
2675
2676
<Example>
2677
<![CDATA[
2678
gap> T := RcwaMapping([[1,0,2],[3,1,2]]);;
2679
gap> S0 := ResidueClass(Integers,2,1);;
2680
gap> S1 := S0^T;
2681
2(3)
2682
gap> S2 := S1^T;
2683
1(3) U 8(9)
2684
gap> S3 := S2^T;
2685
2(3) U 4(9)
2686
gap> S4 := S3^T;
2687
Z \ 0(3) U 5(9)
2688
gap> S5 := S4^T;
2689
Z \ 0(3) U 7(9)
2690
gap> S6 := S5^T;
2691
Z \ 0(3)
2692
gap> S7 := S6^T;
2693
Z \ 0(3)
2694
]]>
2695
</Example>
2696
2697
Thus the image gets stable after applying the mapping <M>T</M> for
2698
the 6th time. Hence <M>T^6</M> maps the residue class 1(2) surjectively
2699
onto the union of the residue classes 1(3) and 2(3), which <M>T</M>
2700
stabilizes setwise.
2701
Now we would like to determine the preimages of 1(3) and 2(3) in 1(2)
2702
under <M>T^6</M>. The residue class 1(2) has to be the disjoint union of
2703
these sets.
2704
2705
<Example>
2706
<![CDATA[
2707
gap> U := Intersection(PreImage(T^6,ResidueClass(Integers,3,1)),S0);
2708
<union of 11 residue classes (mod 64)>
2709
gap> V := Intersection(PreImage(T^6,ResidueClass(Integers,3,2)),S0);
2710
<union of 21 residue classes (mod 64)>
2711
gap> AsUnionOfFewClasses(U);
2712
[ 1(64), 5(64), 7(64), 9(64), 21(64), 23(64), 29(64), 31(64), 49(64),
2713
51(64), 59(64) ]
2714
gap> AsUnionOfFewClasses(V);
2715
[ 3(32), 11(32), 13(32), 15(32), 25(32), 17(64), 19(64), 27(64), 33(64),
2716
37(64), 39(64), 41(64), 53(64), 55(64), 61(64), 63(64) ]
2717
gap> Union(U,V) = S0 and Intersection(U,V) = []; # consistency check
2718
true
2719
]]>
2720
</Example>
2721
2722
The images of the residue class 0(3) under powers of&nbsp;<M>T</M> look
2723
as follows:
2724
2725
<Example>
2726
<![CDATA[
2727
gap> S0 := ResidueClass(Integers,3,0);
2728
0(3)
2729
gap> S1 := S0^T;
2730
0(3) U 5(9)
2731
gap> S2 := S1^T;
2732
0(3) U 5(9) U 7(9) U 8(27)
2733
gap> S3 := S2^T;
2734
<union of 20 residue classes (mod 27) (6 classes)>
2735
gap> S4 := S3^T;
2736
<union of 73 residue classes (mod 81)>
2737
gap> S5 := S4^T;
2738
Z \ 10(81) U 37(81)
2739
gap> S6 := S5^T;
2740
Integers
2741
gap> S7 := S6^T;
2742
Integers
2743
]]>
2744
</Example>
2745
2746
Thus every integer is the image of a multiple of&nbsp;3
2747
under&nbsp;<M>T^6</M>. This means that it would be sufficient to prove the
2748
<M>3n+1</M> conjecture for multiples of&nbsp;3.
2749
We can obtain the corresponding result for multiples of&nbsp;5 as follows:
2750
2751
<Example>
2752
<![CDATA[
2753
gap> S := [ResidueClass(Integers,5,0)];
2754
[ 0(5) ]
2755
gap> for i in [1..12] do Add(S,S[i]^T); od;
2756
gap> for s in S do View(s); Print("\n"); od;
2757
0(5)
2758
0(5) U 8(15)
2759
0(5) U 4(15) U 8(15)
2760
0(5) U 2(15) U 4(15) U 8(15) U 29(45)
2761
<union of 73 residue classes (mod 135)>
2762
<union of 244 residue classes (mod 405)>
2763
<union of 784 residue classes (mod 1215)>
2764
<union of 824 residue classes (mod 1215)>
2765
<union of 2593 residue classes (mod 3645)>
2766
<union of 2647 residue classes (mod 3645)>
2767
<union of 2665 residue classes (mod 3645)>
2768
<union of 2671 residue classes (mod 3645)>
2769
1(3) U 2(3) U 0(15)
2770
gap> Union(S[13],ResidueClass(Integers,3,0));
2771
Integers
2772
gap> List(S,Si->Float(Density(Si)));
2773
[ 0.2, 0.266667, 0.333333, 0.422222, 0.540741, 0.602469, 0.645267,
2774
0.678189, 0.711385, 0.7262, 0.731139, 0.732785, 0.733333 ]
2775
]]>
2776
</Example>
2777
2778
Enter <C>AssignGlobals(LoadRCWAExamples().CollatzMapping);</C>
2779
in order to assign the global variables defined in this section.
2780
2781
</Section>
2782
2783
<!-- #################################################################### -->
2784
2785
<Section Label="sec:Sigma_T">
2786
<Heading>
2787
An extension of the Collatz mapping T to a permutation of <M>&ZZ;^2</M>
2788
</Heading>
2789
2790
The Collatz mapping&nbsp;<M>T</M> is surjective, but not injective:
2791
2792
<Example>
2793
<![CDATA[
2794
gap> T := RcwaMapping([[1,0,2],[3,1,2]]);;
2795
gap> Display(T);
2796
2797
Rcwa mapping of Z with modulus 2
2798
2799
/
2800
| n/2 if n in 0(2)
2801
n |-> < (3n+1)/2 if n in 1(2)
2802
|
2803
\
2804
2805
gap> IsInjective(T); IsSurjective(T);
2806
false
2807
true
2808
gap> PreImages(T,2);
2809
[ 1, 4 ]
2810
]]>
2811
</Example>
2812
2813
Often, dealing with rcwa permutations is easier.
2814
Indeed the Collatz mapping&nbsp;<M>T</M> can be extended in natural
2815
ways to permutations of&nbsp;<M>&ZZ;^2</M>. For example, the following
2816
permutation acts on the second coordinate just like&nbsp;<M>T</M>:
2817
2818
<Example>
2819
<![CDATA[
2820
gap> Sigma_T := RcwaMapping( Integers^2, [[1,0],[0,6]],
2821
> [[[[2,0],[0,1]],[0,0],2],
2822
> [[[4,0],[0,3]],[2,1],2],
2823
> [[[2,0],[0,1]],[0,0],2],
2824
> [[[4,0],[0,3]],[2,1],2],
2825
> [[[4,0],[0,1]],[0,0],2],
2826
> [[[4,0],[0,3]],[2,1],2]] );
2827
<rcwa mapping of Z^2 with modulus (1,0)Z+(0,6)Z>
2828
gap> IsBijective(Sigma_T);
2829
true
2830
gap> Display(Sigma_T);
2831
2832
Rcwa permutation of Z^2 with modulus (1,0)Z+(0,6)Z
2833
2834
/
2835
| (2m+1,(3n+1)/2) if (m,n) in (0,1)+(1,0)Z+(0,2)Z
2836
| (m,n/2) if (m,n) in (0,0)+(1,0)Z+(0,6)Z U
2837
(m,n) |-> < (0,2)+(1,0)Z+(0,6)Z
2838
| (2m,n/2) if (m,n) in (0,4)+(1,0)Z+(0,6)Z
2839
|
2840
\
2841
2842
gap> Display(Sigma_T^-1);
2843
2844
Rcwa permutation of Z^2 with modulus (2,0)Z+(0,3)Z
2845
2846
/
2847
| (m,2n) if (m,n) in (0,0)+(1,0)Z+(0,3)Z U
2848
| (0,1)+(1,0)Z+(0,3)Z
2849
(m,n) |-> < (m/2,2n) if (m,n) in (0,2)+(2,0)Z+(0,3)Z
2850
| ((m-1)/2,(2n-1)/3) if (m,n) in (1,2)+(2,0)Z+(0,3)Z
2851
|
2852
\
2853
]]>
2854
</Example>
2855
2856
Now, the <M>3n+1</M> conjecture is equivalent to the assertion that
2857
the line <M>n=4</M> is a set of representatives for the cycles of
2858
<C>Sigma&uscore;T</C> on the half plane <M>n > 0</M>. <P/>
2859
2860
Let's have a look at a part of a cycle of <C>Sigma&uscore;T</C>:
2861
2862
<Example>
2863
<![CDATA[
2864
gap> Trajectory(Sigma_T,[0,27],75);
2865
[ [ 0, 27 ], [ 1, 41 ], [ 3, 62 ], [ 3, 31 ], [ 7, 47 ], [ 15, 71 ],
2866
[ 31, 107 ], [ 63, 161 ], [ 127, 242 ], [ 127, 121 ], [ 255, 182 ],
2867
[ 255, 91 ], [ 511, 137 ], [ 1023, 206 ], [ 1023, 103 ],
2868
[ 2047, 155 ], [ 4095, 233 ], [ 8191, 350 ], [ 8191, 175 ],
2869
[ 16383, 263 ], [ 32767, 395 ], [ 65535, 593 ], [ 131071, 890 ],
2870
[ 131071, 445 ], [ 262143, 668 ], [ 262143, 334 ], [ 524286, 167 ],
2871
[ 1048573, 251 ], [ 2097147, 377 ], [ 4194295, 566 ], [ 4194295, 283 ],
2872
[ 8388591, 425 ], [ 16777183, 638 ], [ 16777183, 319 ],
2873
[ 33554367, 479 ], [ 67108735, 719 ], [ 134217471, 1079 ],
2874
[ 268434943, 1619 ], [ 536869887, 2429 ], [ 1073739775, 3644 ],
2875
[ 1073739775, 1822 ], [ 2147479550, 911 ], [ 4294959101, 1367 ],
2876
[ 8589918203, 2051 ], [ 17179836407, 3077 ], [ 34359672815, 4616 ],
2877
[ 34359672815, 2308 ], [ 68719345630, 1154 ], [ 68719345630, 577 ],
2878
[ 137438691261, 866 ], [ 137438691261, 433 ], [ 274877382523, 650 ],
2879
[ 274877382523, 325 ], [ 549754765047, 488 ], [ 549754765047, 244 ],
2880
[ 1099509530094, 122 ], [ 1099509530094, 61 ], [ 2199019060189, 92 ],
2881
[ 2199019060189, 46 ], [ 4398038120378, 23 ], [ 8796076240757, 35 ],
2882
[ 17592152481515, 53 ], [ 35184304963031, 80 ], [ 35184304963031, 40 ],
2883
[ 70368609926062, 20 ], [ 70368609926062, 10 ], [ 140737219852124, 5 ],
2884
[ 281474439704249, 8 ], [ 281474439704249, 4 ], [ 562948879408498, 2 ],
2885
[ 562948879408498, 1 ], [ 1125897758816997, 2 ],
2886
[ 1125897758816997, 1 ], [ 2251795517633995, 2 ],
2887
[ 2251795517633995, 1 ] ]
2888
gap> Trajectory(Sigma_T^-1,[0,27],20);
2889
[ [ 0, 27 ], [ 0, 54 ], [ 0, 108 ], [ 0, 216 ], [ 0, 432 ], [ 0, 864 ],
2890
[ 0, 1728 ], [ 0, 3456 ], [ 0, 6912 ], [ 0, 13824 ], [ 0, 27648 ],
2891
[ 0, 55296 ], [ 0, 110592 ], [ 0, 221184 ], [ 0, 442368 ],
2892
[ 0, 884736 ], [ 0, 1769472 ], [ 0, 3538944 ], [ 0, 7077888 ],
2893
[ 0, 14155776 ] ]
2894
]]>
2895
</Example>
2896
2897
While it seems easy to make conjectures regarding the behaviour of cycles
2898
of <C>Sigma&uscore;T</C>, obtaining results on it is apparently hard.
2899
We observe however that <C>Sigma&uscore;T</C> can be written as a product
2900
of two permutations of&nbsp;<M>&ZZ;^2</M> whose cycles can be described
2901
easily:
2902
2903
<Example>
2904
<![CDATA[
2905
gap> a := RcwaMapping(Integers^2,[[1,0],[0,2]],[[[[4,0],[0,1]],[0, 0],2],
2906
> [[[4,0],[0,1]],[2,-1],2]]);
2907
<rcwa mapping of Z^2 with modulus (1,0)Z+(0,2)Z>
2908
gap> b := a^-1*Sigma_T;
2909
<rcwa permutation of Z^2 with modulus (2,0)Z+(0,3)Z>
2910
gap> Display(a);
2911
2912
Rcwa permutation of Z^2 with modulus (1,0)Z+(0,2)Z
2913
2914
/
2915
| (2m,n/2) if (m,n) in (0,0)+(1,0)Z+(0,2)Z
2916
(m,n) |-> < (2m+1,(n-1)/2) if (m,n) in (0,1)+(1,0)Z+(0,2)Z
2917
|
2918
\
2919
2920
gap> Display(b);
2921
2922
Rcwa permutation of Z^2 with modulus (2,0)Z+(0,3)Z
2923
2924
/
2925
| (m,3n+2) if (m,n) in (1,0)+(2,0)Z+(0,1)Z
2926
| (m/2,n) if (m,n) in (0,0)+(2,0)Z+(0,3)Z U
2927
(m,n) |-> < (0,1)+(2,0)Z+(0,3)Z
2928
| (m,n) if (m,n) in (0,2)+(2,0)Z+(0,3)Z
2929
|
2930
\
2931
]]>
2932
</Example>
2933
2934
It is easy to see that both <C>a</C> and&nbsp;<C>b</C> have infinite order.
2935
The cycles of&nbsp;<C>a</C> have roughly hyperbolic shape and run, so to
2936
speak, from <M>(0,\pm \infty)</M> to <M>(\pm \infty,0)</M>.
2937
A given cycle contains only finitely many points both of whose coordinates
2938
are nonzero. The fixed points of&nbsp;<C>a</C> are (0,0) and (-1,-1).
2939
We have a look at an example of a cycle of&nbsp;<C>a</C>:
2940
2941
<Example>
2942
<![CDATA[
2943
gap> Trajectory(a,[1000,1000],15);
2944
[ [ 1000, 1000 ], [ 2000, 500 ], [ 4000, 250 ], [ 8000, 125 ],
2945
[ 16001, 62 ], [ 32002, 31 ], [ 64005, 15 ], [ 128011, 7 ],
2946
[ 256023, 3 ], [ 512047, 1 ], [ 1024095, 0 ], [ 2048190, 0 ],
2947
[ 4096380, 0 ], [ 8192760, 0 ], [ 16385520, 0 ] ]
2948
gap> Trajectory(a^-1,[1000,1000],15);
2949
[ [ 1000, 1000 ], [ 500, 2000 ], [ 250, 4000 ], [ 125, 8000 ],
2950
[ 62, 16001 ], [ 31, 32002 ], [ 15, 64005 ], [ 7, 128011 ],
2951
[ 3, 256023 ], [ 1, 512047 ], [ 0, 1024095 ], [ 0, 2048190 ],
2952
[ 0, 4096380 ], [ 0, 8192760 ], [ 0, 16385520 ] ]
2953
]]>
2954
</Example>
2955
2956
It is left as an easy exercise to the reader to find out how the cycles
2957
of&nbsp;<C>b</C> look like. <P/>
2958
2959
Enter <C>AssignGlobals(LoadRCWAExamples().ZxZ);</C>
2960
in order to assign the global variables defined in this section.
2961
2962
</Section>
2963
2964
<!-- #################################################################### -->
2965
2966
<Section Label="sec:GrigorchukGroups">
2967
<Heading>
2968
Finite quotients of Grigorchuk groups
2969
</Heading>
2970
2971
In this section, we show how to construct finite quotients of the two
2972
infinite periodic groups introduced by Rostislav Grigorchuk
2973
in&nbsp;<Cite Key="Grigorchuk80"/> with the help of &RCWA;.
2974
2975
The first of these, nowadays known as <Q>Grigorchuk group</Q>, is
2976
investigated in an example given on the &GAP; website -- see
2977
<URL>http://www.gap-system.org/Doc/Examples/grigorchuk.html</URL>.
2978
2979
The &RCWA; package permits a simpler and more elegant construction
2980
of the finite quotients of this group: The function <C>TopElement</C>
2981
given on the mentioned webpage gets unnecessary, and the function
2982
<C>SequenceElement</C> can be simplified as follows:
2983
2984
<Listing>
2985
<![CDATA[
2986
SequenceElement := function ( r, level )
2987
2988
return Permutation(Product(Filtered([1..level-1],k->k mod 3 <> r),
2989
k->ClassTransposition( 2^(k-1)-1,2^(k+1),
2990
2^k+2^(k-1)-1,2^(k+1))),
2991
[0..2^level-1]);
2992
end;
2993
]]>
2994
</Listing>
2995
2996
The actual constructors for the generators are modified as follows:
2997
2998
<Listing>
2999
<![CDATA[
3000
a := level -> Permutation(ClassTransposition(0,2,1,2),[0..2^level-1]);
3001
b := level -> SequenceElement(0,level);
3002
c := level -> SequenceElement(2,level);
3003
d := level -> SequenceElement(1,level);
3004
]]>
3005
</Listing>
3006
3007
All computations given on the webpage can now be done just as with the
3008
<Q>original</Q> construction of the quotients of the Grigorchuk group.
3009
In the sequel, we construct finite quotients of the second group introduced
3010
in&nbsp;<Cite Key="Grigorchuk80"/>:
3011
3012
<Example>
3013
<![CDATA[
3014
gap> FourCycle := RcwaMapping((4,5,6,7),[4..7]);
3015
( 0(4), 1(4), 2(4), 3(4) )
3016
gap> GrigorchukGroup2Generator := function ( level )
3017
> if level = 1 then return FourCycle; else
3018
> return Restriction(FourCycle, RcwaMapping([[4,1,1]]))
3019
> * Restriction(FourCycle, RcwaMapping([[4,3,1]]))
3020
> * Restriction(GrigorchukGroup2Generator(level-1),
3021
> RcwaMapping([[4,0,1]]));
3022
> fi;
3023
> end;;
3024
gap> GrigorchukGroup2 := level -> Group(FourCycle,
3025
> GrigorchukGroup2Generator(level));;
3026
]]>
3027
</Example>
3028
3029
We can do similar things as shown in the example on the &GAP; webpage
3030
for the <Q>first</Q> Grigorchuk group:
3031
3032
<Example>
3033
<![CDATA[
3034
gap> G := List([1..4],lev->GrigorchukGroup2(lev)); # The first 4 quotients.
3035
[ <rcwa group over Z with 2 generators>,
3036
<rcwa group over Z with 2 generators>,
3037
<rcwa group over Z with 2 generators>,
3038
<rcwa group over Z with 2 generators> ]
3039
gap> H := List([1..4],lev->Action(G[lev],[0..4^lev-1])); # Isom. perm.-gps.
3040
[ Group([ (1,2,3,4), (1,2,3,4) ]),
3041
Group([ (1,2,3,4)(5,6,7,8)(9,10,11,12)(13,14,15,16),
3042
(1,5,9,13)(2,6,10,14)(4,8,12,16) ]),
3043
<permutation group with 2 generators>,
3044
<permutation group with 2 generators> ]
3045
gap> List(H,Size);
3046
[ 4, 1024, 4294967296, 1329227995784915872903807060280344576 ]
3047
gap> List(last,n->Collected(Factors(n)));
3048
[ [ [ 2, 2 ] ], [ [ 2, 10 ] ], [ [ 2, 32 ] ], [ [ 2, 120 ] ] ]
3049
gap> List(H,NilpotencyClassOfGroup);
3050
[ 1, 6, 14, 40 ]
3051
]]>
3052
</Example>
3053
3054
Enter <C>AssignGlobals(LoadRCWAExamples().GrigorchukQuotients);</C>
3055
in order to assign the global variables defined in this section.
3056
3057
</Section>
3058
3059
<!-- #################################################################### -->
3060
3061
<Section Label="sec:ForwardOrbit">
3062
<Heading>
3063
Forward orbits of a monoid with 2 generators
3064
</Heading>
3065
3066
The <M>3n+1</M> conjecture asserts that the forward orbit of any positive
3067
integer under the Collatz mapping <M>T</M> contains&nbsp;1. In contrast,
3068
it seems likely that <Q>most</Q> trajectories of the two mappings
3069
<Alt Only="LaTeX">
3070
<Display>
3071
<![CDATA[T_5^\pm: \ \mathbb{Z} \longrightarrow \mathbb{Z}, \ \ \ \
3072
n \ \longmapsto \
3073
\begin{cases}
3074
\frac{n}{2} & \text{if} \ n \ \text{even}, \\
3075
\frac{5n \pm 1}{2} & \text{if} \ n \ \text{odd}
3076
\end{cases}]]>
3077
</Display>
3078
</Alt>
3079
<Alt Only="HTML"><![CDATA[<center>
3080
<img src = "t5pm.png" width = "372" height = "61"
3081
alt = "T5+/-: Z -> Z, n |-> (n/2 if n even, (5n+/-1)/2 if n odd)" />
3082
</center>]]></Alt>
3083
<Alt Only="Text"><Verb><![CDATA[
3084
/
3085
| n/2 if n even,
3086
T_5+/-: Z -> Z, n |-> <
3087
| (5n +/- 1)/2 if n odd
3088
\
3089
]]></Verb></Alt>
3090
diverge.
3091
However we can show by means of computation that the forward orbit of any
3092
positive integer under the action of the monoid generated by the two
3093
mappings <M>T_5^-</M> and&nbsp;<M>T_5^+</M> indeed contains&nbsp;1.
3094
First of all, we enter the generators:
3095
3096
<Example>
3097
<![CDATA[
3098
gap> T5m := RcwaMapping([[1,0,2],[5,-1,2]]);;
3099
gap> T5p := RcwaMapping([[1,0,2],[5, 1,2]]);;
3100
]]>
3101
</Example>
3102
3103
We look for a number <M>k</M> such that for any residue class <M>r(2^k)</M>
3104
there is a product&nbsp;<M>f</M> of <M>k</M>&nbsp;mappings <M>T_5^\pm</M>
3105
whose restriction to <M>r(2^k)</M> is given by <M>n \mapsto (an+b)/c</M>
3106
where <M>c>a</M>:
3107
3108
<Example>
3109
<![CDATA[
3110
gap> k := 1;;
3111
gap> repeat
3112
> maps := List(Tuples([T5m,T5p],k),Product);
3113
> decr := List(maps,DecreasingOn);
3114
> decreasable := Union(decr);
3115
> Print(k,": "); View(decreasable); Print("\n");
3116
> k := k + 1;
3117
> until decreasable = Integers;
3118
1: 0(2)
3119
2: 0(4)
3120
3: Z \ 1(8) U 7(8)
3121
4: 0(4) U 3(16) U 6(16) U 10(16) U 13(16)
3122
5: Z \ 7(32) U 25(32)
3123
6: <union of 48 residue classes (mod 64)>
3124
7: Integers
3125
]]>
3126
</Example>
3127
3128
Thus <M>k=7</M> serves our purposes.
3129
To be sure that for any positive integer <M>n</M> our monoid contains
3130
a mapping <M>f</M> such that <M>n^f&lt;n</M>, we still need to check this
3131
condition for <Q>small</Q>&nbsp;<M>n</M>. Since in case <M>c>a</M> we have
3132
<M>(an+b)/c \geq n</M> if only if <M>n \leq b/(c-a)</M>, we only need to
3133
check those <M>n</M> which are not larger than the largest coefficient
3134
<M>b_{r(m)}</M> occurring in any of the products under consideration:
3135
3136
<Example>
3137
<![CDATA[
3138
gap> maxb := Maximum(List(maps,f->Maximum(List(Coefficients(f),t->t[2]))));
3139
25999
3140
gap> small := Filtered([1..maxb],n->ForAll(maps,f->n^f>=n));
3141
[ 1, 7, 9, 11 ]
3142
]]>
3143
</Example>
3144
3145
This means that except of&nbsp;1, only for <M>n \in \{{7,9,11\}}</M> there
3146
is no product of 7 mappings <M>T_5^\pm</M> which maps <M>n</M> to a smaller
3147
integer. We check that also the forward orbits of these three integers
3148
contain&nbsp;1 by successively computing preimages of&nbsp;1:
3149
3150
<Example>
3151
<![CDATA[
3152
gap> S := [1];; k := 0;;
3153
gap> repeat
3154
> S := Union(S,PreImage(T5m,S),PreImage(T5p,S));
3155
> k := k+1;
3156
> until IsSubset(S,small);
3157
gap> k;
3158
17
3159
]]>
3160
</Example>
3161
3162
Enter <C>AssignGlobals(LoadRCWAExamples().CollatzMapping);</C>
3163
in order to assign the global variables defined in this section.
3164
3165
</Section>
3166
3167
<!-- #################################################################### -->
3168
3169
<Section Label="sec:F2andPSL2Z">
3170
<Heading>
3171
The free group of rank 2 and the modular group PSL(2,&ZZ;)
3172
</Heading>
3173
3174
The free group of rank&nbsp;2 embeds into RCWA(&ZZ;) -- in fact it embeds
3175
even in the subgroup which is generated by all class transpositions.
3176
An explicit embedding can be constructed by transferring the construction
3177
of the so-called <Q>Schottky groups</Q> (cf.&nbsp;<Cite Key="LaHarpe00"/>,
3178
page&nbsp;27) from PSL(2,&CC;) to RCWA(&ZZ;)
3179
(we use the notation from the cited book):
3180
3181
<Example>
3182
<![CDATA[
3183
gap> D := AllResidueClassesModulo(4);
3184
[ 0(4), 1(4), 2(4), 3(4) ]
3185
gap> gamma1 := RepresentativeAction(RCWA(Integers),
3186
> Difference(Integers,D[1]),D[2]);;
3187
gap> gamma2 := RepresentativeAction(RCWA(Integers),
3188
> Difference(Integers,D[3]),D[4]);;
3189
gap> F2 := Group(gamma1,gamma2);
3190
<rcwa group over Z with 2 generators>
3191
]]>
3192
</Example>
3193
3194
We can do some checks:
3195
3196
<Example>
3197
<![CDATA[
3198
gap> X1 := Union(D{[1,2]});; X2 := Union(D{[3,4]});;
3199
gap> IsSubset(X1,X2^gamma1) and IsSubset(X1,X2^(gamma1^-1))
3200
> and IsSubset(X2,X1^gamma2) and IsSubset(X2,X1^(gamma2^-1));
3201
true
3202
]]>
3203
</Example>
3204
3205
The generators are products of 3 class transpositions, each:
3206
3207
<Example>
3208
<![CDATA[
3209
gap> Factorization(gamma1);
3210
[ ( 0(2), 1(2) ), ( 3(4), 5(8) ), ( 0(2), 1(8) ) ]
3211
gap> Factorization(gamma2);
3212
[ ( 0(2), 1(2) ), ( 1(4), 7(8) ), ( 0(2), 3(8) ) ]
3213
]]>
3214
</Example>
3215
3216
The above construction is used by <Ref Attr="IsomorphismRcwaGroup"
3217
Label="for a group"/> to embed free groups of any rank&nbsp;<M>\geq 2</M>.
3218
<P/>
3219
3220
We give another only slightly different representation of the free group
3221
of rank&nbsp;2. We verify that it really is one by applying the
3222
so-called <E>Table-Tennis Lemma</E> (see e.g.&nbsp;<Cite Key="LaHarpe00"/>,
3223
Section&nbsp;II.B.) to the infinite cyclic groups generated by the two
3224
generators and to the same two sets <C>X1</C> and <C>X2</C> as above:
3225
3226
<Example>
3227
<![CDATA[
3228
gap> r1 := ClassTransposition(0,2,1,2)*ClassTransposition(0,2,1,4);;
3229
gap> r2 := ClassTransposition(0,2,1,2)*ClassTransposition(0,2,3,4);;
3230
gap> F2 := Group(r1^2,r2^2);;
3231
gap> List(GeneratorsOfGroup(F2),IsTame);
3232
[ false, false ]
3233
gap> IsSubset(X1,X2^F2.1) and IsSubset(X1,X2^(F2.1^-1))
3234
> and IsSubset(X2,X1^F2.2) and IsSubset(X2,X1^(F2.2^-1));
3235
true
3236
gap> [Sources(r1),Sinks(r1),Loops(r1)]; # compare with X1
3237
[ [ 0(4) ], [ 1(4) ], [ 0(4), 1(4) ] ]
3238
gap> [Sources(r2),Sinks(r2),Loops(r2)]; # compare with X2
3239
[ [ 2(4) ], [ 3(4) ], [ 2(4), 3(4) ] ]
3240
gap> IsSubset(X1,Union(Sinks(r1))) and IsSubset(X1,Union(Sinks(r1^-1)))
3241
> and IsSubset(X2,Union(Sinks(r2))) and IsSubset(X2,Union(Sinks(r2^-1)));
3242
true
3243
gap> IsSubset(Union(Sinks(r1)),X2^F2.1) and
3244
> IsSubset(Union(Sinks(r1^-1)),X2^(F2.1^-1));
3245
true
3246
gap> IsSubset(Union(Sinks(r2)),X1^F2.2) and
3247
> IsSubset(Union(Sinks(r2^-1)),X1^(F2.2^-1));
3248
true
3249
]]>
3250
</Example>
3251
3252
Drawing the transition graphs of <C>r1</C> and <C>r2</C> for modulus&nbsp;4
3253
may help to understand what is actually done in this calculation.
3254
It is easy to see that the group generated by <C>r1</C> and&nbsp;<C>r2</C>
3255
is <E>not</E> free:
3256
3257
<Example>
3258
<![CDATA[
3259
gap> Order(r1/r2);
3260
3
3261
]]>
3262
</Example>
3263
3264
The modular group PSL(2,&ZZ;) embeds into CT(&ZZ;) as well.
3265
We give an embedding, and check that it really is one by applying
3266
the Table Tennis Lemma as above:
3267
3268
<Example>
3269
<![CDATA[
3270
gap> PSL2Z :=
3271
> Group(ClassTransposition(0,3,1,3) * ClassTransposition(0,3,2,3),
3272
> ClassTransposition(1,3,0,6) * ClassTransposition(2,3,3,6));;
3273
gap> List(GeneratorsOfGroup(PSL2Z),Order);
3274
[ 3, 2 ]
3275
gap> X1 := Difference(Integers,ResidueClass(0,3));
3276
Z \ 0(3)
3277
gap> X2 := ResidueClass(0,3);
3278
0(3)
3279
gap> IsSubset(X1,X2^PSL2Z.1) and IsSubset(X1,X2^(PSL2Z.1^2));
3280
true
3281
gap> IsSubset(X2,X1^PSL2Z.2);
3282
true
3283
]]>
3284
</Example>
3285
3286
A slightly different representation of PSL(2,&ZZ;) can be obtained by using
3287
&RCWA;'s general method for <C>IsomorphismRcwaGroup</C> for free products of
3288
finite groups:
3289
3290
<Example>
3291
<![CDATA[
3292
gap> G := Image(IsomorphismRcwaGroup(FreeProduct(CyclicGroup(3),
3293
> CyclicGroup(2))));
3294
<wild rcwa group over Z with 2 generators>
3295
gap> List(GeneratorsOfGroup(G),Factorization);
3296
[ [ ( 0(4), 2(4) ), ( 1(2), 0(4) ) ], [ ( 0(2), 1(2) ) ] ]
3297
]]>
3298
</Example>
3299
3300
Enter <C>AssignGlobals(LoadRCWAExamples().F2_PSL2Z);</C>
3301
in order to assign the global variables defined in this section.
3302
3303
<Alt Only="HTML">&nbsp;</Alt>
3304
3305
</Section>
3306
3307
<!-- #################################################################### -->
3308
3309
</Chapter>
3310
3311
<!-- #################################################################### -->
3312
3313