Quelle minus.gi
Sprache: unbekannt
|
|
BindGlobal("MinusDeltaMatrix@",function(d,q,w,i)
local A,B,C,delta,n,psi,w0;
w0:=w^(q+1);
psi:=w^(QuoInt((q+1),2));
Assert(1,psi=-(w^(QuoInt((q^2+q),2))));
Assert(1,psi^q=-psi);
A:=(w^(q-1)+w^(1-q))/2;
B:=psi*(w^(1-q)-w^(q-1))/2;
C:=psi^-1*(w^(1-q)-w^(q-1))/2;
delta:=IdentityMat(d, GF(q));
n:=QuoInt((d-2),2);
delta[2*i-1][2*i-1]:=w0^-1;
delta[2*i][2*i]:=w0;
delta[d-1][d-1]:=A;
delta[d-1][d]:=-C;
delta[d][d-1]:=-B;
delta[d][d]:=A;
return ImmutableMatrix(GF(q),delta*Z(q)^0);
end);
BindGlobal("MinusEvenDeltaMatrix@",function(d,q,w,i)
local A,B,C,delta,n,w0;
w0:=w^(q+1);
A:=(w^(1-q)+w^(q-1)+1);
B:=(w^(1)+w^(q));
C:=(w^(-1)+w^(-q));
delta:=IdentityMat(d, GF(q));
n:=QuoInt((d-2),2);
delta[2*i-1][2*i-1]:=w0^-1;
delta[2*i][2*i]:=w0;
delta[d-1][d-1]:=A;
delta[d-1][d]:=C;
delta[d][d-1]:=B;
delta[d][d]:=1;
return ImmutableMatrix(GF(q),delta*Z(q)^0);
end);
BindGlobal("Minus6Presentation@",function(q)
local N,Q,R,S,U,d,delta,eta,images,sigma,tau,z;
d:=4;
R:=Internal_StandardPresentationForSU@(d,q:Presentation:=true,Projective:=false);
Q:=FreeGroupOfFpGroup(R);
R:=RelatorsOfFpGroup(R);
N:=FreeGroup("z","tau","sigma","delta","U");
N:=Group(StraightLineProgGens(GeneratorsOfGroup(N)));
z:=N.1;
tau:=N.2;
sigma:=N.3;
delta:=N.4;
U:=N.5;
if IsOddInt(q) then
images:=[U,z*U^2,sigma,delta*(delta^-1)^U,z*U^2,tau^-1,delta];
else
images:=[U,z,sigma,delta*(delta^-1)^U,z,tau^1,delta];
fi;
eta:=GroupHomomorphismByImages(Q,N, GeneratorsOfGroup(Q),images);
S:=List(R,r->ImagesRepresentative(eta,r));
if IsOddInt(q) then
Add(S,delta^(QuoInt((q^2-1),2)));
fi;
return N/S;
end);
BindGlobal("Minus_PresentationForN1@",function(d,q)
local F,OMIT,R,R1,Rels,S,U,V,m,n,phi,z;
F:=FreeGroup("z","U","V");
F:=Group(StraightLineProgGens(GeneratorsOfGroup(F)));
z:=F.1;
U:=F.2;
V:=F.3;
m:=QuoInt((d-2),2);
if IsOddInt(q) then
R:=SignedPermutations@(m);
S:=FreeGroupOfFpGroup(R);
R:=RelatorsOfFpGroup(R);
elif IsEvenInt(q) then
R:=PresentationForSn@(m);
S:=FreeGroupOfFpGroup(R);
R:=RelatorsOfFpGroup(R);
fi;
phi:=GroupHomomorphismByImages(S,F,
GeneratorsOfGroup(S),
[U,V]);
R:=List(R,r->ImagesRepresentative(phi,r));
n:=QuoInt(d,2);
R1:=[];
Add(R1,Comm(z,U^V));
if n > 4 then
Add(R1,Comm(z,V*U^-1));
fi;
OMIT:=true;
if not OMIT then
Add(R1,z^2);
Add(R1,Comm(z,z^U));
if IsOddInt(q) then
Add(R1,Comm(z,U^2));
fi;
fi;
Rels:=Concatenation(R1,R);
return F/Rels;
end);
#Minus_Order_N1:=function(d,q)
#local n;
# n:=QuoInt(d,2);
# if IsOddInt(q) then
# return 2^(2*n-3)*Factorial(n-1);
# else
# return 2^(n-1)*Factorial(n-1);
# fi;
#end;
BindGlobal("Minus_PresentationForN@",function(d,q)
local F,OMIT,R,R1,Rels,S,U,V,delta,n,phi,z;
F:=FreeGroup("delta","z","U","V");
F:=Group(StraightLineProgGens(GeneratorsOfGroup(F)));
delta:=F.1;
z:=F.2;
U:=F.3;
V:=F.4;
R:=Minus_PresentationForN1@(d,q);
S:=FreeGroupOfFpGroup(R);
R:=RelatorsOfFpGroup(R);
phi:=GroupHomomorphismByImages(S,F,
GeneratorsOfGroup(S),
[z,U,V]);
R:=List(R,r->ImagesRepresentative(phi,r));
n:=QuoInt(d,2);
R1:=[];
Add(R1,Comm(delta,U^V));
if n > 4 then
Add(R1,Comm(delta,V*U^-1));
fi;
OMIT:=true;
if not OMIT then
if IsOddInt(q) then
Add(R1,U^2/((delta*(delta^-1)^U)^(QuoInt((q-1),2))));
fi;
Add(R1,Comm(delta,z^U)/delta^(q-1));
if IsOddInt(q) then
Add(R1,delta^(QuoInt((q^2-1),2)));
else
Add(R1,delta^((q^2-1)));
fi;
Add(R1,Comm(delta,delta^U));
Add(R1,delta^z*delta);
Add(R1,Comm(delta^(q-1),U));
fi;
Rels:=Concatenation(R1,R);
return F/Rels;
end);
#Minus_OrderN:=function(d,q)
#local n;
# n:=QuoInt(d,2);
# if IsOddInt(q) then
# return (q+1)*(q-1)^(n-1)*2^(n-2)*Factorial(n-1);
## else
# return (q+1)*(q-1)^(n-1)*2^(n-1)*Factorial(n-1);
# fi;
#end;
BindGlobal("Setup_MinusPresentation@",function(d,q)
local F,OMIT,R,R1,R2,R3,R4,R5,Rels,S,U,V,W,delta,e,f,n,p,phi,sigma,tau,z;
if d=6 then
return Minus6Presentation@(q);
fi;
F:=FreeGroup("z","tau","sigma","delta","U","V");
F:=Group(StraightLineProgGens(GeneratorsOfGroup(F)));
z:=F.1;
tau:=F.2;
sigma:=F.3;
delta:=F.4;
U:=F.5;
V:=F.6;
e := Factors(q);
if Size(DuplicateFreeList(e)) > 1 then
f := false;
else
f := true;
p := e[1];
e := Size(e);
fi;
R:=Minus_PresentationForN@(d,q);
S:=FreeGroupOfFpGroup(R);
R:=RelatorsOfFpGroup(R);
phi:=GroupHomomorphismByImages(S,F, GeneratorsOfGroup(S), [delta,z,U,V]);
R:=List(R,r->ImagesRepresentative(phi,r));
n:=QuoInt(d,2);
R1:=[];
# centraliser of sigma in N
Add(R1,Comm(sigma,z^(V^2)));
Add(R1,Comm(sigma,delta^(V^2)));
OMIT:=true;
if not OMIT then
Add(R1,Comm(sigma,delta*delta^U));
Add(R1,Comm(sigma,z*z^U*U));
fi;
if n > 4 then
Add(R1,Comm(sigma,U^(V^2)));
fi;
# elements generate the same group but for odd q reflects direct product
if n > 5 then
if IsOddInt(q) then
Add(R1,Comm(sigma,V*U^-1*(U^-1)^V));
else
Add(R1,Comm(sigma,V*U*U^V));
fi;
fi;
R2:=[];
# centraliser of tau in N
Add(R2,Comm(tau,U^V));
if n > 4 then
Add(R2,Comm(tau,V*U^-1));
fi;
if IsEvenInt(q) then
Add(R2,Comm(tau,delta^(V^2)*(delta^-1)^(V)));
fi;
R3:=Minus6Presentation@(q);
S:=FreeGroupOfFpGroup(R3);
R3:=RelatorsOfFpGroup(R3);
phi:=GroupHomomorphismByImages(S,F, GeneratorsOfGroup(S),
[z,tau,sigma,delta,U]);
R3:=List(R3,r->ImagesRepresentative(phi,r));
R4:=[];
Add(R4,Comm(sigma,sigma^V)/sigma^(V*U^-1));
Add(R4,Comm(sigma,sigma^(V*U^-1)));
W:=U^(V*U^-1);
Add(R4,Comm(sigma,sigma^W));
if n > 4 then
Add(R4,Comm(sigma,sigma^(V^2)));
fi;
R5:=[];
Add(R5,Comm(sigma^V,tau));
Rels:=Concatenation(R,R1,R2,R3,R4,R5);
return F/Rels;
end);
# generator of centre as word in presentation generators
BindGlobal("MinusGeneratorOfCentre@",
function(d,q,F)
local V,delta,n,z;
Assert(1,IsEvenInt(d) and d > 4);
n:=QuoInt(d,2);
if IsOddInt(n) and q mod 4=3 then
delta:=F.4;
if d=6 then
V:=F.5;
else
V:=F.6;
fi;
z:=V^(n-1)*delta^(QuoInt((q^2-1),4));
else
z:=Identity(F);
fi;
return z;
end);
# express presentation generators as words in standard generators
BindGlobal("MinusStandardToPresentation@",
function(d,q)
local lvarDelta,F,U,V,W,delta,m,p,s,sigma,t,tau,w,w0,x,z,gens;
Assert(1,IsEvenInt(d) and d > 4);
if IsOddInt(q) then
W:=FreeGroup("s","t","delta","U","V");
W:=Group(StraightLineProgGens(GeneratorsOfGroup(W)));
gens:=GeneratorsOfGroup(W);
gens:=StraightLineProgGens(gens);
s:=gens[1];
t:=gens[2];
else
W:=FreeGroup("t","es","delta","U","V");
W:=Group(StraightLineProgGens(GeneratorsOfGroup(W)));
gens:=GeneratorsOfGroup(W);
gens:=StraightLineProgGens(gens);
t:=gens[1];
s:=gens[2];
# correct discrepancy between published s and code s
s:=s^t;
fi;
delta:=gens[3];
U:=gens[4];
V:=gens[5];
z:=s^V;
# rewritten select statement
if d mod 4=2 then
tau:=(t^V)^-1;
else
tau:=(t^V);
fi;
if IsOddInt(q) then
lvarDelta:=(delta^V)^(QuoInt((q^2-1),2)-q);
else
lvarDelta:=(delta^-1)^V;
fi;
p:=Characteristic(GF(q));
if IsOddInt(p) then
sigma:=Comm(tau,tau^(z*U))^(QuoInt((p-1),2));
else
F:=GF(q^2);
w:=PrimitiveElement(F);
w0:=w^(q+1);
# was "m:=Log(w0,w^2+w^(2*q));"
m:=LogFFE(w^2+w^(2*q), w0);
x:=Comm(tau^delta,tau^U)^(z*U);
sigma:=x^(lvarDelta^(q-m));
fi;
if d=6 then
return [z,tau,sigma,lvarDelta,U,U];
else
return [z,tau,sigma,lvarDelta,U,V];
fi;
end);
BindGlobal("MinusPresentationToStandard@",
function(d,q)
local lvarDelta,U,V,W,delta,s,sigma,t,tau,z;
Assert(1,IsEvenInt(d) and d > 4);
W:=FreeGroup("z","tau","sigma","Delta","U","V");
W:=Group(StraightLineProgGens(GeneratorsOfGroup(W)));
z:=W.1;
tau:=W.2;
sigma:=W.3;
lvarDelta:=W.4;
U:=W.5;
V:=W.6;
# rewritten select statement
if d mod 4=0 then
t:=tau^(V^-1);
else
t:=(tau^-1)^(V^-1);
fi;
if IsOddInt(q) then
delta:=(lvarDelta^(V^-1))^(QuoInt((q^2-1),2)-q);
else
delta:=(lvarDelta^-1)^(V^-1);
fi;
s:=z^(V^-1);
if IsEvenInt(q) then
# correct discrepancy between published s and code s
s:=s^(t^-1);
return [t,s,delta,U,V];
else
return [s,t,delta,U,V];
fi;
end);
# relations are on presentation generators;
# convert to relations on standard generators
BindGlobal("MinusConvertToStandard@",
function(d,q,Rels)
local A,B,C,T,U,W,tau,gens;
A:=MinusStandardToPresentation@(d,q);
#was Rels:=Evaluate(Rels,A);
gens:=GeneratorsOfGroup(FamilyObj(Rels)!.wholeGroup);
Rels:=List(Rels, w-> MappedWord(w, gens, A));
B:=MinusPresentationToStandard@(d,q);
#was C:=Evaluate(B,A);
gens:=GeneratorsOfGroup(FamilyObj(B)!.wholeGroup);
C:=List(B, w-> MappedWord(w, gens, A));
U:=FamilyObj(C)!.wholeGroup;
W:=FamilyObj(Rels)!.wholeGroup;
tau:=GroupHomomorphismByImages(U,W,GeneratorsOfGroup(U),GeneratorsOfGroup(W));
T:=List([1..Length(GeneratorsOfGroup(W))],
i->W.(i)^-1*ImagesRepresentative(tau,C[i]));
Rels:=Concatenation(Rels,T);
return W/Rels;
end);
BindGlobal("MinusPresentation@",function(d,q)
local gens,P,Presentation,Projective,Q,R,Rels,S,n,z;
Projective:=ValueOption("Projective");
if Projective=fail then
Projective:=false;
fi;
Presentation:=ValueOption("Presentation");
if Presentation=fail then
Presentation:=false;
fi;
Assert(1,d >= 4);
Assert(1,IsEvenInt(d));
n:=QuoInt(d,2);
if d=4 then
R:=ClassicalStandardPresentation("SL",2,q^2:Projective:=true,
Presentation:=false);
# added variable "gen" for function MappedWord below
gens:=GeneratorsOfGroup(FreeGroupOfFpGroup(R));
R:=RelatorsOfFpGroup(R);
Q:=FreeGroup(5);
Q:=Group(StraightLineProgGens(GeneratorsOfGroup(Q)));
if IsEvenInt(q) then
# was "R:=Evaluate(R,[Q.1^Q.2,Q.1^Q.2,Q.1,Q.3]);"
R:=List(R, w -> MappedWord(w, gens, [Q.1^Q.2,Q.1^Q.2,Q.1,Q.3]));
Add(R,(Q.1*Q.1^Q.2*Q.1)*Q.2^-1);
else
# was "R:=Evaluate(R,List([1,1,2,3],i->Q.i));"
R:=List(R, w -> MappedWord(w, gens, GeneratorsOfGroup(Q){[1,1,2,3]}));
fi;
Add(R,Q.4);
Add(R,Q.5);
return Q/R;
fi;
R:=Setup_MinusPresentation@(d,q);
P:=FreeGroupOfFpGroup(R);
R:=ShallowCopy(RelatorsOfFpGroup(R));
if Projective and IsOddInt(n) and q mod 4=3 then
z:=MinusGeneratorOfCentre@(d,q,P);
Add(R,z);
fi;
if Presentation then
return P/R;
fi;
# do conversion
Rels:=MinusConvertToStandard@(d,q,R);
S:=FreeGroupOfFpGroup(Rels);
Rels:=RelatorsOfFpGroup(Rels);
Rels:=Filtered(Rels,w->not IsOne(w));
return S/Rels;
end);
InstallGlobalFunction(MinusGenerators@,function(d,q)
local B,varE,U,V,delta,gens,i,n,s,sigma,tau,w,z,one;
if d=4 then
return ClassicalStandardGenerators("Omega-",d,q:
PresentationGenerators:=false);
fi;
varE:=GF(q^2);
one:=One(varE);
w:=PrimitiveElement(varE);
i:=1;
if IsEvenInt(q) then
delta:=MinusEvenDeltaMatrix@(d,q,w,i);
else
delta:=MinusDeltaMatrix@(d,q,w,i);
fi;
n:=QuoInt((d-2),2);
z:=NullMat(d, d, GF(q));
z[1][2]:=1;
z[2][1]:=1;
for i in [3..d-1] do
z[i][i]:=1;
od;
if IsOddInt(q) then
z[d-1][d-1]:=-one;
else
B:=w+w^q;
z[d][d-1]:=B;
fi;
z[d][d]:=1;
tau:=IdentityMat(d, GF(q));
if IsOddInt(q) then
s:=one;
tau[1][1]:=one;
tau[1][2]:=s^2;
tau[1][d-1]:=s;
tau[d-1][d-1]:=one;
tau[d-1][2]:=2*s;
else
B:=w+w^q;
tau[1][1]:=one;
tau[1][2]:=one;
tau[1][d-1]:=one;
tau[d][d]:=one;
tau[d][2]:=B;
fi;
s:=1;
sigma:=NullMat(d, d, GF(q));
sigma[1][1]:=one;
sigma[1][3]:=s;
sigma[4][4]:=one;
sigma[4][2]:=-s;
for i in Concatenation([2,3],[5..d]) do
sigma[i][i]:=one;
od;
U:=NullMat(d, d, GF(q));
U[1][3]:=one;
U[3][1]:=-one;
U[2][4]:=one;
U[4][2]:=-one;
for i in [5..d] do
U[i][i]:=one;
od;
V:=NullMat(d, d, GF(q));
for i in [1..n-1] do
V[2*i-1][2*i+1]:=one;
V[2*i][2*i+2]:=one;
od;
V[d-3][1]:=(-1)^(n-1);
V[d-2][2]:=(-1)^(n-1);
for i in [d-1..d] do
V[i][i]:=one;
od;
gens:=List([z,tau,sigma,delta,U,V],x->x*Z(q)^0);
return gens;
end);
[ Dauer der Verarbeitung: 0.33 Sekunden
(vorverarbeitet)
]
|
2026-04-02
|