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
5 Residue-Class-Wise Affine Mappings, Groups and Monoids over ℤ^2
3
4
This chapter describes how to compute with residue-class-wise affine
5
mappings of ℤ^2 and with groups and monoids formed by them.
6
7
The rings on which we have defined residue-class-wise affine mappings so far
8
have all been principal ideal domains, and it has been crucial that all
9
nontrivial principal ideals had finite index. However, the rings ℤ^d, d > 1
10
are not principal ideal domains. Furthermore, their principal ideals have
11
infinite index. Therefore as moduli of residue-class-wise affine mappings we
12
can only use lattices of full rank, for these are precisely the ideals of
13
ℤ^d of finite index. However, on the other hand we can also be more
14
permissive and look at ℤ^d not as a ring, but rather as a free ℤ-module. The
15
consequence of this is that then an affine mapping of ℤ^d is not just given
16
by v ↦ (av+b)/c for some a, b, c ∈ ℤ^d, but rather by v ↦ (vA+b)/c, where A
17
∈ ℤ^d × d. Also for technical reasons concerning the implementation in GAP,
18
looking at ℤ^d as a free ℤ-module is preferable -- in GAP, Integers^d is not
19
a ring, and multiplying lists of integers means forming their scalar
20
product.
21
22
23
5.1 The definition of residue-class-wise affine mappings of ℤ^d
24
25
Let d ∈ ℕ. We call a mapping f: ℤ^d → ℤ^d residue-class-wise affine if there
26
is a lattice L = ℤ^d M where M ∈ ℤ^d × d is a matrix of full rank, such that
27
the restrictions of f to the residue classes r + L ∈ ℤ^d/L are all affine.
28
This means that for any residue class r + L ∈ ℤ^d/L, there is a matrix A_r+L
29
∈ ℤ^d × d, a vector b_r+L ∈ ℤ^d and a positive integer c_r+L such that the
30
restriction of f to r + L is given by f|_r + L: r + L → ℤ^d, v ↦ (v ⋅ A_r+L
31
+ b_r+L)/c_r+L. For reasons of uniqueness, we assume that L is chosen
32
maximal with respect to inclusion, and that no prime factor of c_r+L divides
33
all coefficients of A_r+L and b_r+L.
34
35
We call the lattice L the modulus of f, written Mod(f). Further we define
36
the prime set of f as the set of all primes which divide the determinant of
37
at least one of the coefficients A_r+L or which divide the determinant of M,
38
and we call the mapping f class-wise translating if all coefficients A_r+L
39
are identity matrices and all coefficients c_r+L are equal to 1.
40
41
For the sake of simplicity, we identify a lattice with the Hermite normal
42
form of the matrix by whose rows it is spanned.
43
44
45
5.2 Entering residue-class-wise affine mappings of ℤ^2
46
47
Residue-class-wise affine mappings of ℤ^2 can be entered using the general
48
constructor RcwaMapping (2.2-5) or the more specialized functions
49
ClassTransposition (2.2-3), ClassRotation (2.2-4) and ClassShift (2.2-1).
50
The arguments differ only slightly.
51
52
53
5.2-1 RcwaMapping (the general constructor; methods for ℤ^2)
54
55
RcwaMapping( R, L, coeffs )  method
56
RcwaMapping( P1, P2 )  method
57
RcwaMapping( cycles )  method
58
RcwaMapping( f, g )  method
59
Returns: an rcwa mapping of ℤ^2.
60
61
The above methods return
62
63
(a)
64
the rcwa mapping of R = Integers^2 with modulus L and coefficients
65
coeffs,
66
67
(b)
68
an rcwa permutation which induces a bijection between the partitions
69
P1 and P2 of ℤ^2 into residue classes and which is affine on the
70
elements of P1,
71
72
(c)
73
an rcwa permutation with residue class cycles given by a list cycles
74
of lists of pairwise disjoint residue classes of ℤ^2 each of which it
75
permutes cyclically, and
76
77
(d)
78
the rcwa mapping of ℤ^2 whose projections to the coordinates are given
79
by f and g,
80
81
respectively.
82
83
The modulus of an rcwa mapping of ℤ^2 is a lattice of full rank. It is
84
represented by a matrix L in Hermite normal form, whose rows are the
85
spanning vectors.
86
87
A coefficient list for an rcwa mapping of ℤ^2 with modulus L consists of
88
|det(L)| coefficient triples [A_r+ℤ^2L, b_r+ℤ^2L, c_r+ℤ^2L]. The entries
89
A_r+ℤ^2L are 2 × 2 integer matrices, the b_r+ℤ^2L are elements of ℤ^2, i.e.
90
lists of two integers, and the c_r+ℤ^2L are integers. The ordering of the
91
coefficient triples is determined by the ordering of the representatives of
92
the residue classes r+ℤ^2L in the sorted list returned by
93
AllResidues(Integers^2,L).
94
95
The methods for the operation RcwaMapping perform a number of argument
96
checks, which can be skipped by using RcwaMappingNC instead.
97
98
Last but not least, regarding Method (d) it should be mentioned that only
99
very special rcwa mappings of ℤ^2 have projections to coordinates.
100
101
 Example 
102

103
gap> R := Integers^2;;
104
gap> twice := RcwaMapping(R,[[1,0],[0,1]],
105
>  [[[[2,0],[0,2]],[0,0],1]]); # method (a)
106
Rcwa mapping of Z^2: (m,n) -> (2m,2n)
107
gap> [4,5]^twice;
108
[ 8, 10 ]
109
gap> twice1 := RcwaMapping(R,[[1,0],[0,1]],
110
>  [[[[2,0],[0,1]],[0,0],1]]); # method (a)
111
Rcwa mapping of Z^2: (m,n) -> (2m,n)
112
gap> [4,5]^twice1;
113
[ 8, 5 ]
114
gap> Image(twice1);
115
(0,0)+(2,0)Z+(0,1)Z
116
gap> hyperbolic := RcwaMapping(R,[[1,0],[0,2]],
117
>  [[[[4,0],[0,1]],[0, 0],2],
118
>  [[[4,0],[0,1]],[2,-1],2]]); # method (a)
119
<rcwa mapping of Z^2 with modulus (1,0)Z+(0,2)Z>
120
gap> IsBijective(hyperbolic);
121
true
122
gap> Display(hyperbolic);
123

124
Rcwa permutation of Z^2 with modulus (1,0)Z+(0,2)Z
125

126
 /
127
 | (2m,n/2) if (m,n) in (0,0)+(1,0)Z+(0,2)Z
128
 (m,n) |-> < (2m+1,(n-1)/2) if (m,n) in (0,1)+(1,0)Z+(0,2)Z
129
 |
130
 \
131

132
gap> Trajectory(hyperbolic,[0,10000],20);
133
[ [ 0, 10000 ], [ 0, 5000 ], [ 0, 2500 ], [ 0, 1250 ], [ 0, 625 ], 
134
 [ 1, 312 ], [ 2, 156 ], [ 4, 78 ], [ 8, 39 ], [ 17, 19 ], [ 35, 9 ], 
135
 [ 71, 4 ], [ 142, 2 ], [ 284, 1 ], [ 569, 0 ], [ 1138, 0 ], 
136
 [ 2276, 0 ], [ 4552, 0 ], [ 9104, 0 ], [ 18208, 0 ] ]
137
gap> P1 := AllResidueClassesModulo(R,[[2,1],[0,2]]);
138
[ (0,0)+(2,1)Z+(0,2)Z, (0,1)+(2,1)Z+(0,2)Z, (1,0)+(2,1)Z+(0,2)Z,
139
 (1,1)+(2,1)Z+(0,2)Z ]
140
gap> P2 := AllResidueClassesModulo(R,[[1,0],[0,4]]);
141
[ (0,0)+(1,0)Z+(0,4)Z, (0,1)+(1,0)Z+(0,4)Z, (0,2)+(1,0)Z+(0,4)Z,
142
 (0,3)+(1,0)Z+(0,4)Z ]
143
gap> g := RcwaMapping(P1,P2); # method (b)
144
<rcwa permutation of Z^2 with modulus (2,1)Z+(0,2)Z>
145
gap> P1^g = P2;
146
true
147
gap> Display(g:AsTable);
148

149
Rcwa permutation of Z^2 with modulus (2,1)Z+(0,2)Z
150

151
 [m,n] mod (2,1)Z+(0,2)Z | Image of [m,n]
152
-----------------------------+-------------------------------------------
153
 [0,0] | [m/2,-m+2n]
154
 [0,1] | [m/2,-m+2n-1]
155
 [1,0] | [(m-1)/2,-m+2n+3]
156
 [1,1] | [(m-1)/2,-m+2n+2]
157

158
gap> classes := List([[[0,0],[[2,1],[0,2]]],[[1,0],[[2,1],[0,4]]],
159
>  [[1,1],[[4,2],[0,4]]]],ResidueClass);
160
[ (0,0)+(2,1)Z+(0,2)Z, (1,0)+(2,1)Z+(0,4)Z, (1,1)+(4,2)Z+(0,4)Z ]
161
gap> g := RcwaMapping([classes]); # method (c)
162
<rcwa permutation of Z^2 with modulus (4,2)Z+(0,4)Z, of order 3>
163
gap> Permutation(g,classes);
164
(1,2,3)
165
gap> Support(g);
166
(0,0)+(2,1)Z+(0,2)Z U (1,0)+(2,1)Z+(0,4)Z U (1,1)+(4,2)Z+(0,4)Z
167
gap> Display(g);
168

169
Rcwa permutation of Z^2 with modulus (4,2)Z+(0,4)Z, of order 3
170

171
 /
172
 | (m+1,(-m+4n)/2) if (m,n) in (0,0)+(2,1)Z+(0,2)Z
173
 | (2m-1,(m+2n+1)/2) if (m,n) in (1,0)+(2,1)Z+(0,4)Z
174
 (m,n) |-> < ((m-1)/2,(n-1)/2) if (m,n) in (1,1)+(4,2)Z+(0,4)Z
175
 | (m,n) otherwise
176
 |
177
 \
178

179
gap> g := RcwaMapping(ClassTransposition(0,2,1,2),
180
>  ClassReflection(0,2)); # method (d)
181
<rcwa mapping of Z^2 with modulus (2,0)Z+(0,2)Z>
182
gap> Display(g);
183

184
Rcwa mapping of Z^2 with modulus (2,0)Z+(0,2)Z
185

186
 /
187
 | (m+1,-n) if (m,n) in (0,0)+(2,0)Z+(0,2)Z
188
 | (m+1,n) if (m,n) in (0,1)+(2,0)Z+(0,2)Z
189
 (m,n) |-> < (m-1,-n) if (m,n) in (1,0)+(2,0)Z+(0,2)Z
190
 | (m-1,n) if (m,n) in (1,1)+(2,0)Z+(0,2)Z
191
 |
192
 \
193

194
gap> g^2;
195
IdentityMapping( ( Integers^2 ) )
196
gap> List(ProjectionsToCoordinates(g),Factorization);
197
[ [ ( 0(2), 1(2) ) ], [ ClassReflection( 0(2) ) ] ]
198

199

200
201
202
5.2-2 ClassTransposition (for ℤ^2)
203
204
ClassTransposition( r1, L1, r2, L2 )  function
205
ClassTransposition( cl1, cl2 )  function
206
Returns: the class transposition τ_r_1+ℤ^2L_1,r_2+ℤ^2L_2.
207
208
Let d ∈ ℕ, and let L_1, L_2 ∈ ℤ^d × d be matrices of full rank which are in
209
Hermite normal form. Further let r_1 + ℤ^d L_1 and r_2 + ℤ^d L_2 be disjoint
210
residue classes, and assume that the representatives r_1 and r_2 are reduced
211
modulo ℤ^d L_1 and ℤ^d L_2, respectively. Then we define the class
212
transposition τ_r_1+ℤ^d L_1, r_2+ℤ^d L_2 ∈ Sym(ℤ^d) as the involution which
213
interchanges r_1 + k L_1 and r_2 + k L_2 for all k ∈ ℤ^d.
214
215
The class transposition τ_r_1+ℤ^d L_1, r_2+ℤ^d L_2 interchanges the residue
216
classes r_1+ℤ^d L_1 and r_2+ℤ^d L_2, and fixes the complement of their union
217
pointwise. The set of all class transpositions of ℤ^d generates the simple
218
group CT(ℤ^d) (cf. [Koh13]).
219
220
In the four-argument form, the arguments r1, L1, r2 and L2 stand for r_1,
221
L_1, r_2 and L_2, respectively. In the two-argument form, the arguments cl1
222
and cl2 stand for the residue classes r_1+ℤ^2 L_1 and r_2+ℤ^2 L_2,
223
respectively. Enclosing the argument list in list brackets is permitted. The
224
residue classes r_1+ℤ^2 L_1 and r_2+ℤ^2 L_2 are stored as an attribute
225
TransposedClasses.
226
227
There is also a method for SplittedClassTransposition available for class
228
transpositions of ℤ^2. This method takes as first argument the class
229
transposition, and as second argument a list of two integers. These integers
230
are the numbers of parts into which the class transposition is to be sliced
231
in each dimension. Note that the product of the returned class
232
transpositions is not always equal to the class transposition passed as
233
first argument. However this equality holds if the first entry of the second
234
argument is 1.
235
236
 Example 
237

238
gap> ct := ClassTransposition([0,0],[[2,1],[0,2]],[1,0],[[2,1],[0,4]]);
239
( (0,0)+(2,1)Z+(0,2)Z, (1,0)+(2,1)Z+(0,4)Z )
240
gap> Display(ct);
241

242
Rcwa permutation of Z^2 with modulus (2,1)Z+(0,4)Z, of order 2
243

244
 /
245
 | (m+1,(-m+4n)/2) if (m,n) in (0,0)+(2,1)Z+(0,2)Z
246
 (m,n) |-> < (m-1,(m+2n-1)/4) if (m,n) in (1,0)+(2,1)Z+(0,4)Z
247
 | (m,n) otherwise
248
 \
249

250
gap> TransposedClasses(ct);
251
[ (0,0)+(2,1)Z+(0,2)Z, (1,0)+(2,1)Z+(0,4)Z ]
252
gap> ct = ClassTransposition(last);
253
true
254
gap> SplittedClassTransposition(ct,[1,2]);
255
[ ( (0,0)+(2,1)Z+(0,4)Z, (1,0)+(2,1)Z+(0,8)Z ), 
256
 ( (0,2)+(2,1)Z+(0,4)Z, (1,4)+(2,1)Z+(0,8)Z ) ]
257
gap> Product(last) = ct;
258
true
259
gap> SplittedClassTransposition(ct,[2,1]);
260
[ ( (0,0)+(4,0)Z+(0,2)Z, (1,0)+(4,2)Z+(0,4)Z ), 
261
 ( (2,1)+(4,0)Z+(0,2)Z, (3,1)+(4,2)Z+(0,4)Z ) ]
262
gap> Product(last) = ct;
263
false
264

265

266
267
268
5.2-3 ClassRotation (for ℤ^2)
269
270
ClassRotation( r, L, u )  function
271
ClassRotation( cl, u )  function
272
Returns: the class rotation ρ_r(m),u.
273
274
Let d ∈ ℕ. Given a residue class r+ℤ^dL and a matrix u ∈ GL(d,ℤ), the class
275
rotation ρ_r+ℤ^dL,u is the rcwa mapping which maps v ∈ r+ℤ^dL to vu + r(1-u)
276
and which fixes ℤ^d ∖ r+ℤ^dL pointwise. In the two-argument form, the
277
argument cl stands for the residue class r+ℤ^dL. Enclosing the argument list
278
in list brackets is permitted. The argument u is stored as an attribute
279
RotationFactor.
280
281
 Example 
282

283
gap> interchange := ClassRotation([0,0],[[1,0],[0,1]],[[0,1],[1,0]]);
284
ClassRotation( Z^2, [ [ 0, 1 ], [ 1, 0 ] ] )
285
gap> Display(interchange);
286
Rcwa permutation of Z^2: (m,n) -> (n,m)
287
gap> classes := AllResidueClassesModulo(Integers^2,[[2,1],[0,3]]);
288
[ (0,0)+(2,1)Z+(0,3)Z, (0,1)+(2,1)Z+(0,3)Z, (0,2)+(2,1)Z+(0,3)Z, 
289
 (1,0)+(2,1)Z+(0,3)Z, (1,1)+(2,1)Z+(0,3)Z, (1,2)+(2,1)Z+(0,3)Z ]
290
gap> transvection := ClassRotation(classes[5],[[1,1],[0,1]]);
291
ClassRotation((1,1)+(2,1)Z+(0,3)Z,[[1,1],[0,1]])
292
gap> Display(transvection);
293

294
Tame rcwa permutation of Z^2 with modulus (2,1)Z+(0,3)Z, of order infinity
295

296
 /
297
 | (m,(3m+2n-3)/2) if (m,n) in (1,1)+(2,1)Z+(0,3)Z
298
 (m,n) |-> < (m,n) otherwise
299
 |
300
 \
301

302

303
304
305
5.2-4 ClassShift (for ℤ^2)
306
307
ClassShift( r, L, k )  function
308
ClassShift( cl, k )  function
309
Returns: the class shift ν_r+ℤ^dL,k.
310
311
Let d ∈ ℕ. Given a residue class r+ℤ^dL and an integer k ∈ {1, dots, d}, the
312
class shift ν_r+ℤ^dL,k is the rcwa mapping which maps v ∈ r+ℤ^dL to v + L_k
313
and which fixes ℤ^d ∖ r+ℤ^dL pointwise. Here L_k denotes the kth row of L.
314
315
In the two-argument form, the argument cl stands for the residue
316
class r+ℤ^dL. Enclosing the argument list in list brackets is permitted.
317
318
 Example 
319

320
gap> shift1 := ClassShift([0,0],[[1,0],[0,1]],1);
321
ClassShift( Z^2, 1 )
322
gap> Display(shift1);
323
Tame rcwa permutation of Z^2: (m,n) -> (m+1,n)
324
gap> s := ClassShift(ResidueClass([1,1],[[2,1],[0,2]]),2);
325
ClassShift((1,1)+(2,1)Z+(0,2)Z,2)
326
gap> Display(s);
327

328
Tame rcwa permutation of Z^2 with modulus (2,1)Z+(0,2)Z, of order infinity
329

330
 /
331
 | (m,n+2) if (m,n) in (1,1)+(2,1)Z+(0,2)Z
332
 (m,n) |-> < (m,n) if (m,n) in (0,0)+(2,0)Z+(0,1)Z U 
333
 | (1,0)+(2,1)Z+(0,2)Z
334
 \
335

336

337
338
As for other rings, class transpositions, class rotations and class shifts
339
of ℤ^2 have the distinguishing properties IsClassTransposition,
340
IsClassRotation and IsClassShift.
341
342
343
5.3 Methods for residue-class-wise affine mappings of ℤ^2
344
345
There are methods available for rcwa mappings of ℤ^2 for the following
346
general operations:
347
348
 Output 
349
View, Display, Print, String, LaTeXStringRcwaMapping, LaTeXAndXDVI.
350
351
 Access to components 
352
Modulus, Coefficients.
353
354
 Attributes 
355
Support / MovedPoints, Order, Multiplier, Divisor, PrimeSet, One,
356
Zero.
357
358
 Properties 
359
IsInjective, IsSurjective, IsBijective, IsTame, IsIntegral,
360
IsBalanced, IsClassWiseOrderPreserving, IsOne, IsZero.
361
362
 Action on ℤ^d 
363
^ (for points / finite sets / residue class unions), Trajectory,
364
ShortCycles, Multpk, ClassWiseOrderPreservingOn,
365
ClassWiseOrderReversingOn, ClassWiseConstantOn.
366
367
 Arithmetical operations 
368
=, * (multiplication / composition and multiplication by a 2 × 2
369
matrix or an integer), ^ (exponentiation and conjugation), Inverse, +
370
(addition of a constant).
371
372
The above operations are documented either in the GAP Reference Manual or
373
earlier in this manual. The operations which are special for rcwa mappings
374
of ℤ^2 are described in the sequel.
375
376
5.3-1 ProjectionsToCoordinates
377
378
ProjectionsToCoordinates( f )  attribute
379
Returns: the projections of the rcwa mapping f of ℤ^2 to the coordinates if
380
such projections exist, and fail otherwise.
381
382
An rcwa mapping can be projected to the first / second coordinate if and
383
only if the first / second coordinate of the image of a point depends only
384
on the first / second coordinate of the preimage. Note that this is a very
385
strong and restrictive condition.
386
387
 Example 
388

389
gap> f := RcwaMapping(ClassTransposition(0,2,1,2),ClassReflection(0,2));;
390
gap> Display(f);
391

392
Rcwa mapping of Z^2 with modulus (2,0)Z+(0,2)Z
393

394
 /
395
 | (m+1,-n) if (m,n) in (0,0)+(2,0)Z+(0,2)Z
396
 | (m+1,n) if (m,n) in (0,1)+(2,0)Z+(0,2)Z
397
 (m,n) |-> < (m-1,-n) if (m,n) in (1,0)+(2,0)Z+(0,2)Z
398
 | (m-1,n) if (m,n) in (1,1)+(2,0)Z+(0,2)Z
399
 |
400
 \
401

402
gap> List(ProjectionsToCoordinates(f),Factorization);
403
[ [ ( 0(2), 1(2) ) ], [ ClassReflection( 0(2) ) ] ]
404

405

406
407
408
5.4 Methods for residue-class-wise affine groups and -monoids over ℤ^2
409
410
Residue-class-wise affine groups over ℤ^2 can be entered by Group,
411
GroupByGenerators and GroupWithGenerators, like any groups in GAP. Likewise,
412
residue-class-wise affine monoids over ℤ^2 can be entered by Monoid and
413
MonoidByGenerators. The groups RCWA(ℤ^2) and CT(ℤ^2) are entered as
414
RCWA(Integers^2) and CT(Integers^2), respectively. The monoid Rcwa(ℤ^2) is
415
entered as Rcwa(Integers^2).
416
417
There are methods provided for the operations Size, IsIntegral,
418
IsClassWiseTranslating, IsTame, Modulus, Multiplier and Divisor.
419
420
There are methods for IsomorphismRcwaGroup (3.1-1) which embed the groups
421
SL(2,ℤ) and GL(2,ℤ) into RCWA(ℤ^2) in such a way that the support of the
422
image is a specified residue class:
423
424
425
5.4-1 IsomorphismRcwaGroup (Embeddings of SL(2,ℤ) and GL(2,ℤ))
426
427
IsomorphismRcwaGroup( sl2z, cl )  attribute
428
IsomorphismRcwaGroup( gl2z, cl )  attribute
429
Returns: a monomorphism from sl2z respectively gl2z to RCWA(ℤ^2), such that
430
the support of the image is the residue class cl and the
431
generators are affine on cl.
432
433
 Example 
434

435
gap> sl := SL(2,Integers);
436
SL(2,Integers)
437
gap> phi := IsomorphismRcwaGroup(sl,ResidueClass([1,0],[[2,2],[0,3]]));
438
[ [ [ 0, 1 ], [ -1, 0 ] ], [ [ 1, 1 ], [ 0, 1 ] ] ] -> 
439
[ ClassRotation((1,0)+(2,2)Z+(0,3)Z,[[0,1],[-1,0]]), 
440
 ClassRotation((1,0)+(2,2)Z+(0,3)Z,[[1,1],[0,1]]) ]
441
gap> Support(Image(phi));
442
(1,0)+(2,2)Z+(0,3)Z
443
gap> gl := GL(2,Integers);
444
GL(2,Integers)
445
gap> phi := IsomorphismRcwaGroup(gl,ResidueClass([1,0],[[2,2],[0,3]]));
446
[ [ [ 0, 1 ], [ 1, 0 ] ], [ [ -1, 0 ], [ 0, 1 ] ], 
447
 [ [ 1, 1 ], [ 0, 1 ] ] ] -> 
448
[ ClassRotation((1,0)+(2,2)Z+(0,3)Z,[[0,1],[1,0]]), 
449
 ClassRotation((1,0)+(2,2)Z+(0,3)Z,[[-1,0],[0,1]]), 
450
 ClassRotation((1,0)+(2,2)Z+(0,3)Z,[[1,1],[0,1]]) ]
451
gap> [[-47,-37],[61,48]]^phi;
452
ClassRotation((1,0)+(2,2)Z+(0,3)Z,[[-47,-37],[61,48]])
453
gap> Display(last:AsTable);
454

455
Rcwa permutation of Z^2 with modulus (2,2)Z+(0,3)Z, of order 6
456

457
 [m,n] mod (2,2)Z+(0,3)Z | Image of [m,n]
458
-----------------------------+-------------------------------------------
459
 [0,0] [0,1] [0,2] [1,1] |
460
 [1,2] | [m,n]
461
 [1,0] | [(-263m+122n+266)/3,(-1147m+532n+1147)/6]
462

463

464
465
The function DrawOrbitPicture (3.3-3) can also be used to depict orbits
466
under the action of rcwa groups over ℤ^2. Further there is a function which
467
depicts residue class unions of ℤ^2 and partitions of ℤ^2 into such:
468
469
470
5.4-2 DrawGrid
471
472
DrawGrid( U, yrange, xrange, filename )  function
473
DrawGrid( P, yrange, xrange, filename )  function
474
Returns: nothing.
475
476
This function depicts the residue class union U of ℤ^2 or the partition P
477
of ℤ^2 into residue class unions, respectively. The arguments yrange and
478
xrange are the coordinate ranges of the rectangular snippet to be drawn, and
479
the argument filename is the name, i.e. the full path name, of the output
480
file. If the first argument is a residue class union, the output picture is
481
black-and-white, where black pixels represent members of U and white pixels
482
represent non-members. If the first argument is a partition of ℤ^2 into
483
residue class unions, the produced picture is colored, and different colors
484
are used to denote membership in different parts.
485
486
487