[GAP Forum] Crystallographic action
Mathieu Dutour
Mathieu.Dutour at ens.fr
Wed Dec 6 10:14:27 GMT 2006
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
More information about the Forum
mailing list