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
#############################################################################
##
#W  zxz.tst                  GAP4 Package `RCWA'                  Stefan Kohl
##
##  This file contains automated tests of RCWA's functionality for
##  rcwa mappings of and rcwa groups over Z^2.
##
#############################################################################

gap> START_TEST( "zxz.tst" );
gap> RCWADoThingsToBeDoneBeforeTest();
gap> L1 := [ [ 2, 1 ], [ -1, 2 ] ];;
gap> L2 := [ [ 6, 2 ], [ 0, 6 ] ];;
gap> R := DefaultRing(L1,L2);
( Integers^[ 2, 2 ] )
gap> DefaultRing([[1,2,3],[4,5,6],[7,8,9]]);
( Integers^[ 3, 3 ] )
gap> Lcm(L1,L2);
[ [ 6, 8 ], [ 0, 30 ] ]
gap> Lcm(R,L1,L2);
[ [ 6, 8 ], [ 0, 30 ] ]
gap> Lcm(L1,L1);
[ [ 1, 3 ], [ 0, 5 ] ]
gap> cls := AllResidueClassesModulo(Integers^2,[[2,1],[0,2]]);
[ (0,0)+(2,1)Z+(0,2)Z, (0,1)+(2,1)Z+(0,2)Z, (1,0)+(2,1)Z+(0,2)Z, 
  (1,1)+(2,1)Z+(0,2)Z ]
gap> ct := ClassTransposition(cls[1],cls[3]);
( (0,0)+(2,1)Z+(0,2)Z, (1,0)+(2,1)Z+(0,2)Z )
gap> Support(ct);                            
(0,0)+(2,1)Z+(0,2)Z U (1,0)+(2,1)Z+(0,2)Z
gap> [0,0]^ct;
[ 1, 0 ]
gap> [[0,0]]^ct;            
[ [ 1, 0 ] ]
gap> [[0,0],[1,0]]^ct;
[ [ 0, 0 ], [ 1, 0 ] ]
gap> [[0,0],[1,0],[1,1]]^ct;
[ [ 0, 0 ], [ 1, 0 ], [ 1, 1 ] ]
gap> ImagesElm(ct,[0,0]);
[ [ 1, 0 ] ]
gap> Display(ct+[2,3]);

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

            /
            | (m+2,n+3) if (m,n) in (0,1)+(2,1)Z+(0,2)Z U (1,1)+(2,1)Z+(0,2)Z
 (m,n) |-> <  (m+3,n+3) if (m,n) in (0,0)+(2,1)Z+(0,2)Z
            | (m+1,n+3) if (m,n) in (1,0)+(2,1)Z+(0,2)Z
            \

gap> [-2,-3]+ct+[2,3] = ct;
true
gap> ct*ct;
IdentityMapping( ( Integers^2 ) )
gap> \*(ct,ct:sparse);
IdentityMapping( ( Integers^2 ) )
gap> ct in CT(Integers^2);
true
gap> ct in CT(Integers);  
false
gap> g := RcwaMapping(Integers^2,Mod(ct),ShallowCopy(Coefficients(ct)));
<rcwa mapping of Z^2 with modulus (2,1)Z+(0,2)Z>
gap> String(g);
"RcwaMapping( Integers^2, [ [ 2, 1 ], [ 0, 2 ] ], [ [ [ [ 1, 0 ], [ 0, 1 ] ], \
[ 1, 0 ], 1 ], [ [ [ 1, 0 ], [ 0, 1 ] ], [ 0, 0 ], 1 ], [ [ [ 1, 0 ], [ 0, 1 ]\
 ], [ -1, 0 ], 1 ], [ [ [ 1, 0 ], [ 0, 1 ] ], [ 0, 0 ], 1 ] ] )"
gap> Print(g,"\n");                                                     
RcwaMapping( Integers^2, [ [ 2, 1 ], [ 0, 2 ] ], 
[ [ [ [ 1, 0 ], [ 0, 1 ] ], [ 1, 0 ], 1 ], 
  [ [ [ 1, 0 ], [ 0, 1 ] ], [ 0, 0 ], 1 ], 
  [ [ [ 1, 0 ], [ 0, 1 ] ], [ -1, 0 ], 1 ], 
  [ [ [ 1, 0 ], [ 0, 1 ] ], [ 0, 0 ], 1 ] ] )
gap> Length(LaTeXStringRcwaMapping(g));
311
gap> Order(g);
2
gap> IsClassTransposition(g);
true
gap> g;
( (0,0)+(2,1)Z+(0,2)Z, (1,0)+(2,1)Z+(0,2)Z )
gap> g = ct;
true
gap> Display(2*ct);

Injective rcwa mapping of Z^2 with modulus (2,1)Z+(0,2)Z

            /
            | (2m,2n)   if (m,n) in (0,1)+(2,1)Z+(0,2)Z U (1,1)+(2,1)Z+(0,2)Z
 (m,n) |-> <  (2m+2,2n) if (m,n) in (0,0)+(2,1)Z+(0,2)Z
            | (2m-2,2n) if (m,n) in (1,0)+(2,1)Z+(0,2)Z
            \

gap> SigmaT := RcwaMapping( Integers^2, [[1,0],[0,6]],
>                           [[[0,0],[[[2,0],[0,1]],[0,0],2]],
>                            [[0,1],[[[4,0],[0,3]],[0,1],2]],
>                            [[0,2],[[[2,0],[0,1]],[0,0],2]],
>                            [[0,3],[[[4,0],[0,3]],[0,1],2]],
>                            [[0,4],[[[4,0],[0,1]],[2,0],2]],
>                            [[0,5],[[[4,0],[0,3]],[0,1],2]]] );
<rcwa mapping of Z^2 with modulus (1,0)Z+(0,6)Z>
gap> Mod(SigmaT);
[ [ 1, 0 ], [ 0, 6 ] ]
gap> Mult(SigmaT);
[ [ 4, 0 ], [ 0, 3 ] ]
gap> Div(SigmaT);
2
gap> IsBalanced(SigmaT);
false
gap> Lcm(Mult(SigmaT),Mod(SigmaT));
[ [ 4, 0 ], [ 0, 6 ] ]
gap> inc := IncreasingOn(SigmaT);
(0,1)+(1,0)Z+(0,2)Z
gap> Density(inc);
1/2
gap> dec := DecreasingOn(SigmaT);
(0,0)+(1,0)Z+(0,6)Z U (0,2)+(1,0)Z+(0,6)Z
gap> Density(dec);
1/3
gap> Intersection(inc,dec);
[  ]
gap> R := Integers^2;
( Integers^2 )
gap> Source(SigmaT);
( Integers^2 )
gap> Union(inc,dec);
Z^2 \ (0,4)+(1,0)Z+(0,6)Z
gap> S := last;;
gap> Difference(R,S);
(0,4)+(1,0)Z+(0,6)Z
gap> IsClassWiseOrderPreserving(SigmaT);
true
gap> ClassWiseOrderPreservingOn(SigmaT);
( Integers^2 )
gap> ClassWiseOrderReversingOn(SigmaT);
[  ]
gap> ClassWiseConstantOn(SigmaT);
[  ]
gap> ClassWiseOrderPreservingOn(One(SigmaT));
( Integers^2 )
gap> ClassWiseConstantOn(One(SigmaT));
[  ]
gap> ClassWiseConstantOn(Zero(SigmaT));
( Integers^2 )
gap> PrimeSet(SigmaT);
[ 2, 3 ]
gap> IsOne(SigmaT);
false
gap> IsZero(SigmaT);
false
gap> \*(SigmaT,ct:sparse) = SigmaT*ct;   
true
gap> l := LargestSourcesOfAffineMappings(SigmaT);
[ (0,1)+(1,0)Z+(0,2)Z, (0,0)+(1,0)Z+(0,6)Z U (0,2)+(1,0)Z+(0,6)Z, 
  (0,4)+(1,0)Z+(0,6)Z ]
gap> Union(l);
( Integers^2 )
gap> List(l,Density);
[ 1/2, 1/3, 1/6 ]
gap> ImageDensity(SigmaT);
1
gap> Multpk(SigmaT,2,1);
[  ]
gap> Multpk(SigmaT,2,0);
Z^2 \ (0,0)+(1,0)Z+(0,6)Z U (0,2)+(1,0)Z+(0,6)Z
gap> Multpk(SigmaT,2,-1);
(0,0)+(1,0)Z+(0,6)Z U (0,2)+(1,0)Z+(0,6)Z
gap> Multpk(SigmaT,3,0);
(0,0)+(1,0)Z+(0,2)Z
gap> Multpk(SigmaT,3,1);
(0,1)+(1,0)Z+(0,2)Z
gap> Union(last,last2);
( Integers^2 )
gap> Multpk(SigmaT,3,-1);
[  ]
gap> Multpk(SigmaT,3,2);
[  ]
gap> Image(SigmaT);
( Integers^2 )
gap> IsBijective(SigmaT);
true
gap> Display(SigmaT);

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

            /
            | (2m,(3n+1)/2) if (m,n) in (0,1)+(1,0)Z+(0,2)Z
            | (m,n/2)       if (m,n) in (0,0)+(1,0)Z+(0,6)Z U 
 (m,n) |-> <                            (0,2)+(1,0)Z+(0,6)Z
            | (2m+1,n/2)    if (m,n) in (0,4)+(1,0)Z+(0,6)Z
            |
            \

gap> Display(SigmaT:table,VarNames:="v");

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

      v mod (1,0)Z+(0,6)Z      |                 Image of v
-------------------------------+----------------------------------------------
 [0,0] [0,2]                   | v * [[2,0],[0,1]]/2
 [0,1] [0,3] [0,5]             | (v * [[4,0],[0,3]] + [0,1])/2
 [0,4]                         | (v * [[4,0],[0,1]] + [2,0])/2

gap> Display(SigmaT^-1);

Rcwa permutation of Z^2 with modulus (2,0)Z+(0,3)Z

            /
            | (m,2n)         if (m,n) in (0,0)+(1,0)Z+(0,3)Z U 
            |                            (0,1)+(1,0)Z+(0,3)Z
 (m,n) |-> <  (m/2,(2n-1)/3) if (m,n) in (0,2)+(2,0)Z+(0,3)Z
            | ((m-1)/2,2n)   if (m,n) in (1,2)+(2,0)Z+(0,3)Z
            |
            \

gap> Display(SigmaT^-1:table);

Rcwa permutation of Z^2 with modulus (2,0)Z+(0,3)Z

    [m,n] mod (2,0)Z+(0,3)Z    |               Image of [m,n]
-------------------------------+----------------------------------------------
 [0,0] [0,1] [1,0] [1,1]       | [m,2n]
 [0,2]                         | [m/2,(2n-1)/3]
 [1,2]                         | [(m-1)/2,2n]

gap> Display(SigmaT^2);

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

            /
            | (2m,(3n+1)/4)   if (m,n) in (0,1)+(1,0)Z+(0,4)Z
            | (4m,(9n+5)/4)   if (m,n) in (0,3)+(1,0)Z+(0,4)Z
            | (2m,(3n+2)/4)   if (m,n) in (0,2)+(1,0)Z+(0,12)Z U 
            |                             (0,6)+(1,0)Z+(0,12)Z
 (m,n) |-> <  (2m+1,n/4)      if (m,n) in (0,4)+(1,0)Z+(0,12)Z U 
            |                             (0,8)+(1,0)Z+(0,12)Z
            | (m,n/4)         if (m,n) in (0,0)+(1,0)Z+(0,12)Z
            | (4m+2,(3n+2)/4) if (m,n) in (0,10)+(1,0)Z+(0,12)Z
            |
            \

gap> SigmaT*SigmaT^-1;
IdentityMapping( ( Integers^2 ) )
gap> SigmaT^2*SigmaT^-1;
<rcwa permutation of Z^2 with modulus (1,0)Z+(0,6)Z>
gap> last=SigmaT;
true
gap> SigmaT^-1*SigmaT^2 = SigmaT;
true
gap> SigmaT^-1*SigmaT^2*SigmaT^-1;
IdentityMapping( ( Integers^2 ) )
gap> [4,27]^SigmaT;
[ 8, 41 ]
gap> [[4,27],[8,41]]^SigmaT;
[ [ 8, 41 ], [ 16, 62 ] ]
gap> Cartesian([-2..2],[-2..2])^SigmaT;
[ [ -4, -1 ], [ -4, 2 ], [ -3, -1 ], [ -2, -1 ], [ -2, 0 ], [ -2, 1 ], 
  [ -2, 2 ], [ -1, -1 ], [ -1, 0 ], [ -1, 1 ], [ 0, -1 ], [ 0, 0 ], [ 0, 1 ], 
  [ 0, 2 ], [ 1, -1 ], [ 1, 0 ], [ 1, 1 ], [ 2, -1 ], [ 2, 0 ], [ 2, 1 ], 
  [ 2, 2 ], [ 3, -1 ], [ 4, -1 ], [ 4, 2 ], [ 5, -1 ] ]
gap> l^SigmaT;
[ (0,2)+(2,0)Z+(0,3)Z, Z^2 \ (0,2)+(1,0)Z+(0,3)Z, (1,2)+(2,0)Z+(0,3)Z ]
gap> List(last,Density);
[ 1/6, 2/3, 1/6 ]
gap> Union(last2);
( Integers^2 )
gap> cls := AllResidueClassesModulo(R,L1);
[ (0,0)+(1,3)Z+(0,5)Z, (0,1)+(1,3)Z+(0,5)Z, (0,2)+(1,3)Z+(0,5)Z, 
  (0,3)+(1,3)Z+(0,5)Z, (0,4)+(1,3)Z+(0,5)Z ]
gap> imgs := cls^SigmaT;
[ <union of 30 residue classes (mod (10,0)Z+(0,15)Z)>, 
  <union of 30 residue classes (mod (10,0)Z+(0,15)Z)>, 
  <union of 30 residue classes (mod (10,0)Z+(0,15)Z)>, 
  <union of 30 residue classes (mod (10,0)Z+(0,15)Z)>, 
  <union of 30 residue classes (mod (10,0)Z+(0,15)Z)> ]
gap> Union(imgs);
( Integers^2 )
gap> List(imgs,AsUnionOfFewClasses);
[ [ (0,0)+(1,9)Z+(0,15)Z, (0,10)+(1,9)Z+(0,15)Z, (1,5)+(2,9)Z+(0,15)Z, 
      (0,8)+(2,12)Z+(0,15)Z ], 
  [ (0,3)+(1,9)Z+(0,15)Z, (0,13)+(1,9)Z+(0,15)Z, (1,8)+(2,9)Z+(0,15)Z, 
      (0,2)+(2,12)Z+(0,15)Z ], 
  [ (0,1)+(1,9)Z+(0,15)Z, (0,6)+(1,9)Z+(0,15)Z, (1,11)+(2,9)Z+(0,15)Z, 
      (0,11)+(2,12)Z+(0,15)Z ], 
  [ (0,4)+(1,9)Z+(0,15)Z, (0,9)+(1,9)Z+(0,15)Z, (1,14)+(2,9)Z+(0,15)Z, 
      (0,5)+(2,12)Z+(0,15)Z ], 
  [ (0,7)+(1,9)Z+(0,15)Z, (0,12)+(1,9)Z+(0,15)Z, (1,2)+(2,9)Z+(0,15)Z, 
      (0,14)+(2,12)Z+(0,15)Z ] ]
gap> twice := RcwaMapping(R,[[1,0],[0,1]],[[[0,0],[[[2,0],[0,2]],[0,0],1]]]);
Rcwa mapping of Z^2: (m,n) -> (2m,2n)
gap> IsSurjective(twice);
false
gap> IsInjective(twice);
true
gap> Image(twice);
(0,0)+(2,0)Z+(0,2)Z
gap> ImageDensity(twice);
1/4
gap> twice;
Injective rcwa mapping of Z^2: (m,n) -> (2m,2n)
gap> Support(twice);
Z^2 \ [ [ 0, 0 ] ]
gap> g := RcwaMapping(ClassTransposition(0,2,1,2),ClassShift(0,3));
<rcwa mapping of Z^2 with modulus (2,0)Z+(0,3)Z>
gap> Display(g);

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

            /
            | (m+1,n)   if (m,n) in (0,1)+(2,0)Z+(0,3)Z U (0,2)+(2,0)Z+(0,3)Z
            | (m-1,n)   if (m,n) in (1,1)+(2,0)Z+(0,3)Z U (1,2)+(2,0)Z+(0,3)Z
 (m,n) |-> <  (m+1,n+3) if (m,n) in (0,0)+(2,0)Z+(0,3)Z
            | (m-1,n+3) if (m,n) in (1,0)+(2,0)Z+(0,3)Z
            |
            \

gap> T := RcwaMapping([[1,0,2],[3,1,2]]);;
gap> Display(RcwaMapping(Integers^2,T,T));

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

            /
            | (m/2,n/2)           if (m,n) in (0,0)+(2,0)Z+(0,2)Z
            | (m/2,(3n+1)/2)      if (m,n) in (0,1)+(2,0)Z+(0,2)Z
 (m,n) |-> <  ((3m+1)/2,n/2)      if (m,n) in (1,0)+(2,0)Z+(0,2)Z
            | ((3m+1)/2,(3n+1)/2) if (m,n) in (1,1)+(2,0)Z+(0,2)Z
            |
            \

gap> Display(g:table);

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

    [m,n] mod (2,0)Z+(0,3)Z    |               Image of [m,n]
-------------------------------+----------------------------------------------
 [0,0]                         | [m+1,n+3]
 [0,1] [0,2]                   | [m+1,n]
 [1,0]                         | [m-1,n+3]
 [1,1] [1,2]                   | [m-1,n]

gap> Projection(g,1) = ClassTransposition(0,2,1,2); 
true
gap> Projection(g,2) = ClassShift(0,3);            
true
gap> ProjectionsToCoordinates(g);
[ <rcwa mapping of Z with modulus 2>, <rcwa mapping of Z with modulus 3> ]
gap> List(last,Factorization);
[ [ ( 0(2), 1(2) ) ], [ ClassShift( 0(3) ) ] ]
gap> transvection := RcwaMapping(R,[[1,0],[0,1]],[[[[1,1],[1,0]],[0,0],1]]);
Rcwa mapping of Z^2: (m,n) -> (m+n,m)
gap> g := transvection*SigmaT;
<rcwa mapping of Z^2 with modulus (6,0)Z+(0,1)Z>
gap> Display(g);

Rcwa mapping of Z^2 with modulus (6,0)Z+(0,1)Z

            /
            | (2m+2n,(3m+1)/2) if (m,n) in (1,0)+(2,0)Z+(0,1)Z
            | (m+n,m/2)        if (m,n) in (0,0)+(6,0)Z+(0,1)Z U 
 (m,n) |-> <                               (2,0)+(6,0)Z+(0,1)Z
            | (2m+2n+1,m/2)    if (m,n) in (4,0)+(6,0)Z+(0,1)Z
            |
            \

gap> IsBijective(g);
true
gap> ct := ClassTransposition(0,2,1,2);
( 0(2), 1(2) )
gap> g := RcwaMapping(ct,One(ct));
( (0,0)+(2,0)Z+(0,1)Z, (1,0)+(2,0)Z+(0,1)Z )
gap> elm1 := SigmaT*g;
<rcwa mapping of Z^2 with modulus (2,0)Z+(0,6)Z>
gap> elm2 := g*SigmaT^-1;
<rcwa mapping of Z^2 with modulus (2,0)Z+(0,3)Z>
gap> elm1*elm2;
IdentityMapping( ( Integers^2 ) )
gap> elm2*elm1;
IdentityMapping( ( Integers^2 ) )
gap> P1 := SplittedClass(R,[2,2]);
[ (0,0)+(2,0)Z+(0,2)Z, (0,1)+(2,0)Z+(0,2)Z, (1,0)+(2,0)Z+(0,2)Z, 
  (1,1)+(2,0)Z+(0,2)Z ]
gap> P1[2] := SplittedClass(P1[2],[2,3]);;
gap> P1 := Flat(P1);
[ (0,0)+(2,0)Z+(0,2)Z, (0,1)+(4,0)Z+(0,6)Z, (0,3)+(4,0)Z+(0,6)Z, 
  (0,5)+(4,0)Z+(0,6)Z, (2,1)+(4,0)Z+(0,6)Z, (2,3)+(4,0)Z+(0,6)Z, 
  (2,5)+(4,0)Z+(0,6)Z, (1,0)+(2,0)Z+(0,2)Z, (1,1)+(2,0)Z+(0,2)Z ]
gap> P2 := Set(P1);;
gap> g := RcwaMapping(P1,P2);
<rcwa permutation of Z^2 with modulus (4,0)Z+(0,6)Z>
gap> P1^g;
[ (0,0)+(2,0)Z+(0,2)Z, (1,0)+(2,0)Z+(0,2)Z, (1,1)+(2,0)Z+(0,2)Z, 
  (0,1)+(4,0)Z+(0,6)Z, (0,3)+(4,0)Z+(0,6)Z, (0,5)+(4,0)Z+(0,6)Z, 
  (2,1)+(4,0)Z+(0,6)Z, (2,3)+(4,0)Z+(0,6)Z, (2,5)+(4,0)Z+(0,6)Z ]
gap> last=P2;
true
gap> Union(P1);
( Integers^2 )
gap> Union(P2);
( Integers^2 )
gap> List(P1,Density);
[ 1/4, 1/24, 1/24, 1/24, 1/24, 1/24, 1/24, 1/4, 1/4 ]
gap> List(P2,Density);
[ 1/4, 1/4, 1/4, 1/24, 1/24, 1/24, 1/24, 1/24, 1/24 ]
gap> Display(g);

Rcwa permutation of Z^2 with modulus (4,0)Z+(0,6)Z

            /
            | (2m,3n+3)         if (m,n) in (1,0)+(2,0)Z+(0,2)Z
            | (2m,3n+2)         if (m,n) in (1,1)+(2,0)Z+(0,2)Z
            | (m,n-4)           if (m,n) in (0,5)+(2,0)Z+(0,6)Z
            | (m-2,n+2)         if (m,n) in (2,1)+(4,0)Z+(0,6)Z U 
 (m,n) |-> <                                (2,3)+(4,0)Z+(0,6)Z
            | ((m+2)/2,(n-1)/3) if (m,n) in (0,1)+(4,0)Z+(0,6)Z
            | ((m+2)/2,n/3)     if (m,n) in (0,3)+(4,0)Z+(0,6)Z
            | (m,n)             if (m,n) in (0,0)+(2,0)Z+(0,2)Z
            |
            \

gap> Display(g:AsTable);

Rcwa permutation of Z^2 with modulus (4,0)Z+(0,6)Z

    [m,n] mod (4,0)Z+(0,6)Z    |               Image of [m,n]
-------------------------------+----------------------------------------------
 [0,0] [0,2] [0,4] [2,0]       | 
 [2,2] [2,4]                   | [m,n]
 [0,1]                         | [(m+2)/2,(n-1)/3]
 [0,3]                         | [(m+2)/2,n/3]
 [0,5] [2,5]                   | [m,n-4]
 [1,0] [1,2] [1,4] [3,0]       | 
 [3,2] [3,4]                   | [2m,3n+3]
 [1,1] [1,3] [1,5] [3,1]       | 
 [3,3] [3,5]                   | [2m,3n+2]
 [2,1] [2,3]                   | [m-2,n+2]

gap> ct := ClassTransposition(P1[1],P1[2]);
( (0,0)+(2,0)Z+(0,2)Z, (0,1)+(4,0)Z+(0,6)Z )
gap> Display(ct);

Rcwa permutation of Z^2 with modulus (4,0)Z+(0,6)Z, of order 2

            /
            | (2m,3n+1)     if (m,n) in (0,0)+(2,0)Z+(0,2)Z
 (m,n) |-> <  (m/2,(n-1)/3) if (m,n) in (0,1)+(4,0)Z+(0,6)Z
            | (m,n)         otherwise
            \

gap> ct*ct;
IdentityMapping( ( Integers^2 ) )
gap> G := SL(2,Integers);;
gap> phi := IsomorphismRcwaGroup(G,cls[2]);
[ [ [ 0, 1 ], [ -1, 0 ] ], [ [ 1, 1 ], [ 0, 1 ] ] ] -> 
[ ClassRotation( (0,1)+(1,3)Z+(0,5)Z, [ [ 0, 1 ], [ -1, 0 ] ] ), 
  ClassRotation( (0,1)+(1,3)Z+(0,5)Z, [ [ 1, 1 ], [ 0, 1 ] ] ) ]
gap> G := GL(2,Integers);;
gap> phi := IsomorphismRcwaGroup(G,cls[3]);
[ [ [ 0, 1 ], [ 1, 0 ] ], [ [ -1, 0 ], [ 0, 1 ] ], [ [ 1, 1 ], [ 0, 1 ] ] 
 ] -> [ ClassRotation( (0,2)+(1,3)Z+(0,5)Z, [ [ 0, 1 ], [ 1, 0 ] ] ), 
  ClassRotation( (0,2)+(1,3)Z+(0,5)Z, [ [ -1, 0 ], [ 0, 1 ] ] ), 
  ClassRotation( (0,2)+(1,3)Z+(0,5)Z, [ [ 1, 1 ], [ 0, 1 ] ] ) ]
gap> mat := [[12,7],[5,3]];;
gap> cr := mat^phi;
ClassRotation( (0,2)+(1,3)Z+(0,5)Z, [ [ 12, 7 ], [ 5, 3 ] ] )
gap> Display(cr);

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

            /
            | (9m+n-2,53m+6n-10) if (m,n) in (0,2)+(1,3)Z+(0,5)Z
 (m,n) |-> <  (m,n)              otherwise
            |
            \

gap> Display(cr:table);

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

    [m,n] mod (1,3)Z+(0,5)Z    |               Image of [m,n]
-------------------------------+----------------------------------------------
 [0,0] [0,1] [0,3] [0,4]       | [m,n]
 [0,2]                         | [9m+n-2,53m+6n-10]

gap> (mat^2)^phi = (mat^phi)^2;
true
gap> (mat^-1)^phi = (mat^phi)^-1;
true
gap> r := Restriction(SigmaT,IdentityRcwaMappingOfZxZ*[[2,0],[0,1]]+[1,0]);
<rcwa permutation of Z^2 with modulus (2,0)Z+(0,6)Z>
gap> Display(r);

Rcwa permutation of Z^2 with modulus (2,0)Z+(0,6)Z

            /
            | (2m-1,(3n+1)/2) if (m,n) in (1,1)+(2,0)Z+(0,2)Z
            | (m,n/2)         if (m,n) in (1,0)+(2,0)Z+(0,6)Z U 
 (m,n) |-> <                              (1,2)+(2,0)Z+(0,6)Z
            | (2m+1,n/2)      if (m,n) in (1,4)+(2,0)Z+(0,6)Z
            | (m,n)           if (m,n) in (0,0)+(2,0)Z+(0,1)Z
            \

gap> Induction(r,IdentityRcwaMappingOfZxZ*[[2,0],[0,1]]+[1,0]);
<rcwa permutation of Z^2 with modulus (1,0)Z+(0,6)Z>
gap> last=SigmaT;
true
gap> IsClassWiseTranslating(SigmaT);
false
gap> IsClassWiseTranslating(IdentityRcwaMappingOfZxZ);
true
gap> IsClassWiseTranslating(ClassShift([0,0],[[2,0],[0,2]],1));
true
gap> ClassPairs(Integers^2,2);
[ [ (0,0)+(1,0)Z+(0,2)Z, (0,1)+(1,0)Z+(0,2)Z ], 
  [ (0,0)+(1,1)Z+(0,2)Z, (0,1)+(1,1)Z+(0,2)Z ], 
  [ (0,0)+(2,0)Z+(0,1)Z, (1,0)+(2,0)Z+(0,1)Z ] ]
gap> List(last,ClassTransposition);
[ ( (0,0)+(1,0)Z+(0,2)Z, (0,1)+(1,0)Z+(0,2)Z ), 
  ( (0,0)+(1,1)Z+(0,2)Z, (0,1)+(1,1)Z+(0,2)Z ), 
  ( (0,0)+(2,0)Z+(0,1)Z, (1,0)+(2,0)Z+(0,1)Z ) ]
gap> RCWADoThingsToBeDoneAfterTest();
gap> STOP_TEST( "zxz.tst", 2000000000 );

#############################################################################
##
#E  zxz.tst . . . . . . . . . . . . . . . . . . . . . . . . . . . . ends here