An extended example

The following is based on an example in [OSCAR], which in turn is based on Section 5.3 of [GHLMP96]. To fully understand what is going on we strongly recommend to read the latter source concurrently with the present text.

To start we load the generic character table for $\mathrm{SL}_3(q)$ with $q\not\equiv 1\pmod 3$. To learn about the origin of the table, we could enter print(info(T)).

julia> T = generic_character_table("SL3.n1")
Generic character table SL3.n1
  of order q^8 - q^6 - q^5 + q^3
  with 8 irreducible character types
  with 8 class types
  with parameters (a, b, m, n)

As we can see this table has four parameters in addition to $q$. The entries of the table are “generalized cyclotomics”, that is, linear combinations over $\mathbb{Q}(q)$ of symbolic “roots of unity” depending on the parameters listed above.

julia> T[4,4]
(q + 1)*exp(2π𝑖((a*n)//(q - 1))) + exp(2π𝑖((-2*a*n)//(q - 1)))

Denoting row 4 of the table by $\chi_4$, we note that is not a single character, but a character type, describing a whole family of characters.

julia> χ₄ = T[4]
Generic character of SL3.n1
  with parameters
    n ∈ {1,…, q - 1} except n ∈ (q - 1)ℤ
  of degree q^2 + q + 1
  with values
    q^2 + q + 1
    q + 1
    1
    (q + 1)*exp(2π𝑖((a*n)//(q - 1))) + exp(2π𝑖((-2*a*n)//(q - 1)))
    exp(2π𝑖((a*n)//(q - 1))) + exp(2π𝑖((-2*a*n)//(q - 1)))
    exp(2π𝑖((a*n)//(q - 1))) + exp(2π𝑖((b*n)//(q - 1))) + exp(2π𝑖((-a*n - b*n)//(q - 1)))
    exp(2π𝑖((a*n)//(q - 1)))
    0

With these generic characters, we can compute norms, scalar products, and more. For this demonstration we tensor the second character type $\chi_2$ with itself.

julia> h = T[2] * T[2]
Generic character of SL3.n1
  of degree q^4 + 2*q^3 + q^2
  with values
    q^4 + 2*q^3 + q^2
    q^2
    0
    q^2 + 2*q + 1
    1
    4
    0
    1

We may now attempt to decompose this character type h by computing its scalar product with the irreducible character types. This returns a “generic” scalar product, plus a (possibly empty) list of parameter exceptions for which the general result may not hold. For example:

julia> scalar_product(T[4], h)
0
With exceptions:
  2*n1 ∈ (q - 1)ℤ

This scalar product is $0$ except when $q-1$ divides $2n_1$, where $n_1$ indicates the value of the parameter $n$ for the first factor in the scalar product (i.e. the character type $\chi_4$). For a “generic decomposition” we need to compute all the scalar products and exceptions.

julia> for i in 1:8 println("<$i, h> = ", scalar_product(T[i], h)) end
<1, h> = 1
<2, h> = 2
<3, h> = 2
<4, h> = 0
With exceptions:
  2*n1 ∈ (q - 1)ℤ
<5, h> = 0
With exceptions:
  2*n1 ∈ (q - 1)ℤ
<6, h> = 0
With exceptions:
  2*m1 - n1 ∈ (q - 1)ℤ
  m1 - 2*n1 ∈ (q - 1)ℤ
  m1 + n1 ∈ (q - 1)ℤ
  m1 ∈ (q - 1)ℤ
  m1 - n1 ∈ (q - 1)ℤ
  n1 ∈ (q - 1)ℤ
<7, h> = 0
With exceptions:
  n1 ∈ (q - 1)ℤ
<8, h> = 0
With exceptions:
  q*n1 ∈ (q^2 + q + 1)ℤ
  n1 ∈ (q^2 + q + 1)ℤ
  q*n1 + n1 ∈ (q^2 + q + 1)ℤ

This suggest a decomposition of $\chi_2\otimes\chi_2$ into $\chi_1+2\chi_2+2\chi_3$ “in general”. But comparing the respective degrees, we notice a discrepancy:

julia> degree(linear_combination([1,2,2],[T[1],T[2],T[3]]))
2*q^3 + 2*q^2 + 2*q + 1

julia> degree(h)
q^4 + 2*q^3 + q^2

To resolve this, we need to work through the exceptions. Recall that earlier we saw that $\langle\chi_4,\chi_2^2\rangle=0$ except when $q-1$ divides $2n_1$, where $n_1$ was the value of the parameter $n$ used in $\chi_4$. Further restrictions apply to $n$:

julia> parameters(T[4])
n ∈ {1,…, q - 1} except n ∈ (q - 1)ℤ

So $n$ may take on any value between $1$ and $q-1$ not divisible by $q-1$. Hence the only possible exception is $n=(q-1)/2$ which can only occur if $q$ is odd. It thus makes sense to consider $q$ odd and $q$ even separately.

We demonstrate this for $q$ even. Then $\langle\chi_4,\chi_2^2\rangle=0$ and with a similar argument $\langle\chi_5,\chi_2^2\rangle=0$. We now construct a copy of the table but with the congruence equation $q\equiv 0\pmod 2$ applied:

julia> T2 = set_congruence(T; remainder=0, modulus=2);

Inspecting the list of exceptions for $\langle\chi_6,\chi_2^2\rangle$, the first occurs when $q-1$ divides $m+n$. To study this case we specialize $m$ for character type 6:

julia> (q, (a, b, m, n)) = parameters(T2);

julia> x = parameter(T2, "x");  # create an additional "free" variable

julia> s = specialize(T2[6], m, -n + (q-1)*x);  # force m = -n (mod q-1)

Recomputing the scalar product now gives a new result. Note that we have to map the character type h into the new table for this to work.

julia> scalar_product(s, T2(h))
1
With exceptions:
  3*n1 ∈ (q - 1)ℤ
  2*n1 ∈ (q - 1)ℤ

The exceptions both cannot occur as $q$ is even and the table we are considering is only defined for $q\not\equiv 1\pmod 3$. By working through the other possible exceptions and irreducible character types, and handling duplicates, one finally obtains

\[\chi_2^2 = \chi_1+2\chi_2+2\chi_3 +\frac12\sum_{n=1}^{q-2} \chi_6(n,q-1-n) +\frac12\sum_{n=1}^{q} \chi_7(n(q-1)).\]

Where $\chi_6(n,q-1-n)$ indicates that the $6$th character in the table T2 is a family on two parameters: $n$ and $q-1-n$, while $\chi_7$ depends on only one, namely $n(q-1)$. A similar result can be obtained for odd $q$ albeit with a few more cases that need to be dealt with, but all in essentially the same manner.