#############################################################################
##
#F                             CHEVIE library
##
#Y  Copyright 1992--1993,  Lehrstuhl D f"ur Mathematik,    RWTH Aachen,   and
#Y                         IWR   der   Universit"at    Heidelberg,   Germany.
##
###########################################################################
###########################################################################
##
#A {\sc H.~Jordan}, Group-characters of various types of linear groups,
#A {\em Amer.\ J.~Math.} {\bf 29} (1907), 387--405.
##
##
#A {\sc I.~Schur}, Untersuchungen {\accent127 u}ber die Darstellung der
#A endlichen Gruppen durch gebrochene lineare Substitutionen, {\em J.~reine
#A angew.\ Math.} {\bf 132} (1907), 85--137.
##
##
#B {\sc R.~Steinberg}, The representations of $GL(3,q)$, $GL(4,q)$, $PGL(3,q)$
#B and $PGL(4,q)$, {\em Can.\ J.~Math.} {\bf 3} (1951), 225--235.
##
lprint(`**************************************************************************`);
lprint(`*                                                                        *`);
lprint(`*                                                                        *`);
lprint(`*                   Generic Character Table of GL_2(q)                   *`);
lprint(`*                                                                        *`);
lprint(`*                                                                        *`);
lprint(`**************************************************************************`);
# 1) Benoetigte Parameter

q:='q':kK:='kK':lL:='lL':iI:='iI':jJ:='jJ':GEWZ1:='GEWZ1':GEWZ2='GEWZ2':

# 2) Charakterwerte

`GL2` := array(-2 .. 4, -1 .. 5,[

[`GL_2(q)`,`A1002`,(q^2-1)*(q^2-q),4,4,4,5],

[
[` `],
[` `],
[` `,[1,0],[`A_1`,[1,1]]],
[` `,[1,1],[`A_1`,[2  ]]],
[` `,[2,0],[`A_0`,[1  ]]],
[` `,[3,0],[`A_0`,[1  ]]]
],

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

[[` `,[1,0],[`A_1`,[2  ]]],
                   1,
                   GEWZ1^(2*kK*iI),
                   GEWZ1^(2*kK*iI), 
                   GEWZ1^(kK*iI+kK*jJ),
                   GEWZ1^(kK*iI)],

[[` `,[1,1],[`A_1`,[1,1]]],
                   q,
                   q*GEWZ1^(2*kK*iI),
                   0,
                   GEWZ1^(kK*iI+kK*jJ),
                   -GEWZ1^(kK*iI)],

[[` `,[2,0],[`A_0`,[1  ]]],
                   q+1,
                   (q+1)*GEWZ1^(lL*iI+kK*iI),
                   GEWZ1^(lL*iI+kK*iI),
                   GEWZ1^(lL*iI+kK*jJ)+GEWZ1^(kK*iI+lL*jJ),
                   0],

[[` `,[3,0],[`A_0`,[1  ]]],
                   q-1,
                   (q-1)*GEWZ1^(kK*iI),
                   -GEWZ1^(kK*iI),
                   0,
                   -GEWZ2^(kK*iI)-GEWZ2^(kK*iI*q)]
]):

Klassen.`GL2`.Parameter := array(-1..4,[
[[],[]],
[[],[]],
[[iI=1..q-1],[]],
[[iI=1..q-1],[]],
[[iI=1..q-1, jJ=1..q-1],[[iI-jJ,q-1]]],
[[iI=1..q^2-1],[[iI,q+1]]]
]):
 
Char.`GL2`.Parameter := array(-2..4,[
[[],[]],
[[],[]],
[[],[]],
[[kK=1..q-1],[]],
[[kK=1..q-1],[]],
[[kK=1..q-1, lL=1..q-1],[[kK-lL,q-1]]],
[[kK=1..q^2-1],[[kK,q+1]]]
]):

# 3) Summationsprozeduren

# a) Klassensummen

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

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

Klassen.A1002.Summe.3:=proc(tt)
   local s1, s2;
   s1:=eesubs(jJ=iI,tt);
   s2:=nesum(tt, jJ=0..q-2);
   s1:=linkomb(1,s2,-1,s1);
   s2:=nesum(s1, iI=0..q-2);
   linkomb(1/2,s2);
end:

Klassen.A1002.Summe.4:=proc(tt)
   local s1, s2, rh;
   s1:=eesubs(iI=(q+1)*rh, tt);
   s1:=nesum(s1, rh=0..q-2);
   s2:=nesum(tt, iI=0..q^2-2);
   linkomb(1/2,s2,-1/2,s1);
end:

# b) Charaktersummen

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

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

Char.A1002.Summe.3:=proc(tt)
   local s1, s2;
   s1:=eesubs(lL=kK,tt);
   s2:=nesum(tt, lL=0..q-2);
   s1:=linkomb(1,s2,-1,s1);
   s2:=nesum(s1, kK=0..q-2);
   linkomb(1/2,s2);
end:

Char.A1002.Summe.4:=proc(tt)
   local s1, s2, rh;
   s1:=eesubs(kK=(q+1)*rh, tt);
   s1:=nesum(s1, rh=0..q-2);
   s2:=nesum(tt, kK=0..q^2-2);
   linkomb(1/2,s2,-1/2,s1);
end:


# 4) Konvertierungen

parameterA1002:=proc(arg,char,class)
   subs(iI=iI.class,jJ=jJ.class,
   lL=lL.char,kK=kK.char,arg);
end:

setCongruenceA1002:=proc()
  NULL;
end:
unsetCongruenceA1002:=proc()
  NULL;
end:

# 5) Informationen:
Information.`A1002`:=TEXT(
`- Information about the generic character table of $GL_2(q)$.`,
``,
`- CHEVIE-name of the table: ``GL2```,
``,
`- The table was first computed in:`,
`  {\\sc H.~Jordan}, Group-characters of various types of linear groups,`,
`  {\\em Amer.\\ J.~Math.} {\\bf 29} (1907), 387--405.`,
``,
`  {\\sc I.~Schur}, Untersuchungen "uber die Darstellung der`,
`  endlichen Gruppen durch gebrochene lineare Substitutionen,`,
`  {\\em J.~reine angew.\\ Math.} {\\bf 132} (1907), 85--137.`,
``,
`- See also:`,
`  {\\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.`,
` `
):
g:=GL2:
print(`g := GL2`);
