Character types

A character type is a family of characters which are indexed by a set of parameters, together with ranges of admissible values for each parameters, and a set of excluded parameter values. The characters in a character type share many properties, e.g. they all have the same degree.

Since "types" already have a very specific meaning in Julia (and other programming languages), we instead sometimes refer to character types as "generic characters". In particular the Julia types we use to represent character types are called AbstractGenericCharacter, GenericCharacter and SimpleGenericCharacter.

Properties

GenericCharacterTables.number_of_character_typesFunction
number_of_character_types(t::Table)

Return the number of character types of table t. This can also be obtained via length(t).

Examples

julia> g=generic_character_table("GL2");

julia> number_of_character_types(g)
4
source
GenericCharacterTables.number_of_charactersMethod
number_of_characters(char::GenericCharacter)

Return the number of characters in the generic character char.

Examples

julia> g=generic_character_table("GL2");

julia> number_of_characters(g[1])
q - 1
source
AbstractAlgebra.degreeMethod
degree(char::AbstractGenericCharacter)

Return the character degree of the characters in char.

Examples

julia> g=generic_character_table("GL2");

julia> degree(g[3])
q + 1
source
GenericCharacterTables.parametersMethod
parameters(char::AbstractGenericCharacter)

Return the parameters of the character type char. This includes the parameter names, ranges and exceptions.

Examples

julia> g=generic_character_table("GL2");

julia> parameters(g[3])
k ∈ {1,…, q - 1}, l ∈ {1,…, q - 1} except -l + k ∈ (q - 1)ℤ
source
GenericCharacterTables.infoMethod
info(char::AbstractGenericCharacter)

Return the infolists of the character type char.

Examples

julia> g=generic_character_table("GL2");

julia> info(g[2])
2-element Vector{Any}:
 Any[1, 1]
 Any["A_1", [1, 1]]
source

Iteration

Tables implement Julia's iteration interface to iterate over values stored in character types. For a character type ct,

  • length(ct) returns the number of values in the character type (which is equal to the number of class types s in the table), and
  • ct[i] returns the $i$th value of the character type.
julia> g=generic_character_table("GL2");

julia> ct = g[3]
Generic character of GL2
  with parameters
    k ∈ {1,…, q - 1}, l ∈ {1,…, q - 1} except -l + k ∈ (q - 1)ℤ
  of degree q + 1
  with values
    (q + 1)*exp(2π𝑖((i*l + i*k)//(q - 1)))
    exp(2π𝑖((i*l + i*k)//(q - 1)))
    exp(2π𝑖((i*l + j*k)//(q - 1))) + exp(2π𝑖((i*k + j*l)//(q - 1)))
    0

julia> collect(ct)
4-element Vector{GenericCharacterTables.GenericCyclo}:
 (q + 1)*exp(2π𝑖((i*l + i*k)//(q - 1)))
 exp(2π𝑖((i*l + i*k)//(q - 1)))
 exp(2π𝑖((i*l + j*k)//(q - 1))) + exp(2π𝑖((i*k + j*l)//(q - 1)))
 0

Constructing new character types

The immediate way to obtain a character type object is to get it from a table T via indexing, i.e., as T[i] for some index $i$.

In addition, there are a few ways to construct new character types.

Hecke.tensor_productMethod
tensor_product(char1::GenericCharacter, char2::GenericCharacter)

Return the tensor product of the character types char1 and char2. This can also be obtained via char1 * char2.

Examples

julia> g = generic_character_table("GL2");

julia> tensor_product(g[1], g[2])
Generic character of GL2
  with parameters
    kt1 ∈ {1,…, q - 1}, kt2 ∈ {1,…, q - 1}
  of degree q
  with values
    q*exp(2π𝑖((2*i*kt1 + 2*i*kt2)//(q - 1)))
    0
    exp(2π𝑖((i*kt1 + i*kt2 + j*kt1 + j*kt2)//(q - 1)))
    (-1)*exp(2π𝑖((i*kt1 + i*kt2)//(q - 1)))
source
Hecke.tensor_productMethod
tensor_product(char1::SimpleGenericCharacter{T}, char2::SimpleGenericCharacter{T}) where T<:PolyRingElem

Return the tensor product of the character types char1 and char2. This can also be obtained via char1 * char2.

Examples

julia> g = green_function_table("GL3");

julia> tensor_product(g[1],g[2])
Generic character of GL3
  of degree -q^6 - 2*q^5 - 2*q^4 + 2*q^2 + 2*q + 1
  with values
    -q^6 - 2*q^5 - 2*q^4 + 2*q^2 + 2*q + 1
    2*q + 1
    1
source
GenericCharacterTables.linear_combinationFunction
linear_combination(coeffs::Vector{Int64}, chars::Vector{<:GenericCharacter})

Return the linear combination of the character types chars with coefficients coeffs.

Examples

julia> g=generic_character_table("GL2");

julia> linear_combination([5,1],[g[1],g[2]])
Generic character of GL2
  with parameters
    kl1 ∈ {1,…, q - 1}, kl2 ∈ {1,…, q - 1}
  of degree q + 5
  with values
    (5)*exp(2π𝑖((2*i*kl1)//(q - 1))) + q*exp(2π𝑖((2*i*kl2)//(q - 1)))
    (5)*exp(2π𝑖((2*i*kl1)//(q - 1)))
    exp(2π𝑖((i*kl2 + j*kl2)//(q - 1))) + (5)*exp(2π𝑖((i*kl1 + j*kl1)//(q - 1)))
    (-1)*exp(2π𝑖((i*kl2)//(q - 1))) + (5)*exp(2π𝑖((i*kl1)//(q - 1)))
source
linear_combination(coeffs::Vector{Int64}, chars::Vector{SimpleGenericCharacter{T}}) where T <: NfPoly

Return the linear combination of the character types chars with coefficients coeffs.

Examples

julia> g=green_function_table("GL3");

julia> linear_combination([5,1],[g[1],g[2]])
Generic character of GL3
  of degree 4*q^3 + 10*q^2 + 10*q + 6
  with values
    4*q^3 + 10*q^2 + 10*q + 6
    10*q + 6
    6
source
GenericCharacterTables.omegaFunction
omega(char::GenericCharacter)

Return the (generic) central character of the character type char.

Examples

julia> g=generic_character_table("GL2");

julia> omega(g[1])
Generic character of GL2
  with parameters
    k ∈ {1,…, q - 1}
  of degree 1
  with values
    exp(2π𝑖((2*i*k)//(q - 1)))
    (q^2 - 1)*exp(2π𝑖((2*i*k)//(q - 1)))
    (q^2 + q)*exp(2π𝑖((i*k + j*k)//(q - 1)))
    (q^2 - q)*exp(2π𝑖((i*k)//(q - 1)))
source
omega(char::SimpleGenericCharacter{T}) where T <: NfPoly

Return the (generic) central character of the character type char.

Examples

julia> g=green_function_table("GL3");

julia> omega(g[1])
Generic character of GL3
  of degree 1
  with values
    1
    2*q^2 - q - 1
    q^3 - 2*q^2 + q
source

Norms and scalar products

GenericCharacterTables allows you to compute norms and scalar products of character types. The results are correct for all possible combinations of parameters except possibly for those where the additionally returned exceptions apply. Those consist of multivariate polynomials with coefficients in a rational function field and are satisfied if the evaluation of this polynomial is an integer.

LinearAlgebra.normMethod
norm(char::GenericCharacter)

Return the norm of the character type char.

Examples

julia> g=generic_character_table("GL2");

julia> norm(g[1])
1
source
LinearAlgebra.normMethod
norm(char::SimpleGenericCharacter{T}) where T <: NfPoly

Return the norm of the character type char.

Examples

julia> g=green_function_table("GL3");

julia> norm(g[1])
6//(q^3 - 3*q^2 + 3*q - 1)
source
Oscar.scalar_productMethod
scalar_product(char1::GenericCharacter, char2::GenericCharacter)

Return the scalar product between the character types char1 and char2.

Examples

julia> g=generic_character_table("GL2");

julia> scalar_product(g[3],g[2])
0
With exceptions:
  l1 + k1 - 2*k2 ∈ (q - 1)ℤ
  l1 - k2 ∈ (q - 1)ℤ
  k1 - k2 ∈ (q - 1)ℤ
source
Oscar.scalar_productMethod
scalar_product(char1::SimpleGenericCharacter{T}, char2::SimpleGenericCharacter{T}) where T <: NfPoly

Return the scalar product between the character types char1 and char2.

Examples

julia> g=green_function_table("GL3");

julia> scalar_product(g[1],g[2])
0
source