Algebras
Chevie.AlgebrasChevie.Algebras.GrothendieckRingChevie.Algebras.GroupAlgebraChevie.Algebras.PolynomialQuotientAlgebraChevie.Algebras.QuaternionsChevie.Algebras.SolomonAlgebraChevie.Algebras.ZeroHeckeChevie.Algebras.coefftypeChevie.Algebras.isassociativePermGroups.Groups.gensPermGroups.Groups.isabelian
Chevie.Algebras — Module
This is a port of the GAP3 package Algebras by Cédric Bonnafé.
Finite dimensional algebras are of the abstract type FiniteDimAlgebra{C} where the parameter C is the type of the coefficients.
There are few generic methods for such an algebra A. By default, it is assumed there is a method dim (which can also be spelled dimension) giving the dimension, and that A has some canonical basis index by 1:dim(A). Elements of A, of type AlgebraElt{TA} where TA is the type of A, are internally ModuleElts containing pairs i=>c where i is the integer index in 1:dim(A) specifiying an element of the basis of A and c is the coefficient of that basis element. The function basis(A,i) returns the AlgebraElt with only non-zero coefficient on i and equal to 1. It is assumed that basis(A,1) is the identity of A. The function basis(A) returns basis.(A,1:dim(A)). Addition, subtraction and multiplication by scalars (anything of type <:Number or of type C) of AlgebraElts works.
If A has a method basismult(A,i,j) returning basis(A,i)*basis(A,j) then the multiplication of elements is implemented using this function. If A has a field .multable containing a matrix dim(A)×dim(A) of AlgebraElts, then basismult by default uses this table understood as giving the multiplication table of basis(A).
Another view of algebra elements is as the vector of their coefficients on each basis element. If a is an AlgebraElt then v=coefficients(a) returns this vector and AlgebraElt(A,v) recovers a. The function Matrix(a) will transform a to a matrix whose i-th row is the coefficients of a times the i-th basis element (such a matrix acts on the left on the vector space underlying A).
Generic functions are left_ideal and twosided_ideal which take as argument A and a list of AlgebraElt and return the generated ideal.
radical is not defined generically, but, if defined, it defines automatically radicalpower and loewylength.
Some of the implemented algebras in this module are the PolynomialQuotientAlgebra of a polynomial, the GrothendieckRing and the GroupAlgebra of a group, and the ZeroHecke and SolomonAlgebra of a Coxeter group.
Chevie.Algebras.coefftype — Function
coefftype(A::FiniteDimAlgebra{C}) where C=C returns the type of the coefficients of the algebra A.
PermGroups.Groups.gens — Function
gens(A::FiniteDimAlgebra)
The generators of the algebra A. By default basis(A) but should be specialized when a more efficient answer is known.
PermGroups.Groups.isabelian — Method
isabelian(A::FiniteDimAlgebra) whether A is commutative
Chevie.Algebras.isassociative — Function
isassociative(A::FiniteDimAlgebra) whether A is associative
Chevie.Algebras.PolynomialQuotientAlgebra — Type
PolynomialQuotientAlgebra(p::Pol)
The quotient of the polynomial algebra with coefficients of type eltype(p) by the polynomial p.
julia> A=PolynomialQuotientAlgebra(Pol(:x)^2+1)
Int64[x]/x²+1
julia> basis(A)
2-element Vector{AlgebraElt{PolynomialQuotientAlgebra{Int64}, Int64}}:
⋅1
xChevie.Algebras.GrothendieckRing — Type
GrothendieckRing(G::Group,T=Int)
constructs the Grothendieck ring of the group G with coefficients of type T. The only condition is to be able to compute the character table of G.
julia> A=GrothendieckRing(coxsym(3))
GrothendieckRing(𝔖 ₃,Int64)
julia> basis(A).*permutedims(basis(A))
3×3 Matrix{AlgebraElt{GrothendieckRing{Int64}, Int64}}:
[3] [21] [111]
[21] [111]+[21]+[3] [21]
[111] [21] [3]
julia> A=GrothendieckRing(coxsym(3),FFE{2})
GrothendieckRing(𝔖 ₃,FFE{2})
julia> radical(A)
TwoSidedIdeal(GrothendieckRing(𝔖 ₃,FFE{2}),[[111]+[3]])Chevie.Algebras.GroupAlgebra — Type
GroupAlgebra(G,T=Int) group algebra of G with coefficients T
julia> W=Group(Perm(1,2))
Group((1,2))
julia> A=GroupAlgebra(W)
Algebra(Group((1,2)),Int64)
julia> basis(A)
2-element Vector{AlgebraElt{GroupAlgebra{Int64, Perm{Int16}, PermGroups.PG{Int16}}, Int64}}:
e
e₁Chevie.Algebras.Quaternions — Type
Quaternions() The quaternion algebra.
julia> b=basis(Quaternions())
4-element Vector{AlgebraElt{Quaternions{Int64}, Int64}}:
1
i
j
k
julia> b*permutedims(b)
4×4 Matrix{AlgebraElt{Quaternions{Int64}, Int64}}:
1 i j k
i -1 k -j
j -k -1 i
k j -i -1Chevie.Algebras.SolomonAlgebra — Type
SolomonAlgebra(W,K)
Let (W,S) be a finite Coxeter group. For w∈W, let R(w)={s∈S | l(ws)>l(w)}. If I is a subset of S, we set $Y_I=\{w∈W|R(w)=I\}$, $X_I=\{w∈W|R(w)⊃ I\}$.
Note that $X_I$ is the set of minimal length left coset representatives of $W/W_I$.
Let $y_I=∑_{w∈Y_I}w$, $x_I=∑_{w∈X_I}w$. They are elements of the group algebra ℤW of W over ℤ.
Now, let $Σ(W) = ⊕_{I ⊂ S} ℤ y_I = ⊕_{I ⊂ S} ℤ x_I$. This is a sub-ℤ-module of ℤW. In fact, Solomon proved that it is a sub-algebra of ℤW called the Solomon descent algebra. Now, let K(W) be the Grothendieck ring of W and let θ:Σ(W)→ K(W) be the map defined by $θ(x_I) = Ind_{W_I}^W 1$. Solomon proved that this is an homomorphism of algebras. We call it the Solomon homomorphism.
SolomonAlgebra returns the Solomon descent algebra of the finite Coxeter group (W,S) over K. If S=[s₁,…,sᵣ], the element $x_I$ corresponding to the subset I=[s₁,s₂,s₄] of S is printed as X₁₂₄. Note that A:=SolomonAlgebra(W,K) is endowed with the following fields:
A.W: the group W
A.basis: the basis (x_I)_{I ⊂ S}.
A.xbasis: the function sending I to $x_I$ (for instance A.xbasis(1,2,4)=X₁₂₄)
A.ybasis: the function sending the subset I to y_I.
A.injection: the injection of A in the group algebra of W, obtained by calling SolomonAlgebraOps.injection(A).
Note that SolomonAlgebra(W,K) endows W with the field W.solomon which is a record containing the following fields:
W.solomon_subsets: the set of subsets of S
W.solomon_conjugacy: conjugacy classes of parabolic subgroups of W (a conjugacy class is represented by the list of the positions, in W.solomon.subsets, of the subsets I of S such that W_I lies in this conjugacy class).
W.solomon_mackey: essentially the structure constants of the Solomon algebra over the rationals.
julia> W=coxgroup(:B,4)
B₄
julia> A=SolomonAlgebra(W)
SolomonAlgebra(B₄,Int64)
julia> X=A.xbasis; X(1,2,3)*X(2,4)
2X₂+2X₄
julia> W.solomon_subsets
16-element Vector{Vector{Int64}}:
[1, 2, 3, 4]
[1, 2, 3]
[1, 2, 4]
[1, 3, 4]
[2, 3, 4]
[1, 2]
[1, 3]
[1, 4]
[2, 3]
[2, 4]
[3, 4]
[1]
[2]
[3]
[4]
[]
julia> W.solomon_conjugacy
12-element Vector{Vector{Int64}}:
[1]
[2]
[3]
[4]
[5]
[6]
[7, 8]
[9, 11]
[10]
[12]
[13, 14, 15]
[16]
julia> Algebras.injection(A)(X(1,2,3))
e+e₄+e₃₄+e₂₃₄+e₁₂₃₄+e₂₁₂₃₄+e₃₂₁₂₃₄+e₄₃₂₁₂₃₄Chevie.Algebras.ZeroHecke — Type
ZeroHecke(W::CoxeterGroup,T=Int) create the Hecke algebra of W with parameters 0 and 1.
julia> A=ZeroHecke(coxsym(3))
0-Hecke(𝔖 ₃)
julia> radical(A)
TwoSidedIdeal(0-Hecke(𝔖 ₃),[(1//1)T₁₂+(-1//1)T₁₂₁,(1//1)T₂₁+(-1//1)T₁₂₁])