Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/GAP/pkg/classicpres/lib/   (Algebra von RWTH Aachen Version 4.15.1©)  Datei vom 8.10.2021 mit Größe 12 kB image not shown  

Quelle  circle.gi   Sprache: unbekannt

 
Spracherkennung für: .gi vermutete Sprache: Unknown {[0] [0] [0]} [Methode: Schwerpunktbildung, einfache Gewichte, sechs Dimensionen]

#  File converted from Magma code -- requires editing and checking
#  Magma -> GAP converter, version 0.5, 11/5/18 by AH


InstallGlobalFunction(OmegaGenerators@,function(d,q)
local lvarDelta,varE,F,MA,U,V,varZ,gens,n,sigma,tau,w,one;
  Assert(1,IsOddInt(d));
  Assert(1,IsOddInt(q));
  if d=3 then
    return ClassicalStandardGenerators("Omega",3,q:
      PresentationGenerators:=false);
  fi;
  n:=QuoInt(d,2);
  Assert(1,n > 1);
  F:=GF(q);
  one:=One(F);
  varZ:=IdentityMat(d,F);
  varZ[1][1]:=0*one;
  varZ[1][2]:=1*one;
  varZ[2][1]:=1*one;
  varZ[2][2]:=0*one;
  varZ[d][d]:=-1*one;
  w:=PrimitiveElement(F);
  lvarDelta:=IdentityMat(d,F);
  lvarDelta[1][1]:=w^-1;
  lvarDelta[2][2]:=w;
  lvarDelta[3][3]:=w^1;
  lvarDelta[4][4]:=w^-1;
  #lvarDelta:=lvarDelta*FORCEOne(GL(d,F)); ## Not needed FORCE
  tau:=IdentityMat(d,F);
  tau[1][1]:=1*one;
  tau[1][2]:=1*one;
  tau[1][d]:=1*one;
  tau[d][2]:=2*one;
  tau[d][d]:=1*one;
  sigma:=IdentityMat(d,F);
  sigma[1][1]:=1*one;
  sigma[1][3]:=1*one;
  sigma[4][2]:=-1*one;
  sigma[4][4]:=1*one;
  varE:=ClassicalStandardGenerators("Omega",d,q:
    PresentationGenerators:=false);
  U:=varE[5];
  V:=varE[4];
  gens:=[lvarDelta,varZ,tau,sigma,U,V];
  return gens;
end);

BindGlobal("Omega_PresentationForN1@",function(n)
local F,R,R1,Rels,S,U,V,varZ,phi;
  Assert(1,n > 1);
  F:=FreeGroup("Z","U","V");
  F:=Group(StraightLineProgGens(GeneratorsOfGroup(F)));
  varZ:=F.1;
  U:=F.2;
  V:=F.3;
  R:=SignedPermutations@(n);
  S:=FreeGroupOfFpGroup(R);
  R:=RelatorsOfFpGroup(R);
  phi:=GroupHomomorphismByImages(S,F, GeneratorsOfGroup(S), [U,V]);
  R:=List(R,r->ImagesRepresentative(phi,r));
  R1:=[];
  if n > 2 then
    Add(R1,Comm(varZ,U^V));
  fi;
  if n > 3 then
    Add(R1,Comm(varZ,V*U^-1));
  fi;
  Add(R1,varZ^2);
  Add(R1,Comm(varZ,U^2));
  Add(R1,Comm(varZ,varZ^U));
  R1 := Concatenation(R1, R);
  return F/R1;
end);

#Omega_OrderN1:=function(n)
#return 2^(2*n-1)*Factorial(n);
#end;

BindGlobal("Omega_PresentationForN@",function(n,q)
local lvarDelta,F,OMIT,R,R1,Rels,S,U,V,varZ,phi;
  F:=FreeGroup("Delta","Z","U","V");
  F:=Group(StraightLineProgGens(GeneratorsOfGroup(F)));
  lvarDelta:=F.1;
  varZ:=F.2;
  U:=F.3;
  V:=F.4;
  R:=Omega_PresentationForN1@(n);
  S:=FreeGroupOfFpGroup(R);
  R:=RelatorsOfFpGroup(R);
  phi:=GroupHomomorphismByImages(S,F, GeneratorsOfGroup(S), [varZ,U,V]);
  R:=List(R,r->ImagesRepresentative(phi, r));
  R1:=[];
  if n > 3 then
    Add(R1,Comm(lvarDelta,U^(V^2)));
    Add(R1,Comm(lvarDelta,lvarDelta^(V^2)));
  fi;
  if n > 4 then
    Add(R1,Comm(lvarDelta,V*U*U^V));
  fi;
  if n > 2 then
    Add(R1,Comm(lvarDelta,varZ^(V^2)));
    Add(R1,lvarDelta*lvarDelta^V/lvarDelta^(V*U));
    Add(R1,Comm(lvarDelta,lvarDelta^V));
    Add(R1,Comm(lvarDelta,(U^2)^V));
  fi;
  Add(R1,lvarDelta^U*lvarDelta);
  OMIT:=true;
  if not OMIT then
    Add(R1,lvarDelta^(QuoInt((q-1),2))/U^2);
  fi;
  Add(R1,lvarDelta^(varZ*varZ^U)*lvarDelta);
  if n=2 then
    Add(R1,Comm(lvarDelta,lvarDelta^varZ));
  fi;
  Rels:=Concatenation(R1,R);
  return F/Rels;
end);

#Omega_OrderN:=function(n,q)
#return (q-1)^n*2^(n-1)*Factorial(n);
#end;

BindGlobal("Setup_OmegaPresentation@",function(d,q)
local lvarDelta,F,I,R1,R2,R3,R4,R5,R6,Rels,S,U,V,W,varZ,b,e,f,n,p,phi,
  sigma,tau,w,x;

  Assert(1,IsOddInt(d));
  Assert(1,IsOddInt(q));
  n:=QuoInt(d,2);
  Assert(1,n > 1);
  F:=GF(q);
  w:=PrimitiveElement(F);
  e := Factors(q);
  if Size(DuplicateFreeList(e)) > 1 then
    f := false;
  else
    f := true;
    p := e[1];
    e := Size(e);
  fi;
  F:=FreeGroup("Delta","Z","tau","sigma","U","V");
  F:=Group(StraightLineProgGens(GeneratorsOfGroup(F)));
  lvarDelta:=F.1;
  varZ:=F.2;
  tau:=F.3;
  sigma:=F.4;
  U:=F.5;
  V:=F.6;
  R3:=[];
  #   additional relation needed for q = p to express Delta as word in sigma
  #  and U
  if IsPrimeInt(q) then
    b:=Int(1/w); 
    w:=Int(w);
    Add(R3,lvarDelta/((sigma^U)^(w-w^2)*sigma^(b)*(sigma^U)^((w-1))
     *sigma^-1));
  fi;
  if e=1 then
    R1:=Omega_PresentationForN1@(n);
    S:=FreeGroupOfFpGroup(R1);
    R1:=RelatorsOfFpGroup(R1);
    phi:=GroupHomomorphismByImages(S,F, GeneratorsOfGroup(S), [varZ,U,V]);
  else
    R1:=Omega_PresentationForN@(n,q);
    S:=FreeGroupOfFpGroup(R1);
    R1:=RelatorsOfFpGroup(R1);
    phi:=GroupHomomorphismByImages(S,F,GeneratorsOfGroup(S),
      [lvarDelta,varZ,U,V]);
  fi;
  R1:=List(R1,r->ImagesRepresentative(phi, r));
  R2:=PresentationForSL2@(p,e:Projective:=false);
  S:=FreeGroupOfFpGroup(R2);
  R2:=RelatorsOfFpGroup(R2);
  if e=1 then
    phi:=GroupHomomorphismByImages(S,F, GeneratorsOfGroup(S), [sigma,U]);
  else
    phi:=GroupHomomorphismByImages(S,F, GeneratorsOfGroup(S),
      [lvarDelta,sigma,U]);
  fi;
  R2:=List(R2,r->ImagesRepresentative(phi, r));
  if e > 1 then
    Add(R3,Comm(sigma,lvarDelta^(varZ^U)));
  fi;
  #   centraliser of tau
  R5:=[];
  if n > 2 then
    Add(R5,Comm(tau,U^V));
    if e > 1 then
      Add(R5,Comm(tau,lvarDelta^V));
    fi;
  fi;
  if n > 3 then
    Add(R5,Comm(tau,V*U^-1));
  fi;
  Add(R5,Comm(tau,U^2*varZ^U));
  if e > 1 and n=2 then
    Add(R5,Comm(tau,lvarDelta*lvarDelta^varZ));
  fi;
  R6:=[];
  R6:=PresentationForSL2@(p,e:Projective:=true);
  S:=FreeGroupOfFpGroup(R6);
  R6:=RelatorsOfFpGroup(R6);
  if e=1 then
    phi:=GroupHomomorphismByImages(S,F,
      GeneratorsOfGroup(S),
      [tau,varZ]);
  else
    x:=lvarDelta*lvarDelta^(varZ^U);
    phi:=GroupHomomorphismByImages(S,F,
      GeneratorsOfGroup(S),
      [x,tau,varZ]);
  fi;
  R6:=List(R6,r->ImagesRepresentative(phi, r));
  #   Steinberg relations
  R4:=[];
  if n > 2 then
    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));
    #   new relation June 2018
    Add(R4,Comm(sigma,tau^(V^2)));
  fi;
  if n > 3 then
    Add(R4,Comm(sigma,sigma^(V^2)));
  fi;
  Add(R4,Comm(sigma,sigma^(varZ^U)));
  Add(R4,Comm(tau,tau^U)/(sigma^(varZ^U))^2);
  Add(R4,Comm(sigma,tau));
  Add(R4,Comm(sigma^varZ,tau)/(sigma*tau^(varZ*U)));
  #   Omega(7, 3) has multiplicator of order 6
  if d=7 and q=3 then
    Add(R3,Comm(tau,sigma^V));
  fi;
  Rels:=Concatenation(R1,R2,R3,R4,R5,R6);
  return F/Rels;
end);

#   word for Delta in Sp(4, 9) generated by 5 specific elements
BindGlobal("SpecialWordForDelta@",function()
local G,w1,w10,w103,w104,w105,w106,w107,w108,w109,w11,w12,w13,w14,w15,w16,
   w17,w18,w19,w2,w20,w21,w22,w23,w24,w25,w26,w27,w28,w29,w3,w30,w31,w32,
   w33,w34,w35, w36,w37,w38,w39,w4,w45,w5,w52,w57,w58,w59,w6,w60,w61,w7,
   w8,w9;

  G:=FreeGroup(5);
  G:=Group(StraightLineProgGens(GeneratorsOfGroup(G)));
  w10:=G.4*G.5;
  w103:=w10*G.5;
  w7:=G.3*G.1;
  w52:=G.4*w7;
  w6:=G.2*G.4;
  w57:=G.1*w6;
  w4:=G.2^2;
  w58:=w57*w4;
  w59:=w52*w58;
  w26:=G.3^-1;
  w45:=G.2*w26;
  w32:=G.1^-2;
  w60:=w45*w32;
  w61:=w59*w60;
  w104:=w103*w61;
  w105:=w104*w61;
  w106:=w105*G.1;
  w107:=w106*G.1;
  w108:=w107*G.1;
  w1:=G.4*G.3;
  w2:=G.5*w1;
  w3:=w2*w1;
  w5:=G.3*w4;
  w8:=w6*w7;
  w9:=w8*G.4;
  w11:=w9*w10;
  w12:=w5*w11;
  w13:=w3*w12;
  w14:=G.2*G.1;
  w15:=w14*w2;
  w16:=w15*w9;
  w17:=w9*w16;
  w18:=w13*w17;
  w19:=w18*w5;
  w20:=G.5^-1;
  w21:=G.1^-1;
  w22:=w20*w21;
  w23:=G.4^-1;
  w24:=G.2*w23;
  w25:=w22*w24;
  w27:=w26*w21;
  w28:=w20*w23;
  w29:=w27*w28;
  w30:=w25*w29;
  w31:=G.2*w20;
  w33:=w31*w32;
  w34:=w23*w21;
  w35:=w23*G.2;
  w36:=w34*w35;
  w37:=w33*w36;
  w38:=w30*w37;
  w39:=w19*w38;
  w109:=w108*w39;
  return w109;
end);

#   word for Delta for q = 1 mod 4 and q not equal to 9
BindGlobal("WordForDelta@",function(d,q)
local A,B,C,Delta2,varE,F,I,Special_OmegaStandardToPresentation,
   U,V,W,varZ,a,b,c,e,sigma,tau,w,w_Delta,words;

  Special_OmegaStandardToPresentation:=function(d,q)
  local U,V,W,varZ,delta,p,s,sigma,t,tau;
    W:=FreeGroup("s","t","delta","U","V");
    W:=Group(StraightLineProgGens(GeneratorsOfGroup(W)));
    s:=W.1;
    t:=W.2;
    delta:=W.3;
    U:=W.5;
    V:=W.4;
    # rewritten select statement
    if d mod 4=3 then
      tau:=t^V;
    else
      tau:=(t^-1)^V;
    fi;
    varZ:=s^V;
    p:=Characteristic(GF(q));
    sigma:=Comm(tau^(varZ*U),tau^(QuoInt((p+1),2)));
    return [Comm(delta^V,U),varZ,tau,sigma,U,V];
  end;

  W:=FreeGroup("Delta2","Z","tau","sigma","U","V");
  W:=Group(StraightLineProgGens(GeneratorsOfGroup(W)));
  #   Delta2 = Delta^2
  Delta2:=W.1;
  varZ:=W.2;
  tau:=W.3;
  sigma:=W.4;
  U:=W.5;
  V:=W.6;
  F:=GF(q);
  e:=Size(F);
  w:=PrimitiveElement(F);
  varE:=Basis(Field(w^4));
  # was "c:=Eltseq((-w^3)*FORCEOne(varE));"
  c:=Coefficients(varE, (-w^3));
  c:=List(c,Int);
  b:=Coefficients(varE, (1-w));
  b:=List(b,Int);
  a:=Coefficients(varE, (-w^-1+1));
  a:=List(a,Int);

  C:=Product(List([0..e-1],i->(sigma^(Delta2^i*U))^c[i+1]));
  B:=Product(List([0..e-1],i->(sigma^(Delta2^i*sigma^U))^b[i+1]));
  A:=Product(List([0..e-1],i->(sigma^(Delta2^i))^a[i+1]));
  w_Delta:=C*Delta2*sigma^U*B*A;
  words:=Special_OmegaStandardToPresentation(d,q);
  # was "w_Delta:=Evaluate(w_Delta,words);"
  w_Delta:=List(w_Delta, w-> MappedWord(w, GeneratorsOfGroup(W), words));
  return w_Delta;
end);

#   express presentation generators as words in standard generators
InstallGlobalFunction(OmegaStandardToPresentation@,
function(d,q)
local lvarDelta,U,V,W,varZ,delta,gens,p,s,sigma,t,tau,fgens;
  W:=FreeGroup("s","t","delta","U","V");
  W:=Group(StraightLineProgGens(GeneratorsOfGroup(W)));
  s:=W.1;
  t:=W.2;
  delta:=W.3;
  U:=W.5;
  V:=W.4;
  if d mod 4=3 then
    tau:=t^V;
  else
    tau:=(t^-1)^V;
  fi;
  varZ:=s^V;
  p:=Characteristic(GF(q));
  sigma:=Comm(tau^(varZ*U),tau^(QuoInt((p+1),2)));
  #   need to sort out Delta
  if q mod 4=3 then
    lvarDelta:=U^2*Comm(delta^V,U)^(QuoInt((q+1),4));
  elif q=9 then
    gens:=[Comm(delta^V,U),s^V,U,tau,sigma];
    lvarDelta:=SpecialWordForDelta@();
    fgens:=GeneratorsOfGroup(FamilyObj(lvarDelta)!.wholeGroup);
    # was "lvarDelta:=Evaluate(lvarDelta,gens);"
    lvarDelta:=List(lvarDelta, w-> MappedWord(w, fgens, gens));
  else
    lvarDelta:=WordForDelta@(d,q);
    #   ensure Delta is in the correct FreeGroup
    fgens:=GeneratorsOfGroup(FamilyObj(lvarDelta)!.wholeGroup);
    # was "lvarDelta:=Evaluate(lvarDelta,List([1..5],i->W.i));"
    lvarDelta:=List(lvarDelta,w->MappedWord(w,fgens,
       GeneratorsOfGroup(W){[1..5]}));
  fi;
  return [lvarDelta,varZ,tau,sigma,U,V];
end);

#   express standard generators as words in presentation generators
BindGlobal("OmegaPresentationToStandard@",
function(d,q)
local lvarDelta,U,V,W,varZ,sigma,t,tau;
  W:=FreeGroup("Delta","Z","tau","sigma","U","V");
  W:=Group(StraightLineProgGens(GeneratorsOfGroup(W)));
  lvarDelta:=W.1;
  varZ:=W.2;
  tau:=W.3;
  sigma:=W.4;
  U:=W.5;
  V:=W.6;
  # rewritten select statement
  if d mod 4=3 then
    t:=tau^(V^-1);
  else
    t:=(tau^-1)^(V^-1);
  fi;
  #   return [s, t, delta, V, U]
  return [varZ^(V^-1),t,Comm(varZ,lvarDelta^-1)^(V^-1),V,U];
end);

#   relations are on presentation generators;
#  convert to relations on standard generators
BindGlobal("OmegaConvertToStandard@",
function(d,q,Rels)
local A,B,C,T,U,W,tau,gens;
  A:=OmegaStandardToPresentation@(d,q);
  # was "Rels:=Evaluate(Rels,A);"
  gens:=GeneratorsOfGroup(FamilyObj(Rels)!.wholeGroup);
  Rels:=List(Rels, w-> MappedWord(w, gens, A));
  B:=OmegaPresentationToStandard@(d,q);
  # was "C:=Evaluate(B,A);"
  gens:=GeneratorsOfGroup(FamilyObj(B)!.wholeGroup);
  C:=List(B, w-> MappedWord(w, gens, A));
  #U:=Universe(C);
  #W:=Universe(Rels);
  U:=FamilyObj(C)!.wholeGroup;
  W:=FamilyObj(Rels)!.wholeGroup;
  tau:=GroupHomomorphismByImages(U,W,
    GeneratorsOfGroup(U),GeneratorsOfGroup(W));
  T:=List([1..Size(GeneratorsOfGroup(W))],i->W.i^-1*tau(C[i]));
  Rels:=Concatenation(Rels,T);
  return W/Rels;
end);

InstallGlobalFunction(OmegaPresentation@,function(d,q)
local gens,P,Presentation,Q,R,Rels,S;
  Presentation:=ValueOption("Presentation");
  if Presentation=fail then
    Presentation:=false;
  fi;
  Assert(1,IsOddInt(d) and d > 1);
  Assert(1,IsOddInt(q));
  if d=3 then
    R:=ClassicalStandardPresentation("SL",2,q:Projective:=true,
      PresentationGenerators:=false);
    gens:=FreeGeneratorsOfFpGroup(R);
    R:=RelatorsOfFpGroup(R);
    Q:=FreeGroup(5);
    Q:=Group(StraightLineProgGens(GeneratorsOfGroup(Q)));
    # was "R:=Evaluate(R,List([1,1,2,3],i->Q.i));" . This required the new variable "gens"
    R:=List(R, w -> MappedWord(w, gens, GeneratorsOfGroup(Q){[1,1,2,3]}));
    Add(R,Q.4);
    Add(R,Q.5);
    return Q/R;
  fi;
  R:=Setup_OmegaPresentation@(d,q);
  P:=FreeGroupOfFpGroup(R);
  R:=RelatorsOfFpGroup(R);
  if Presentation then
    return P/R;
  fi;
  Rels:=OmegaConvertToStandard@(d,q,R);
  S:=FreeGroupOfFpGroup(Rels);
  Rels:=RelatorsOfFpGroup(Rels);
  Rels:=Filtered(Rels,w->w<>w^0);
  return S/Rels;
end);

[ Dauer der Verarbeitung: 0.31 Sekunden  ]