#############################################################################
##
#F                             CHEVIE library
##
#Y  Copyright 1992--1993,  Lehrstuhl D f"ur Mathematik,    RWTH Aachen,   and
#Y                         IWR   der   Universit"at    Heidelberg,   Germany.
##
##
#A {\sc R.~Steinberg}, The representations of $GL(3,q)$, $GL(4,q)$, $PGL(3,q)$
#A and $PGL(4,q)$, {\em Can.\ J.~Math.} {\bf 3} (1951), 225--235.
##
#B {\sc J.~A.~Green}, The characters of the finite general linear groups,
#B {\em Trans.\ Amer.\ Math.\ Soc.} {\bf 80} (1955), 402--447.
##
lprint(`**************************************************************************`);
lprint(`*                                                                        *`);
lprint(`*                                                                        *`);
lprint(`*                   Generic Character Table of GL_3(q)                   *`);
lprint(`*                                                                        *`);
lprint(`*                                                                        *`);
lprint(`**************************************************************************`);

# 1) benoetigte parameter

q:='q':GEWZ1:='GEWZ1':GEWZ2:='GEWZ2':GEWZ3:='GEWZ3':
aA:='aA':bB:='bB':cC:='cC':lL:='lL':mM:='mM':nN:='nN':

# 2) charakterwerte

`GL3`:=array(-2..8,-1..8,[

[`GL_3(q)`,`A2002`,q^3*(q-1)^3*(q+1)*(q^2+q+1),8,8,8,8],

[
[` `],
[` `],
[` `,[1,0],[`A_2`,[1,1,1]]],
[` `,[1,1],[`A_2`,[2,1  ]]],
[` `,[1,2],[`A_2`,[3    ]]],
[` `,[2,0],[`A_1`,[1,1  ]]],
[` `,[2,1],[`A_1`,[2    ]]],
[` `,[3,0],[`A_0`,[1    ]]],
[` `,[4,0],[`A_0`,[1    ]]],
[` `,[5,0],[`A_0`,[1    ]]]
],

[` `,1,1,(q^2-1)*(q^2+q+1),q*(q-1)^2*(q+1)*(q^2+q+1),q^2*(q^2+q+1),
q^2*(q^2-1)*(q^2+q+1), q^3*(q+1)*(q^2+q+1),q^3*(q-1)*(q^2+q+1),
q^3*(q-1)^2*(q+1)],

[[` `,[1,0],[`A_2`,[3    ]]],
                     1,
                     GEWZ1^(3*nN*aA),
                     GEWZ1^(3*nN*aA),
                     GEWZ1^(3*nN*aA),
                     GEWZ1^(2*nN*aA+nN*bB),
                     GEWZ1^(2*nN*aA+nN*bB),
                     GEWZ1^(nN*aA+nN*bB+nN*cC),
                     GEWZ1^(nN*aA+nN*bB),
                     GEWZ1^(nN*aA)],

[[` `,[1,1],[`A_2`,[2,1  ]]],
                     q^2+q,
                     (q^2+q)*GEWZ1^(3*nN*aA),
                     q*GEWZ1^(3*nN*aA),
                     0,
                     (q+1)*GEWZ1^(2*nN*aA+nN*bB),
                     GEWZ1^(2*nN*aA+nN*bB),
                     2*GEWZ1^(nN*aA+nN*bB+nN*cC),
                     0,
                     -GEWZ1^(nN*aA)],

[[` `,[1,2],[`A_2`,[1,1,1]]],
                     q^3,q^3*GEWZ1^(3*nN*aA),
                     0,
                     0,
                     q*GEWZ1^(2*nN*aA+nN*bB),
                     0,
                     GEWZ1^(nN*aA+nN*bB+nN*cC),
                     -GEWZ1^(nN*aA+nN*bB),
                     GEWZ1^(nN*aA)],

[[` `,[2,0],[`A_1`,[2    ]]],
                     q^2+q+1,
                     (q^2+q+1)*GEWZ1^(mM*aA+2*nN*aA),
                     (q+1)*GEWZ1^(mM*aA+2*nN*aA),
                     GEWZ1^(mM*aA+2*nN*aA),
                     (q+1)*GEWZ1^(mM*aA+nN*aA+ nN*bB)+GEWZ1^(2*nN*aA+mM*bB),
                     GEWZ1^(mM*aA+nN*aA+nN*bB)+GEWZ1^(2*nN*aA+mM*bB),
                     GEWZ1^(mM*aA+nN*bB+nN*cC)+GEWZ1^(mM*bB+ nN*aA+nN*cC)+GEWZ1^(mM*cC+nN*aA+nN*bB),
                     GEWZ1^(mM*aA+nN*bB),
                     0],

[[` `,[2,1],[`A_1`,[1,1  ]]],
                     q*(q^2+q+1),
                     q*(q^2+q+1)*GEWZ1^(mM*aA+2*nN*aA),
                     q*GEWZ1^(mM*aA+2*nN*aA),
                     0,
                     (q+1)*GEWZ1^(mM*aA+nN*aA+nN*bB)+q*GEWZ1^(2*nN*aA+mM*bB),
                     GEWZ1^(mM*aA+nN*aA+nN*bB),
                     GEWZ1^(mM*aA+nN*bB+nN*cC)+GEWZ1^(mM*bB+nN*aA+nN*cC)+GEWZ1^(mM*cC+nN*aA+nN*bB),
                     -GEWZ1^(mM*aA+nN*bB),
                     0],

[[` `,[3,0],[`A_0`,[1    ]]],
                     (q+1)*(q^2+q+1),
                     (q+1)*(q^2+q+1)*GEWZ1^(lL*aA+mM*aA+nN*aA),
                     (2*q+1)*GEWZ1^(lL*aA+mM*aA+nN*aA),
                     GEWZ1^(lL*aA+mM*aA+nN*aA),
                     (q+1)*(GEWZ1^(lL*aA+mM*aA+nN*bB)+
                            GEWZ1^(mM*aA+nN*aA+lL*bB)+
                            GEWZ1^(lL*aA+nN*aA+mM*bB)),
                     GEWZ1^(lL*aA+mM*aA+nN*bB)+GEWZ1^(lL*aA+nN*aA+mM*bB)+GEWZ1^(mM*aA+nN*aA+lL*bB),
                     GEWZ1^(lL*aA+mM*bB+nN*cC)+
                     GEWZ1^(lL*aA+nN*bB+mM*cC)+
                     GEWZ1^(mM*aA+nN*bB+lL*cC)+
                     GEWZ1^(mM*aA+lL*bB+nN*cC)+
                     GEWZ1^(nN*aA+mM*bB+lL*cC)+
                     GEWZ1^(nN*aA+lL*bB+mM*cC),
                     0,
                     0],

[[` `,[4,0],[`A_0`,[1    ]]],
                     (q-1)*(q^2+q+1),
                     (q-1)*(q^2+q+1)*GEWZ1^(mM*aA+nN*aA),
                     -GEWZ1^(mM*aA+nN*aA),
                     -GEWZ1^(mM*aA+nN*aA),
                     (q-1)*GEWZ1^(nN*aA+mM*bB),
                     -GEWZ1^(nN*aA+mM*bB),
                     0,
                     -GEWZ2^(mM*aA*q+mM*aA+nN*bB)-GEWZ2^(mM*aA*q+mM*aA+nN*bB*q),
                     0],

[[` `,[5,0],[`A_0`,[1    ]]],
                     (q-1)^2*(q+1),
                     (q-1)^2*(q+1)*GEWZ1^(nN*aA),
                     -(q-1)*GEWZ1^(nN*aA),
                     GEWZ1^(nN*aA),
                     0,
                     0,
                     0,
                     0,
                     GEWZ3^(nN*aA)+GEWZ3^(nN*aA*q)+GEWZ3^(nN*aA*q^2)]
]):

Klassen.`GL3`.Parameter := array(-1..8,[
[[],[]],
[[],[]],
[[aA=1..q-1],[]],
[[aA=1..q-1],[]],
[[aA=1..q-1],[]],
[[aA=1..q-1,bB=1..q-1],[[aA-bB,q-1]]],
[[aA=1..q-1,bB=1..q-1],[[aA-bB,q-1]]],
[[aA=1..q-1,bB=1..q-1,cC=1..q-1],[[aA-bB,q-1],[aA-cC,q-1],[bB-cC,q-1]]],
[[aA=1..q-1,bB=1..q^2-1],[[bB,q+1]]],
[[aA=1..q^3-1],[[aA,q^2+q+1]]]
]):

Char.`GL3`.Parameter := array(-2..8,[
[[],[]],
[[],[]],
[[],[]],
[[nN=1..q-1],[]],
[[nN=1..q-1],[]],
[[nN=1..q-1],[]],
[[nN=1..q-1,mM=1..q-1],[[nN-mM,q-1]]],
[[nN=1..q-1,mM=1..q-1],[[nN-mM,q-1]]],
[[nN=1..q-1,mM=1..q-1,lL=1..q-1],[[nN-mM,q-1],[nN-lL,q-1],[mM-lL,q-1]]],
[[mM=1..q-1,nN=1..q^2-1],[[nN,q+1]]],
[[nN=1..q^3-1],[[nN,q^2+q+1]]]
]):

# 3) summationsprozeduren

# a) klassensummen

Klassen.A2002.Summe.1:=proc(tt)
   nesum(tt,aA=0..q-2);
end:

Klassen.A2002.Summe.2:=proc(tt) 
   nesum(tt,aA=0..q-2);
end: 

Klassen.A2002.Summe.3:=proc(tt) 
   nesum(tt,aA=0..q-2);
end: 

Klassen.A2002.Summe.4:=proc(tt)
   local tt1, ss4, ss5;
   tt1 := eesubs(bB=aA,tt);
   ss4 := nesum(tt,bB=0..q-2);
   ss5 := linkomb(1,ss4,-1,tt1);
   nesum(ss5,aA=0..q-2);
end:

Klassen.A2002.Summe.5:=proc(tt) 
   local tt1, ss4, ss5;
   tt1 := eesubs(bB=aA,tt);
   ss4 := nesum(tt,bB=0..q-2);
   ss5 := linkomb(1,ss4,-1,tt1); 
   nesum(ss5,aA=0..q-2); 
end:

Klassen.A2002.Summe.6:=proc(tt)
    local ss6a, ss6b, ss6, ss7a, ss7, ss8a, ss8, ss9a, ss9, ss10,
          tt1, tt2, tt3, tt4, tt4a;
    ss6a :=  nesum(tt,  aA=0..q-2);
    ss6b :=  nesum(ss6a,bB=0..q-2);
    ss6  :=  nesum(ss6b,cC=0..q-2);
    tt1  := eesubs(bB=aA,tt); 
    ss7a :=  nesum(tt1, aA=0..q-2); 
    ss7  :=  nesum(ss7a,cC=0..q-2);
    tt2  := eesubs(cC=bB,tt);
    ss8a :=  nesum(tt2, aA=0..q-2);
    ss8  :=  nesum(ss8a,bB=0..q-2);
    tt3  := eesubs(cC=aA,tt); 
    ss9a :=  nesum(tt3, aA=0..q-2); 
    ss9  :=  nesum(ss9a,bB=0..q-2);
    tt4a := eesubs(bB=aA,tt);
    tt4  := eesubs(cC=aA,tt4a);
    ss10 :=  nesum(tt4,aA=0..q-2);
    linkomb(1/6,ss6,-1/6,ss7,-1/6,ss8,-1/6,ss9,1/3,ss10);
end:

Klassen.A2002.Summe.7:=proc(tt)
    local ss7, ss8, tt1, ss9;
    ss7 := nesum(tt,bB=0..q^2-2);
    tt1 := eesubs(bB=(q+1)*bB,tt);
    ss8 := nesum(tt1,bB=0..q-2);
    tt1 := linkomb(1,ss7,-1,ss8);
    ss9 := nesum(tt1,aA=0..q-2);
    linkomb(1/2,ss9);
end:

Klassen.A2002.Summe.8:=proc(tt)
    local ss8, tt1, ss9;
    ss8 := nesum(tt,aA=0..q^3-2);
    tt1 := eesubs(aA=(q^2+q+1)*aA,tt);
    ss9 := nesum(tt1,aA=0..q-2);
    linkomb(1/3,ss8,-1/3,ss9);
end:

# b) charaktersummen

Char.A2002.Summe.1:=proc(tt)
   nesum(tt,nN=0..q-2);
end:

Char.A2002.Summe.2:=proc(tt) 
   nesum(tt,nN=0..q-2);
end: 

Char.A2002.Summe.3:=proc(tt) 
   nesum(tt,nN=0..q-2);
end: 

Char.A2002.Summe.4:=proc(tt)
   local tt1, ss4, ss5;
   tt1 := eesubs(mM=nN,tt);
   ss4 := nesum(tt,mM=0..q-2);
   ss5 := linkomb(1,ss4,-1,tt1);
   nesum(ss5,nN=0..q-2);
end:

Char.A2002.Summe.5:=proc(tt) 
   local tt1, ss4, ss5;
   tt1 := eesubs(mM=nN,tt);
   ss4 := nesum(tt,mM=0..q-2);
   ss5 := linkomb(1,ss4,-1,tt1); 
   nesum(ss5,nN=0..q-2); 
end:

Char.A2002.Summe.6:=proc(tt)
    local ss6a, ss6b, ss6, ss7a, ss7, ss8a, ss8, ss9a, ss9, ss10,
          tt1, tt2, tt3, tt4, tt4a;
    ss6a :=  nesum(tt,  nN=0..q-2);
    ss6b :=  nesum(ss6a,mM=0..q-2);
    ss6  :=  nesum(ss6b,lL=0..q-2);
    tt1  := eesubs(mM=nN,tt); 
    ss7a :=  nesum(tt1, nN=0..q-2); 
    ss7  :=  nesum(ss7a,lL=0..q-2);
    tt2  := eesubs(lL=mM,tt);
    ss8a :=  nesum(tt2, nN=0..q-2);
    ss8  :=  nesum(ss8a,mM=0..q-2);
    tt3  := eesubs(lL=nN,tt); 
    ss9a :=  nesum(tt3, nN=0..q-2); 
    ss9  :=  nesum(ss9a,mM=0..q-2);
    tt4a := eesubs(mM=nN,tt);
    tt4  := eesubs(lL=nN,tt4a);
    ss10 :=  nesum(tt4,nN=0..q-2);
    linkomb(1/6,ss6,-1/6,ss7,-1/6,ss8,-1/6,ss9,1/3,ss10);
end:

Char.A2002.Summe.7:=proc(tt)
    local ss7, ss8, tt1, ss9;
    ss7 := nesum(tt,nN=0..q^2-2);
    tt1 := eesubs(nN=(q+1)*nN,tt);
    ss8 := nesum(tt1,nN=0..q-2);
    tt1 := linkomb(1,ss7,-1,ss8);
    ss9 := nesum(tt1,mM=0..q-2);
    linkomb(1/2,ss9);
end:

Char.A2002.Summe.8:=proc(tt)
    local ss8, tt1, ss9;
    ss8 := nesum(tt,nN=0..q^3-2);
    tt1 := eesubs(nN=(q^2+q+1)*nN,tt);
    ss9 := nesum(tt1,nN=0..q-2);
    linkomb(1/3,ss8,-1/3,ss9);
end:

# 5) konvertierungen

parameterA2002:=proc(arg,char,class)
   local arg1;
   arg1:=subs(aA=aA.class,bB=bB.class,cC=cC.class,arg);
   subs(lL=lL.char,mM=mM.char,nN=nN.char,arg1);
end:

setCongruence.A2002 := proc()
  qQ := 'qQ';
  NULL;
end:

unsetCongruence.A2002 := proc()
  q := 'q';
  NULL;
end:

# 5) Informationen:
Information.`A2002`:=TEXT(
`- Information about the generic character table of $GL_3(q)$.`,
``,
`- CHEVIE-name of the table: ``GL3```,
``,
`- The table was first computed in:`,
`  {\\sc R.~Steinberg}, The representations of $GL(3,q)$, $GL(4,q)$, $PGL(3,q)$`,
`  and $PGL(4,q)$, {\\em Can.\\ J.~Math.} {\\bf 3} (1951), 225--235.`,
``,
`- See also:`,
`  {\\sc J.~A.~Green}, The characters of the finite general linear groups,`,
`  {\\em Trans.\\ Amer.\\ Math.\\ Soc.} {\\bf 80} (1955), 402--447.`,
``
):

g := `GL3`:
print(`g := ``GL3`` `);
