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_types
— Functionnumber_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
GenericCharacterTables.number_of_characters
— Methodnumber_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
AbstractAlgebra.degree
— Methoddegree(char::AbstractGenericCharacter)
Return the character degree of the characters in char
.
Examples
julia> g=generic_character_table("GL2");
julia> degree(g[3])
q + 1
GenericCharacterTables.parameters
— Methodparameters(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)ℤ
GenericCharacterTables.info
— Methodinfo(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]]
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), andct[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_product
— Methodtensor_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)))
Hecke.tensor_product
— Methodtensor_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
GenericCharacterTables.linear_combination
— Functionlinear_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)))
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
GenericCharacterTables.omega
— Functionomega(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)))
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
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.norm
— Methodnorm(char::GenericCharacter)
Return the norm of the character type char
.
Examples
julia> g=generic_character_table("GL2");
julia> norm(g[1])
1
LinearAlgebra.norm
— Methodnorm(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)
Oscar.scalar_product
— Methodscalar_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)ℤ
Oscar.scalar_product
— Methodscalar_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