CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutSign UpSign In

Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place.

| Download

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

Views: 418346
1
% This file was created automatically from elements.msk.
2
% DO NOT EDIT!
3
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4
\Chapter{Properties and operations with group and semigroup elements}
5
6
In this chapter we present the functionality applicable to elements of groups and semigroups.
7
8
9
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
10
\Section{Creation of tree automorphisms and homomorphisms}
11
12
\>TreeAutomorphism( <states>, <perm> ) O
13
14
Constructs the tree automorphism with states on the first level given by the
15
argument <states> and acting
16
on the first level as the permutation <perm>. The <states> must
17
belong to the same family.
18
\beginexample
19
gap> L := AutomatonGroup("p=(p,q)(1,2), q=(p,q)");
20
< p, q >
21
gap> r := TreeAutomorphism([p, q, p, q^2],(1,2)(3,4));
22
(p, q, p, q^2)(1,2)(3,4)
23
gap> t := TreeAutomorphism([q, 1, p*q, q],(1,2));
24
(q, 1, p*q, q)(1,2)
25
gap> r*t;
26
(p, q^2, p*q, q^2*p*q)(3,4)
27
\endexample
28
29
30
\>TreeHomomorphism( <states>, <tr> ) O
31
32
Constructs an homomorphism with states <states> and acting
33
on the first level with transformation <tr>. The <states> must
34
belong to the same family.
35
\beginexample
36
gap> S := AutomatonSemigroup("a=(a,b)[1,1],b=(b,a)(1,2)");
37
< a, b >
38
gap> x := TreeHomomorphism([a,b^2,a,a*b],Transformation([3,1,2,2]));
39
(a, b^2, a, a*b)[3,1,2,2]
40
gap> y := TreeHomomorphism([a*b,b,b,b^2],Transformation([1,4,2,3]));
41
(a*b, b, b, b^2)[1,4,2,3]
42
gap> x*y;
43
(a*b, b^2*a*b, a*b, a*b^2)[2,1,4,4]
44
\endexample
45
46
47
\>Representative( <word>, <fam> ) O
48
\>Representative( <word>, <a> ) O
49
50
Given an associative word <word> constructs the tree homomorphism from the family
51
<fam>, or to which homomorphism <a> belongs. This function is useful when
52
one needs to make some operations with associative words. See also `Word' ("Word").
53
\beginexample
54
gap> L := AutomatonGroup("p=(p,q)(1,2), q=(p,q)");
55
< p, q >
56
gap> F := UnderlyingFreeGroup(L);
57
<free group on the generators [ p, q ]>
58
gap> r := Representative(F.1*F.2^2, p);
59
p*q^2
60
gap> Decompose(r);
61
(p*q^2, q*p^2)(1,2)
62
gap> H := SelfSimilarGroup("x=(x*y,x)(1,2), y=(x^-1,y)");
63
< x, y >
64
gap> F := UnderlyingFreeGroup(H);
65
<free group on the generators [ x, y ]>
66
gap> r := Representative(F.1^-1*F.2, x);
67
x^-1*y
68
gap> Decompose(r);
69
(x^-1*y, y^-1*x^-2)(1,2)
70
\endexample
71
72
73
%Declaration{AutomFamily}
74
75
76
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
77
\Section{Properties and attributes of tree automorphisms and homomorphisms}
78
79
\>`IsSphericallyTransitive( <a> )'{IsSphericallyTransitive}!{[treehom]} P
80
81
Returns whether the action of <a> is spherically transitive (see "Short math background").
82
83
84
\>`IsTransitiveOnLevel( <a>, <lev> )'{IsTransitiveOnLevel}!{[treehom]} O
85
86
Returns whether <a> acts transitively on level <lev> of the tree.
87
88
89
90
\>IsOne( <a> ) O
91
92
Returns whether an automorphism <a> acts trivially on the tree. For contracting groups see also
93
`UseContraction' ("UseContraction") and `IsOneContr' ("IsOneContr").
94
\beginexample
95
gap> L := AutomatonGroup("p=(p,q)(1,2), q=(p,q)");
96
< p, q >
97
gap> IsOne(q*p^-1*q*p^-1);
98
true
99
\endexample
100
101
\>IsOneContr( <a> ) F
102
103
Returns `true' if <a> is trivial automorphism and `false' otherwise. Works for
104
contracting groups only. Uses polynomial time algorithm.
105
106
107
108
109
\>Order( <a> ) O
110
111
Computes the order of an automorphism <a>. In some cases it does not stop. Works always (modulo memory
112
restrictions) for groups generated by bounded automata.
113
114
If `InfoLevel' of `InfoAutomGrp' is greater than or equal to 3 (one can set it by
115
`SetInfoLevel( InfoAutomGrp, 3)') and the element has infinite order, then the proof of this fact
116
is printed.
117
118
\beginexample
119
gap> L := AutomatonGroup("p=(p,q)(1,2), q=(p,q)");
120
< p, q >
121
gap> Basilica := AutomatonGroup( "u=(v,1)(1,2), v=(u,1)" );
122
< u, v >
123
gap> Order(p*q^-1);
124
2
125
gap> SetInfoLevel( InfoAutomGrp, 3);
126
gap> Order( u^35*v^-12*u^2*v^-3 );
127
#I (u^35*v^-12*u^2*v^-3)^68719476736 has conjugate of u^2*v^-3*u^35*v^
128
-12 as a section at vertex [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
129
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
130
infinity
131
\endexample
132
133
\>OrderUsingSections( <a>[, <max_depth>] ) O
134
135
Tries to compute the order of the element <a> by looking at its sections
136
of depth up to <max_depth>-th level.
137
If <max_depth> is omitted it is assumed to be `infinity', but then it may not stop. Also note,
138
that if <max_depth> is not given, it searches the tree in depth first and may be trapped
139
in some infinite ray, while specifying finite <max_depth> may produce a result by looking at
140
a section not in that ray.
141
For bounded automata it will always produce a result.
142
143
If `InfoLevel' of `InfoAutomGrp' is greater than
144
or equal to 3 (one can set it by `SetInfoLevel( InfoAutomGrp, 3)')
145
and the element has infinite order, then the proof of this fact is printed.
146
147
\beginexample
148
gap> Grigorchuk_Group := AutomatonGroup("a=(1,1)(1,2),b=(a,c),c=(a,d),d=(1,b)");
149
< a, b, c, d >
150
gap> OrderUsingSections( a*b*a*c*b );
151
16
152
gap> Basilica := AutomatonGroup( "u=(v,1)(1,2), v=(u,1)" );
153
< u, v >
154
gap> SetInfoLevel( InfoAutomGrp, 3);
155
gap> OrderUsingSections( u^23*v^-2*u^3*v^15, 10 );
156
#I v^13*u^15 acts transitively on levels and is obtained from (u^23*v^-2*u^3*v^15)^1
157
by taking sections and cyclic reductions at vertex [ 1 ]
158
infinity
159
gap> G := AutomatonGroup("a=(c,a)(1,2), b=(b,c), c=(b,a)");
160
< a, b, c >
161
gap> OrderUsingSections(b,10);
162
#I b*c*a^2*b^2*c*a acts transitively on levels and is obtained from (b)^8
163
by taking sections and cyclic reductions at vertex
164
[ 2, 2, 1, 1, 1, 1, 2, 2, 1, 1 ]
165
infinity
166
\endexample
167
168
169
\>Perm( <a>[, <lev>] ) O
170
171
Returns the permutation induced by the tree automorphism <a> on the level <lev>
172
(or first level if <lev> is not given). See also
173
`TransformationOnLevel'~("TransformationOnLevel").
174
175
176
\>PermOnLevel( <a>, <k> ) O
177
178
Does the same thing as `Perm'~("Perm").
179
180
181
\>PermOnLevelAsMatrix( <g>, <lev> ) F
182
183
Computes the action of the element <g> of a group on the <lev>-th level as a permutational matrix, in
184
which the i-th row contains 1 at the position i^<g>.
185
\beginexample
186
gap> L := AutomatonGroup("p=(p,q)(1,2), q=(p,q)");
187
< p, q >
188
gap> PermOnLevel(p*q,2);
189
(1,4)(2,3)
190
gap> PermOnLevelAsMatrix(p*q, 2);
191
[ [ 0, 0, 0, 1 ], [ 0, 0, 1, 0 ], [ 0, 1, 0, 0 ], [ 1, 0, 0, 0 ] ]
192
\endexample
193
194
195
\>TransformationOnLevel( <a>, <lev> ) O
196
\>TransformationOnFirstLevel( <a> ) O
197
198
The first function returns the transformation induced by the tree homomorphism
199
<a> on the level <lev>. See also `PermOnLevel'~("PermOnLevel").
200
201
If the transformation is invertible then it returns a permutation, and
202
`Transformation' otherwise.
203
204
`TransformationOnFirstLevel'(<a>) is equivalent to
205
`TransformationOnLevel'(<a>, `1').
206
207
208
\>TransformationOnLevelAsMatrix( <g>, <lev> ) F
209
210
Computes the action of the element <g> on the <lev>-th level as a permutational matrix, in
211
which the i-th row contains 1 at the position i^<g>.
212
\beginexample
213
gap> L := AutomatonSemigroup("p=(p,q)(1,2), q=(p,q)[1,1]");
214
< p, q >
215
gap> TransformationOnLevel(p*q,2);
216
Transformation( [ 1, 1, 2, 2 ] )
217
gap> TransformationOnLevelAsMatrix(p*q,2);
218
[ [ 1, 0, 0, 0 ], [ 1, 0, 0, 0 ], [ 0, 1, 0, 0 ], [ 0, 1, 0, 0 ] ]
219
\endexample
220
221
222
\>Word( <a> ) O
223
224
Returns <a> as an associative word (an element of the underlying free group) in
225
the generators of the self-similar group (semigroup) to which <a> belongs.
226
\beginexample
227
gap> L := AutomatonGroup("p=(p,q)(1,2), q=(p,q)");
228
< p, q >
229
gap> w := Word(p*q^2*p^-1);
230
p*q^2*p^-1
231
gap> Length(w);
232
4
233
\endexample
234
235
236
237
238
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
239
\Section{Operations with tree automorphisms and homomorphisms}
240
241
The multiplication of tree homomorphisms is defined in the standard way
242
243
\>`<a> \* <b>'{product}!{for tree homomorphisms}
244
245
The following operations allow computation of the actions of tree
246
homomorphisms on letters and vertices
247
248
\>`<letter> ^ <a>'{action}!{of tree homomorphism on letter}
249
\>`<vertex> ^ <a>'{action}!{of tree homomorphism on vertex}
250
251
\beginexample
252
gap> L := AutomatonGroup("p=(p,q)(1,2), q=(p,q)");
253
< p, q >
254
gap> 1^p;
255
2
256
gap> [1, 2, 2, 1, 2, 1]^(p*q^2);
257
[ 2, 1, 2, 2, 1, 2 ]
258
\endexample
259
260
261
The operations below describe how to work with sections of tree homomorphisms.
262
263
\>`Section( <a>, <v> )'{Section}!{[treehom]} O
264
265
Returns the section of the automorphism (homomorphism) <a> at the vertex <v>.
266
The vertex <v> can be a list representing the vertex, or a positive integer
267
representing a vertex of the first level of the tree.
268
\beginexample
269
gap> L := AutomatonGroup("p=(p,q)(1,2), q=(p,q)");
270
< p, q >
271
gap> Section(p*q*p^2, [1,2,2,1,2,1]);
272
p^2*q^2
273
\endexample
274
275
276
\>Sections( <a> [, <lev>] ) O
277
278
Returns the list of sections of <a> at the <lev>-th level. If <lev> is omitted
279
it is assumed to be 1.
280
\beginexample
281
gap> L := AutomatonGroup("p=(p,q)(1,2), q=(p,q)");
282
< p, q >
283
gap> Sections(p*q*p^2);
284
[ p*q^2*p, q*p^2*q ]
285
\endexample
286
287
288
\>Decompose( <a>[, <k>] ) O
289
290
Returns the decomposition of the tree homomorphism <a> on the <k>-th level of the tree, i.e. the
291
representation of the form $$a = (a_1, a_2, \ldots, a_{d_1\times...\times d_k})\sigma$$
292
where $a_i$ are the sections of <a> at the <k>-th level, and $\sigma$ is the
293
transformation of the <k>-th level. If <k> is omitted it is assumed to be 1.
294
\beginexample
295
gap> L := AutomatonGroup("p=(p,q)(1,2), q=(p,q)");
296
< p, q >
297
gap> Decompose(p*q^2);
298
(p*q^2, q*p^2)(1,2)
299
gap> Decompose(p*q^2,3);
300
(p*q^2, q*p^2, p^2*q, q^2*p, p*q*p, q*p*q, p^3, q^3)(1,8,3,5)(2,7,4,6)
301
\endexample
302
303
304
305
306
307
308
309
\>`<a> in <G>'{in}
310
311
Returns whether the automorphism <a> belongs to the group <G>. In some cases it does not stop.
312
\beginexample
313
gap> L := AutomatonGroup("p=(p,q)(1,2), q=(p,q)");
314
< p, q >
315
gap> H := Group([p^2, q^2]);
316
< p^2, q^2 >
317
gap> p in H;
318
false
319
\endexample
320
321
322
323
\>OrbitOfVertex( <ver>, <g>[, <n>] ) O
324
325
Returns the list of vertices in the orbit of the vertex <ver> under the
326
action of the semigroup generated by the automorphism <g>.
327
If <n> is specified, it returns only the first <n> elements of the orbit.
328
Vertices are defined either as lists with entries from $\{1,\ldots,d\}$, or as
329
strings containing characters $1,\ldots,d$, where $d$
330
is the degree of the tree.
331
\beginexample
332
gap> T := AutomatonGroup("t=(1,t)(1,2)");
333
< t >
334
gap> OrbitOfVertex([1,1,1], t);
335
[ [ 1, 1, 1 ], [ 2, 1, 1 ], [ 1, 2, 1 ], [ 2, 2, 1 ], [ 1, 1, 2 ],
336
[ 2, 1, 2 ], [ 1, 2, 2 ], [ 2, 2, 2 ] ]
337
gap> OrbitOfVertex("11111111111", t, 6);
338
[ [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ],
339
[ 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], [ 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1 ],
340
[ 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1 ], [ 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1 ] ]
341
\endexample
342
343
344
\>PrintOrbitOfVertex( <ver>, <g>[, <n>] ) O
345
346
Prints the orbit of the vertex <ver> under the action of the semigroup generated by
347
<g>. Each vertex is printed as a string containing characters $1,\ldots,d$, where $d$
348
is the degree of the tree. In case of binary tree the symbols `` '' and ```x'''
349
are used to represent `1' and `2'.
350
If <n> is specified only the first <n> elements of the orbit are printed.
351
Vertices are defined either as lists with entries from $\{1,\ldots,d\}$, or as
352
strings. See also `OrbitOfVertex' ("OrbitOfVertex").
353
\beginexample
354
gap> L := AutomatonGroup("p=(p,q)(1,2), q=(p,q)");
355
< p, q >
356
gap> PrintOrbitOfVertex("2222222222222222222222222222222", p*q^-2, 6);
357
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
358
x x x x x x x x x x x x x x x
359
x xx xx xx xx xx xx xx
360
x x x x x x x
361
xxx xxxx xxxx xxxx
362
x x x x x x x
363
gap> H := AutomatonGroup("t=(s,1,1)(1,2,3), s=(t,s,t)(1,2)");
364
< t, s >
365
gap> PrintOrbitOfVertex([1,2,1], s^2);
366
121
367
132
368
123
369
131
370
122
371
133
372
\endexample
373
374
375
\>PermActionOnLevel( <perm>, <big_lev>, <sm_lev>, <deg> ) F
376
377
Given a permutation <perm> on the <big_lev>-th level of the tree of degree
378
<deg> returns the permutation induced by <perm> on a smaller level
379
<sm_lev>.
380
\beginexample
381
gap> PermActionOnLevel((1,4,2,3), 2, 1, 2);
382
(1,2)
383
gap> PermActionOnLevel((1,13,5,9,3,15,7,11)(2,14,6,10,4,16,8,12), 4, 2, 2);
384
(1,4,2,3)
385
\endexample
386
387
388
389
390
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
391
\Section{Elements of groups and semigroups defined by wreath recursion}
392
393
\>`IsFiniteState( <a> )'{IsFiniteState}!{[selfsim]} P
394
395
Returns `true' if <a> has finitely many different sections.
396
It will never stop if the free reduction of words is not sufficient
397
to establish the finite-state property or if <a> is not finite-state (has
398
infinitely many different sections).
399
400
See also `AllSections' ("AllSections") for the list of all sections and
401
`MealyAutomaton' ("MealyAutomaton"), which allows to construct
402
a Mealy automaton whose states are the sections of <a> and which
403
encodes its action on the tree.
404
\beginexample
405
gap> D := SelfSimilarGroup("x=(1,y)(1,2), y=(z^-1,1)(1,2), z=(1,x*y)");
406
< x, y, z >
407
gap> IsFiniteState(x*y^-1);
408
true
409
\endexample
410
411
412
\>AllSections( <a> ) A
413
414
Returns the list of all sections of <a> if there are finitely many of them and
415
this fact can be established using free reduction of words in sections. Otherwise
416
will never stop. Note, that in the case when <a> is an element of a self-similar
417
(semi)group defined by wreath recurion it does not check whether all elements of the list
418
are actually different automorphisms (homomorphisms) of the tree. If <a> is a element of
419
of a (semi)group generated by finite automaton, it will always return the list of
420
all distinct sections of <a>.
421
\beginexample
422
gap> D := SelfSimilarGroup("x=(1,y)(1,2), y=(z^-1,1)(1,2), z=(1,x*y)");
423
< x, y, z >
424
gap> AllSections(x*y^-1);
425
[ x*y^-1, z, 1, x*y, y*z^-1, z^-1*y^-1*x^-1, y^-1*x^-1*z*y^-1, z*y^-1*x*y*z,
426
y*z^-1*x*y, z^-1*y^-1*x^-1*y*z^-1, x*y*z, y, z^-1, y^-1*x^-1, z*y^-1 ]
427
\endexample
428
429
430
431
See also operation `MealyAutomaton' ("MealyAutomaton"), which allows to construct
432
a Mealy automaton whose states are the sections of given tree homomorphism and which
433
encodes its action on the tree.
434
435
436
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
437
\Section{Elements of contracting groups}
438
439
\>AutomPortrait( <a> ) F
440
\>AutomPortraitBoundary( <a> ) F
441
\>AutomPortraitDepth( <a> ) F
442
443
Constructs the portrait of an element <a> of a
444
contracting group $G$. The portrait of <a> is defined recursively as follows.
445
For $g$ in the nucleus of $G$ the portrait is just $[g]$. For any other
446
element $g=(g_1,g_2,\ldots,g_d)\sigma$ the portrait of $g$ is
447
$[\sigma, `AutomPortrait'(g_1),\ldots, `AutomPortrait'(g_d)]$, where $d$ is
448
the degree of the tree. This structure describes a finite tree whose inner vertices
449
are labelled by permutations from $S_d$ and the leaves are labelled by
450
elements from the nucleus. The contraction in $G$ guarantees that the
451
portrait of any element is finite.
452
453
The portraits may be considered as ``normal forms''
454
of the elements of $G$, since different elements have different portraits.
455
456
One also can be interested only in the boundary of a portrait, which consists
457
of all leaves of the portrait. This boundary can be described by an ordered set of
458
pairs $[level_i, g_i]$, $i=1,\ldots,r$ representing the leaves of the tree ordered from left
459
to right (where $level_i$ and $g_i$ are the level and the label of the $i$-th leaf
460
correspondingly, $r$ is the number of leaves). The operation `AutomPortraitBoundary'(<a>)
461
computes this boundary.
462
463
`AutomPortraitDepth'( <a> ) returns the depth of the portrait, i.e. the minimal
464
level such that all sections of <a> at this level belong to the nucleus of $G$.
465
466
\beginexample
467
gap> Basilica := AutomatonGroup("u=(v,1)(1,2), v=(u,1)");
468
< u, v >
469
gap> AutomPortrait(u^3*v^-2*u);
470
[ (), [ (), [ (), [ v ], [ v ] ], [ 1 ] ],
471
[ (), [ (), [ v ], [ u^-1*v ] ], [ v^-1 ] ] ]
472
gap> AutomPortrait(u^3*v^-2*u^3);
473
[ (), [ (), [ (1,2), [ (), [ (), [ v ], [ v ] ], [ 1 ] ], [ v ] ], [ 1 ] ],
474
[ (), [ (1,2), [ (), [ (), [ v ], [ v ] ], [ 1 ] ], [ u^-1*v ] ], [ v^-1 ]
475
] ]
476
gap> AutomPortraitBoundary(u^3*v^-2*u^3);
477
[ [ 5, v ], [ 5, v ], [ 4, 1 ], [ 3, v ], [ 2, 1 ], [ 5, v ], [ 5, v ],
478
[ 4, 1 ], [ 3, u^-1*v ], [ 2, v^-1 ] ]
479
gap> AutomPortraitDepth(u^3*v^-2*u^3);
480
5
481
\endexample
482
483
484
485
486
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
487
488