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
2
<!-- %W extend.xml GAP 4 package AtlasRep Thomas Breuer -->
3
<!-- %Y Copyright 2002, Lehrstuhl D f�r Mathematik, RWTH Aachen, Germany -->
4
5
6
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
7
<Chapter Label="chap:Private Extensions">
8
<Heading>Private Extensions of the <Package>AtlasRep</Package> Package
9
</Heading>
10
11
It may be interesting to use the functions of the &GAP; interface also
12
for representations or programs that are <E>not</E> part of the
13
&ATLAS; of Group Representations.
14
This chapter describes how to achieve this.
15
16
<P/>
17
18
The main idea is that users can notify directories containing the
19
<Q>private</Q> data files, which may consist of
20
21
<Enum>
22
<Item>
23
new faithful representations and programs for groups
24
that are declared already in the <Q>official</Q>
25
&ATLAS; of Group Representations,
26
</Item>
27
<Item>
28
the declaration of groups that are not declared in the <Q>official</Q>
29
&ATLAS; of Group Representations,
30
and representations and programs for them, and
31
</Item>
32
<Item>
33
the definition of new kinds of representations and programs.
34
</Item>
35
</Enum>
36
37
<P/>
38
39
The first two issues are dealt with in
40
Section&nbsp;<Ref Sect="sect:Adding a Private Data Directory"/>
41
and Section&nbsp;<Ref Sect="sect:Effect of Private Extensions"/>.
42
The last is described in
43
Section&nbsp;<Ref Sect="sect:Data Types Used in the AGR"/>.
44
45
<P/>
46
47
Finally, an example of using private extensions is given in
48
Section&nbsp;<Ref Sect="sect:An Example of Extending AtlasRep"/>.
49
50
<P/>
51
52
Several of the sanity checks for the official part of the
53
<Package>AtlasRep</Package> package make sense also for private extensions,
54
see Section&nbsp;<Ref Sect="sect:AGR Sanity Checks"/>
55
for more information.
56
57
58
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
59
<Section Label="sect:Adding a Private Data Directory">
60
<Heading>Adding a Private Data Directory</Heading>
61
62
<#Include Label="[3]{access}">
63
<#Include Label="AtlasOfGroupRepresentationsNotifyPrivateDirectory">
64
<#Include Label="AtlasOfGroupRepresentationsForgetPrivateDirectory">
65
66
</Section>
67
68
69
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
70
<Section Label="sect:Effect of Private Extensions">
71
<Heading>The Effect of Private Extensions on the User Interface</Heading>
72
73
First suppose that only new groups or new data for known groups are added.
74
75
<P/>
76
77
In this case, <Ref Func="DisplayAtlasInfo"/> lists the private
78
representations and programs in the same way as the
79
<Q>official</Q> data, except that private parts are marked with the string
80
stored in the component <C>markprivate</C> of
81
<Ref Var="AtlasOfGroupRepresentationsInfo"/>;
82
by default, this is a star <C>*</C>.
83
The ordering of representations listed by <Ref Func="DisplayAtlasInfo"/>
84
(and referred to by <Ref Func="AtlasGenerators"/>) will in general change
85
when private directories are notified.
86
If several private directories are used then the ordering of data may depend
87
on the ordering of notifications.
88
For the other interface functions described in
89
Chapter&nbsp;<Ref Chap="chap:The User Interface of the AtlasRep Package"/>,
90
the only difference is that also the private data can be accessed.
91
In particular the <Q>free format</Q>
92
<C><A>groupname</A>G<A>i</A>-X<A>descr</A>W<A>n</A></C>
93
for straight line programs
94
(see Section&nbsp;<Ref Sect="sect:Filenames Used in the AGR"/>)
95
may be used in private directories;
96
the data can be accessed with <Ref Func="AtlasProgram"/>,
97
where the last two arguments are the strings <C>"other"</C> and <A>descr</A>.
98
99
<P/>
100
101
If also private data types are introduced
102
(see Section&nbsp;<Ref Sect="sect:Data Types Used in the AGR"/>)
103
then additional columns or rows can appear in the output of
104
<Ref Func="DisplayAtlasInfo"/>,
105
and new inputs can become meaningful for all interface functions.
106
Examples for these changes can be found in
107
Section&nbsp;<Ref Sect="sect:An Example of Extending AtlasRep"/>.
108
109
</Section>
110
111
112
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
113
<Section Label="sect:An Example of Extending AtlasRep">
114
<Heading>An Example of Extending the <Package>AtlasRep</Package> Package
115
</Heading>
116
117
In the beginning we set the info level of <Ref InfoClass="InfoAtlasRep"/>
118
to <M>1</M>.
119
120
<Example><![CDATA[
121
gap> level:= InfoLevel( InfoAtlasRep );;
122
gap> SetInfoLevel( InfoAtlasRep, 1 );
123
]]></Example>
124
125
Let us assume that the directory <F>privdir</F> contains
126
data for the cyclic group <M>C_4</M> of order <M>4</M>
127
and for the alternating group <M>A_5</M> on <M>5</M> points, respectively.
128
Note that it is obvious what the term <Q>standard generators</Q> means for
129
the group <M>C_4</M>.
130
131
<P/>
132
133
Further let us assume that <F>privdir</F> contains the following files.
134
135
<List>
136
<Mark><F>C4G1-p4B0.m1</F></Mark>
137
<Item>
138
a faithful permutation representation of <M>C_4</M> on <M>4</M> points,
139
</Item>
140
<Mark><F>C4G1-max1W1</F></Mark>
141
<Item>
142
the straight line program that returns the square of its unique input,
143
</Item>
144
<Mark><F>C4G1-a2W1</F></Mark>
145
<Item>
146
the straight line program that raises its unique input to the third
147
power,
148
</Item>
149
<Mark><F>C4G1-XtestW1</F></Mark>
150
<Item>
151
the straight line program that returns the square of its unique input,
152
</Item>
153
<Mark><F>A5G1-p60B0.m1</F> and <F>A5G1-p60B0.m2</F></Mark>
154
<Item>
155
the regular permutation representation of <M>A_5</M>.
156
</Item>
157
</List>
158
159
<P/>
160
161
The directory and the files can be created as follows.
162
163
<P/>
164
165
<Example><![CDATA[
166
gap> prv:= DirectoryTemporary( "privdir" );;
167
gap> FileString( Filename( prv, "C4G1-p4B0.m1" ),
168
> MeatAxeString( [ (1,2,3,4) ], 4 ) );;
169
gap> FileString( Filename( prv, "C4G1-max1W1" ),
170
> "inp 1\npwr 2 1 2\noup 1 2\n" );;
171
gap> FileString( Filename( prv, "C4G1-XtestW1" ),
172
> "inp 1\npwr 2 1 2\noup 1 2\n" );;
173
gap> FileString( Filename( prv, "C4G1-a2W1" ),
174
> "inp 1\npwr 3 1 2\noup 1 2\n" );;
175
gap> FileString( Filename( prv, "C4G1-Ar1aB0.g" ),
176
> "return rec( generators:= [ [[E(4)]] ] );\n" );;
177
gap> points:= Elements( AlternatingGroup( 5 ) );;
178
gap> FileString( Filename( prv, "A5G1-p60B0.m1" ),
179
> MeatAxeString( [ Permutation( (1,2)(3,4), points, OnRight ) ], 60 ) );;
180
gap> FileString( Filename( prv, "A5G1-p60B0.m2" ),
181
> MeatAxeString( [ Permutation( (1,3,5), points, OnRight ) ], 60 ) );;
182
]]></Example>
183
184
<P/>
185
186
(We could also introduce intermediate directories <F>C4</F> and <F>A5</F>,
187
say, each with the data for one group only.
188
Here we do not show this because creating directories programmatically
189
seems to be possible only with the &GAP; package <Package>IO</Package>.)
190
191
<P/>
192
193
The official part of the <Package>AtlasRep</Package> package does not contain
194
information about <M>C_4</M>,
195
so we first notify this group, in the file <F>privdir/toc.g</F>.
196
Besides the name of the group, we store the following information:
197
the group order, the number of (classes of) maximal subgroups,
198
their orders, their structures, and describing data about the two
199
permutation representations.
200
(The group <M>A_5</M> is known with name <C>A5</C> in the official part
201
of the <Package>AtlasRep</Package> package,
202
so it cannot be notified again.)
203
204
<P/>
205
206
<Example><![CDATA[
207
gap> FileString( Filename( prv, "toc.g" ), Concatenation( [
208
> "AGR.GNAN(\"C4\",\"C4\");\n",
209
> "AGR.GRS(\"C4\",4);\n",
210
> "AGR.MXN(\"C4\",1);\n",
211
> "AGR.MXO(\"C4\",[2]);\n",
212
> "AGR.MXS(\"C4\",[\"C2\"]);\n",
213
> "AGR.API(\"C4G1-p4B0\",[1,4,\"imprim\",\"1 < C2\"]);\n",
214
> "AGR.API(\"A5G1-p60B0\",[1,60,\"imprim\",\"1 < A4\"]);\n",
215
> ] ) );;
216
]]></Example>
217
218
<P/>
219
220
Then we notify the private directory.
221
222
<P/>
223
224
<Example><![CDATA[
225
gap> AtlasOfGroupRepresentationsNotifyPrivateDirectory( prv, "priv", true );
226
true
227
]]></Example>
228
229
<P/>
230
231
Now we can use the interface functions for accessing the data in the
232
private directory.
233
234
<P/>
235
236
<Example><![CDATA[
237
gap> DisplayAtlasInfo( [ "C4" ] );
238
group | # | maxes | cl | cyc | out | fnd | chk | prs
239
------+---+-------+----+-----+-----+-----+-----+----
240
C4* | 2 | 1 | | | 2 | | |
241
gap> DisplayAtlasInfo( "C4" );
242
Representations for G = C4: (all refer to std. generators 1)
243
---------------------------
244
1: G <= Sym(4)* rank 4, on cosets of 1 < C2
245
2: G <= GL(1a,C)*
246
247
Programs for G = C4: (all refer to std. generators 1)
248
--------------------
249
automorphisms:
250
2*
251
maxes (all 1):
252
1*: C2
253
other scripts:
254
"test"*
255
gap> DisplayAtlasInfo( "C4", IsPermGroup, true );
256
Representations for G = C4: (all refer to std. generators 1)
257
---------------------------
258
1: G <= Sym(4)* rank 4, on cosets of 1 < C2
259
gap> DisplayAtlasInfo( "C4", IsMatrixGroup );
260
Representations for G = C4: (all refer to std. generators 1)
261
---------------------------
262
2: G <= GL(1a,C)*
263
gap> DisplayAtlasInfo( "C4", Dimension, 2 );
264
gap> DisplayAtlasInfo( "A5", NrMovedPoints, 60 );
265
Representations for G = A5: (all refer to std. generators 1)
266
---------------------------
267
4: G <= Sym(60)* rank 60, on cosets of 1 < A4
268
gap> info:= OneAtlasGeneratingSetInfo( "C4" );
269
rec( groupname := "C4", id := "",
270
identifier := [ [ "priv", "C4" ], [ "C4G1-p4B0.m1" ], 1, 4 ],
271
isPrimitive := false, p := 4, rankAction := 4,
272
repname := "C4G1-p4B0", repnr := 1, size := 4,
273
stabilizer := "1 < C2", standardization := 1, transitivity := 1,
274
type := "perm" )
275
gap> AtlasGenerators( info.identifier );
276
rec( generators := [ (1,2,3,4) ], groupname := "C4", id := "",
277
identifier := [ [ "priv", "C4" ], [ "C4G1-p4B0.m1" ], 1, 4 ],
278
isPrimitive := false, p := 4, rankAction := 4,
279
repname := "C4G1-p4B0", repnr := 1, size := 4,
280
stabilizer := "1 < C2", standardization := 1, transitivity := 1,
281
type := "perm" )
282
gap> AtlasProgram( "C4", 1 );
283
rec( groupname := "C4",
284
identifier := [ [ "priv", "C4" ], "C4G1-max1W1", 1 ],
285
program := <straight line program>, size := 2, standardization := 1,
286
subgroupname := "C2" )
287
gap> AtlasProgram( "C4", "maxes", 1 );
288
rec( groupname := "C4",
289
identifier := [ [ "priv", "C4" ], "C4G1-max1W1", 1 ],
290
program := <straight line program>, size := 2, standardization := 1,
291
subgroupname := "C2" )
292
gap> AtlasProgram( "C4", "maxes", 2 );
293
fail
294
gap> AtlasGenerators( "C4", 1 );
295
rec( generators := [ (1,2,3,4) ], groupname := "C4", id := "",
296
identifier := [ [ "priv", "C4" ], [ "C4G1-p4B0.m1" ], 1, 4 ],
297
isPrimitive := false, p := 4, rankAction := 4,
298
repname := "C4G1-p4B0", repnr := 1, size := 4,
299
stabilizer := "1 < C2", standardization := 1, transitivity := 1,
300
type := "perm" )
301
gap> AtlasGenerators( "C4", 2 );
302
rec( dim := 1, generators := [ [ [ E(4) ] ] ], groupname := "C4",
303
id := "a", identifier := [ [ "priv", "C4" ], "C4G1-Ar1aB0.g", 1, 1 ]
304
, repname := "C4G1-Ar1aB0", repnr := 2, size := 4,
305
standardization := 1, type := "matalg" )
306
gap> AtlasGenerators( "C4", 3 );
307
fail
308
gap> AtlasProgram( "C4", "other", "test" );
309
rec( groupname := "C4",
310
identifier := [ [ "priv", "C4" ], "C4G1-XtestW1", 1 ],
311
program := <straight line program>, standardization := 1 )
312
]]></Example>
313
314
<P/>
315
316
We can restrict the data shown by <Ref Func="DisplayAtlasInfo"/> to the
317
private directory, as follows.
318
319
<P/>
320
321
<Example><![CDATA[
322
gap> DisplayAtlasInfo( "contents", "priv" );
323
group | # | maxes | cl | cyc | out | fnd | chk | p*
324
-------------------------+---+-------+----+-----+-----+-----+-----+--*
325
A5* | 1 | | | | | | | *
326
C4* | 2 | 1 | | | 2 | | | *
327
]]></Example>
328
329
<P/>
330
331
For checking the data in the private directory,
332
we apply the relevant sanity checks
333
(see Section&nbsp;<Ref Sect="sect:AGR Sanity Checks"/>).
334
335
<P/>
336
337
<Example><![CDATA[
338
gap> if not IsBound( AGR.Test ) then
339
> ReadPackage( "atlasrep", "gap/test.g" );
340
> fi;
341
gap> AGR.Test.Words( "priv" );
342
true
343
gap> AGR.Test.FileHeaders( "priv" );
344
true
345
gap> AGR.Test.Files( "priv" );
346
true
347
gap> AGR.Test.BinaryFormat( "priv" );
348
true
349
gap> AGR.Test.Primitivity( "priv" );
350
true
351
gap> AGR.Test.Characters( "priv" );
352
true
353
]]></Example>
354
355
<P/>
356
357
Finally, we <Q>uninstall</Q> the private directory,
358
and reset the info level that had been set to <M>1</M> in the beginning.
359
(Also the group name <C>C4</C> is removed this way, which is an advantage of
360
using a <F>toc.g</F> file over calling <C>AGRGNAN</C> directly.),
361
Note that we need not remove the data in the temporary directory,
362
&GAP; will do this automatically.
363
364
<P/>
365
366
<Example><![CDATA[
367
gap> AtlasOfGroupRepresentationsForgetPrivateDirectory( "priv" );
368
gap> SetInfoLevel( InfoAtlasRep, level );
369
]]></Example>
370
371
</Section>
372
373
374
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
375
376
</Chapter>
377
378
379