[GAP Forum] Crystallographic action
Joachim Neubueser
joachim.neubueser at math.rwth-aachen.de
Wed Dec 20 12:17:37 GMT 2006
Dear Mathieu,
As far as we understand, you can achieve what you want in the
following way: After reading your code below, do:
gap> op := function(v,m) return VectorMod1(v*m); end;;
This provides an "action" function for acting with elements of
your affine group on vectors mod 1. Now you can do things like
gap> v := VectorMod1([1/2,0,0]);
[ 1/2, 0, 0, 1 ]
gap> o := Orbit(GroupAffine,v,op);
[ [ 1/2, 0, 0, 1 ], [ 0, 0, 1/2, 1 ], [ 0, 1/2, 0, 1 ], [ 3/4, 3/4, 1/4, 1 ],
[ 1/4, 1/4, 1/4, 1 ], [ 3/4, 1/4, 3/4, 1 ], [ 1/4, 3/4, 3/4, 1 ],
[ 1/2, 1/2, 1/2, 1 ] ]
Since in your example G/T is small you can test for equivalence by
just testing whether another vector is contained in the orbit.
You can also use RepresentativeAction:
gap> RepresentativeAction(GroupAffine,v,[1/4,3/4,3/4,1],op);
[ [ 0, -1, 0, 0 ], [ 1, 0, 0, 0 ], [ 0, 0, 1, 0 ], [ 1/4, 5/4, 3/4, 1 ] ]
gap> RepresentativeAction(GroupAffine,v,[0,0,0,1],op);
fail
You also can compute stabilizers:
gap> s := Stabilizer(GroupAffine,v,op);
<matrix group with 21 generators>
This of course also enumerates the orbit internally.
We hope we understood you right and this helps,
Joachim Neubueser and Max Neunhoeffer
On Wed, Dec 06, 2006 at 11:14:27AM +0100, Mathieu Dutour wrote:
> Dear all,
>
> I have yet again a question on group actions. This time with
> crystallographic actions.
>
> I have a crystallographic group G, i.e. G acts on R^3 by affine
> transformations (boring computer code is given at the end of the
> message).
>
> We have a finite index normal subgroup Z^3 of translations T of G.
> I want to consider the action of G/T on the torus (R/Z)^3.
> A representation of G/T can be obtained by taking the linear part
> of the affine transformations. I want to test if two elements of
> (R/Z)^3 are equivalent under G/T and to compute the stabilizer
> of an element.
>
> The problem is that the group G is infinite. If I take some generators
> up to translation of G then clearly I cannot define the morphism phi
> from G/T to G. But I need to define it somehow because I need matrices
> of G to act on R^3 followed by reduction mod 1.
>
> I see two solutions to the problem:
>
> 1> One solution is to force the image of the morphism to be computed even
> if it has no sense by using the free group trick.
> This makes the following:
>
> FuncAction_V1:=function(eClass, eGen)
> local nbGen, f, hom, hom2;
> nbGen:=Length(ListLinearMat);
> f:=FreeGroup(nbGen);
> hom:=GroupHomomorphismByImagesNC(f, GroupLinear, GeneratorsOfGroup(f), ListLinearMat);
> hom2:=GroupHomomorphismByImagesNC(f, GroupAffine, GeneratorsOfGroup(f), ListAffineMat);
> return VectorMod1(eClass*Image(hom2, PreImagesRepresentative(hom, eGen)));
> end;
> Stab:=Stabilizer(GroupLinear, eVect, FuncAction_V1);
> eElt:=RepresentativeAction(GroupLinear, eVect, fVect, FuncAction_V1);
>
> 2> The second possibility is to use gens, acts in the following syntax
> Stabilizer(Grp, pt, gens, acts, FuncAct)
>
> In our case this makes the following code:
> FuncAction_V2:=function(eClass, eGen)
> return VectorMod1(eClass*eGen);
> end;
> Stab:=Stabilizer(GroupLinear, eVect, ListLinearMat, ListAffineMat, FuncAction_V2);
> eElt:=RepresentativeAction(GroupLinear, eVect, fVect, ListLinearMat, ListAffineMat, FuncAction_V2);
>
> My questions are the following:
> --Is there a way to bypass the FreeGroup construction in the first method?
> --Is the second construction legal?
> In examples it works but I worry that I do not have a morphism from
> GroupLinear to GroupAffine and the reference manual is quite explicit
> about "homomorphism phi:G---> H"
> --What is the most efficient method?
>
> Thank you in advance for any help.
>
> Mathieu
>
>
>
> Mat1:=[
> [-1 ,0 ,0 ,0],
> [0 ,-1,0 ,0],
> [0 ,0 ,1 ,0],
> [1/2,0 ,1/2,1]];
> Mat2:=[
> [0 ,1 ,0,0],
> [0 ,0 ,1,0],
> [1 ,0 ,0,0],
> [0 ,0 ,0,1]];
> Mat3:=[
> [0 ,1 ,0 ,0],
> [1 ,0 ,0 ,0],
> [0 ,0 ,-1 ,0],
> [3/4,1/4,1/4,1]];
> Mat4:=[
> [0 ,1 ,0,0],
> [-1 ,0 ,0,0],
> [0 ,0 ,1,0],
> [1/4,3/4 ,1/4,1]];
> Mat5:=[
> [0 ,0 ,1 ,0],
> [0 ,-1 ,0 ,0],
> [1 ,0 ,0 ,0],
> [1/4,1/4 ,3/4,1]];
>
> ListAffineMat:=[Mat1, Mat2, Mat3, Mat4, Mat5];
> ListLinearMat:=[];
> for eMat in ListAffineMat
> do
> eMatRed:=List(eMat{[1..3]}, x->x{[1..3]});
> Add(ListLinearMat, eMatRed);
> od;
> GroupAffine:=Group(ListAffineMat);
> GroupLinear:=Group(ListLinearMat);
>
> FractionMod1:=function(eFrac)
> local a, b;
> b:=NumeratorRat(eFrac);
> a:=DenominatorRat(eFrac);
> return (b mod a)/a;
> end;
>
> VectorMod1:=function(eVect)
> return Concatenation(List(eVect{[1..3]}, x->FractionMod1(x)), [1]);
> end;
>
>
>
> --
> Mathieu Dutour Sikiric Researcher in Mathematics
> Telephone:.(+385)1 4571 237 and Computer Science
> Cell Phone: (+385)9 19 36 30 80 Laboratory of satellite oceanography
> E-mail: Mathieu.Dutour at ens.fr Rudjer Boskovic Institute
> http://www.liga.ens.fr/~dutour Zagreb Croatia
> skype name: mathieudutour
>
> _______________________________________________
> Forum mailing list
> Forum at mail.gap-system.org
> http://mail.gap-system.org/mailman/listinfo/forum
>
More information about the Forum
mailing list