Finite dimensional algebras with basis

REFERENCES:

[CR62](1, 2) Curtis, Charles W.; Reiner, Irving “Representation theory of finite groups and associative algebras.” Pure and Applied Mathematics, Vol. XI Interscience Publishers, a division of John Wiley & Sons, New York-London 1962 pp 545–547
class sage.categories.finite_dimensional_algebras_with_basis.FiniteDimensionalAlgebrasWithBasis(base_category)

Bases: sage.categories.category_with_axiom.CategoryWithAxiom_over_base_ring

The category of finite dimensional algebras with a distinguished basis.

EXAMPLES:

sage: C = FiniteDimensionalAlgebrasWithBasis(QQ); C
Category of finite dimensional algebras with basis over Rational Field
sage: C.super_categories()
[Category of algebras with basis over Rational Field,
 Category of finite dimensional modules with basis over Rational Field]
sage: C.example()
An example of a finite dimensional algebra with basis:
the path algebra of the Kronecker quiver
(containing the arrows a:x->y and b:x->y) over Rational Field

TESTS:

sage: TestSuite(C).run()
sage: C is Algebras(QQ).FiniteDimensional().WithBasis()
True
sage: C is Algebras(QQ).WithBasis().FiniteDimensional()
True
class ElementMethods
on_left_matrix(base_ring=None, action=<built-in function mul>, side='left')

Return the matrix of the action of self on the algebra.

INPUT:

  • base_ring – the base ring for the matrix to be constructed
  • action – a bivariate function (default: operator.mul())
  • side – ‘left’ or ‘right’ (default: ‘left’)

EXAMPLES:

sage: QS3 = SymmetricGroupAlgebra(QQ, 3)
sage: a = QS3([2,1,3])
sage: a.to_matrix(side='left')
[0 0 1 0 0 0]
[0 0 0 0 1 0]
[1 0 0 0 0 0]
[0 0 0 0 0 1]
[0 1 0 0 0 0]
[0 0 0 1 0 0]
sage: a.to_matrix(side='right')
[0 0 1 0 0 0]
[0 0 0 1 0 0]
[1 0 0 0 0 0]
[0 1 0 0 0 0]
[0 0 0 0 0 1]
[0 0 0 0 1 0]
sage: a.to_matrix(base_ring=RDF, side="left")
[0.0 0.0 1.0 0.0 0.0 0.0]
[0.0 0.0 0.0 0.0 1.0 0.0]
[1.0 0.0 0.0 0.0 0.0 0.0]
[0.0 0.0 0.0 0.0 0.0 1.0]
[0.0 1.0 0.0 0.0 0.0 0.0]
[0.0 0.0 0.0 1.0 0.0 0.0]

AUTHORS: Mike Hansen, ...

to_matrix(base_ring=None, action=<built-in function mul>, side='left')

Return the matrix of the action of self on the algebra.

INPUT:

  • base_ring – the base ring for the matrix to be constructed
  • action – a bivariate function (default: operator.mul())
  • side – ‘left’ or ‘right’ (default: ‘left’)

EXAMPLES:

sage: QS3 = SymmetricGroupAlgebra(QQ, 3)
sage: a = QS3([2,1,3])
sage: a.to_matrix(side='left')
[0 0 1 0 0 0]
[0 0 0 0 1 0]
[1 0 0 0 0 0]
[0 0 0 0 0 1]
[0 1 0 0 0 0]
[0 0 0 1 0 0]
sage: a.to_matrix(side='right')
[0 0 1 0 0 0]
[0 0 0 1 0 0]
[1 0 0 0 0 0]
[0 1 0 0 0 0]
[0 0 0 0 0 1]
[0 0 0 0 1 0]
sage: a.to_matrix(base_ring=RDF, side="left")
[0.0 0.0 1.0 0.0 0.0 0.0]
[0.0 0.0 0.0 0.0 1.0 0.0]
[1.0 0.0 0.0 0.0 0.0 0.0]
[0.0 0.0 0.0 0.0 0.0 1.0]
[0.0 1.0 0.0 0.0 0.0 0.0]
[0.0 0.0 0.0 1.0 0.0 0.0]

AUTHORS: Mike Hansen, ...

class FiniteDimensionalAlgebrasWithBasis.ParentMethods
cartan_invariants_matrix()

Return the Cartan invariants matrix of the algebra.

OUTPUT: a matrix of non negative integers

Let A be this finite dimensional algebra and (S_i)_{i\in I} be representatives of the right simple modules of A. Note that their adjoints S_i^* are representatives of the left simple modules.

Let (P^L_i)_{i\in I} and (P^R_i)_{i\in I} be respectively representatives of the corresponding indecomposable projective left and right modules of A. In particular, we assume that the indexing is consistent so that S_i^*=\operatorname{top} P^L_i and S_i=\operatorname{top} P^R_i.

The Cartan invariant matrix (C_{i,j})_{i,j\in I} is a matrix of non negative integers that encodes much of the representation theory of A; namely:

  • C_{i,j} counts how many times S_i^*\otimes S_j appears as composition factor of A seen as a bimodule over itself;
  • C_{i,j}=\dim Hom_A(P^R_j, P^R_i);
  • C_{i,j} counts how many times S_j appears as composition factor of P^R_i;
  • C_{i,j}=\dim Hom_A(P^L_i, P^L_j);
  • C_{i,j} counts how many times S_i^* appears as composition factor of P^L_j.

In the commutative case, the Cartan invariant matrix is diagonal. In the context of solving systems of multivariate polynomial equations of dimension zero, A is the quotient of the polynomial ring by the ideal generated by the equations, the simple modules correspond to the roots, and the numbers C_{i,i} give the multiplicities of those roots.

Note

For simplicity, the current implementation, assumes that the index set I is of the form \{0,\dots,n-1\}. Better indexations will be possible in the future.

ALGORITHM:

The Cartan invariant matrix of A is computed from the dimension of the summands of its peirce decomposition.

EXAMPLES:

For a semisimple algebra, in particular for group algebras in chararacteristic zero, the Cartan invariants matrix is the identity:

sage: A3 = SymmetricGroup(3).algebra(QQ)
sage: A3.cartan_invariants_matrix()
[1 0 0]
[0 1 0]
[0 0 1]

For the path algebra of a quiver, the Cartan invariants matrix counts the number of paths between two vertices:

sage: A = Algebras(QQ).FiniteDimensional().WithBasis().example()
sage: A.cartan_invariants_matrix()
[1 2]
[0 1]

In the commutative case, the Cartan invariant matrix is diagonal:

sage: Z12 = Monoids().Finite().example(); Z12
An example of a finite multiplicative monoid: the integers modulo 12
sage: A = Z12.algebra(QQ)
sage: A.cartan_invariants_matrix()
[1 0 0 0 0 0 0 0 0]
[0 1 0 0 0 0 0 0 0]
[0 0 2 0 0 0 0 0 0]
[0 0 0 1 0 0 0 0 0]
[0 0 0 0 2 0 0 0 0]
[0 0 0 0 0 1 0 0 0]
[0 0 0 0 0 0 1 0 0]
[0 0 0 0 0 0 0 2 0]
[0 0 0 0 0 0 0 0 1]

With the algebra of the 0-Hecke monoid:

sage: from sage.monoids.hecke_monoid import HeckeMonoid
sage: A = HeckeMonoid(SymmetricGroup(4)).algebra(QQ)
sage: A.cartan_invariants_matrix()
[1 0 0 0 0 0 0 0]
[0 2 1 0 1 1 0 0]
[0 1 1 0 1 0 0 0]
[0 0 0 1 0 1 1 0]
[0 1 1 0 1 0 0 0]
[0 1 0 1 0 2 1 0]
[0 0 0 1 0 1 1 0]
[0 0 0 0 0 0 0 1]
center()

Return the center of self.

See also

center_basis()

EXAMPLES:

sage: A = Algebras(QQ).FiniteDimensional().WithBasis().example(); A
An example of a finite dimensional algebra with basis:
the path algebra of the Kronecker quiver
(containing the arrows a:x->y and b:x->y) over Rational Field
sage: center = A.center(); center
Center of An example of a finite dimensional algebra with basis:
the path algebra of the Kronecker quiver
(containing the arrows a:x->y and b:x->y) over Rational Field
sage: center in Algebras(QQ).WithBasis().FiniteDimensional().Commutative()
True
sage: center.dimension()
1
sage: center.basis()
Finite family {0: B[0]}
sage: center.ambient() is A
True
sage: [c.lift() for c in center.basis()]
[x + y]

The center of a semisimple algebra is semisimple:

sage: DihedralGroup(6).algebra(QQ).center() in Algebras(QQ).Semisimple()
True

Todo

  • Pickling by construction, as A.center()?
  • Lazy evaluation of _repr_

TESTS:

sage: TestSuite(center).run()
center_basis()

Return a basis of the center of self.

OUTPUT:

  • a list of elements of self.

See also

center()

EXAMPLES:

sage: A = Algebras(QQ).FiniteDimensional().WithBasis().example(); A
An example of a finite dimensional algebra with basis:
the path algebra of the Kronecker quiver
(containing the arrows a:x->y and b:x->y) over Rational Field
sage: A.center_basis()
[x + y]
idempotent_lift(x)

Lift an idempotent of the semisimple quotient into an idempotent of self.

Let A be this finite dimensional algebra and \pi be the projection A \rightarrow \overline{A} on its semisimple quotient. Let \overline{x} be an idempotent of \overline A, and x any lift thereof in A. This returns an idempotent e of A such that \pi(e)=\pi(x) and e is a polynomial in x.

INPUT:

  • x – an element of A that projects on an idempotent \overline x of the semisimple quotient of A. Alternatively one may give as input the idempotent \overline{x}, in which case some lift thereof will be taken for x.

OUTPUT: the idempotent e of self

ALGORITHM:

Iterate the formula 1 - (1 - x^2)^2 until having an idempotent.

See [CR62] for correctness and termination proofs.

EXAMPLES:

sage: A = Algebras(QQ).FiniteDimensional().WithBasis().example()
sage: S = A.semisimple_quotient()
sage: A.idempotent_lift(S.basis()['x'])
x
sage: A.idempotent_lift(A.basis()['y'])
y

Todo

Add some non trivial example

is_identity_decomposition_into_orthogonal_idempotents(l)

Return whether l is a decomposition of the identity into orthogonal idempotents.

INPUT:

  • l – a list or iterable of elements of self

EXAMPLES:

sage: A = FiniteDimensionalAlgebrasWithBasis(QQ).example(); A
An example of a finite dimensional algebra with basis:
the path algebra of the Kronecker quiver
(containing the arrows a:x->y and b:x->y) over Rational Field

sage: x,y,a,b = A.algebra_generators(); x,y,a,b
(x, y, a, b)

sage: A.is_identity_decomposition_into_orthogonal_idempotents([A.one()])
True
sage: A.is_identity_decomposition_into_orthogonal_idempotents([x,y])
True
sage: A.is_identity_decomposition_into_orthogonal_idempotents([x+a, y-a])
True

Here the idempotents do not sum up to 1:

sage: A.is_identity_decomposition_into_orthogonal_idempotents([x])
False

Here 1+x and -x are neither idempotent nor orthogonal:

sage: A.is_identity_decomposition_into_orthogonal_idempotents([1+x,-x])
False

With the algebra of the 0-Hecke monoid:

sage: from sage.monoids.hecke_monoid import HeckeMonoid
sage: A = HeckeMonoid(SymmetricGroup(4)).algebra(QQ)
sage: idempotents = A.orthogonal_idempotents_central_mod_radical()
sage: A.is_identity_decomposition_into_orthogonal_idempotents(idempotents)
True

Todo

Add examples of elements that are orthogonal and sum to the identity yet are not idempotent, and reciprocally.

isotypic_projective_modules(side='left')

Return the isotypic projective side self-modules.

Let P_i be representatives of the indecomposable projective side-modules of this finite dimensional algebra A, and S_i be the associated simple modules.

The regular side representation of A can be decomposed as a direct sum A = \bigoplus_i Q_i where each Q_i is an isotypic projective module; namely Q_i is the direct sum of \dim S_i copies of the indecomposable projective module P_i. This decomposition is not unique.

The isotypic projective modules are constructed as Q_i=e_iA, where the (e_i)_i is the decomposition of the identity into orthogonal idempotents obtained by lifting the central orthogonal idempotents of the semisimple quotient of A.

INPUT:

  • side – ‘left’ or ‘right’ (default: ‘left’)

OUTPUT: a list of subspaces of self.

EXAMPLES:

sage: A = Algebras(QQ).FiniteDimensional().WithBasis().example(); A
An example of a finite dimensional algebra with basis:
the path algebra of the Kronecker quiver
(containing the arrows a:x->y and b:x->y) over Rational Field
sage: Q = A.isotypic_projective_modules(side="left"); Q
[Free module generated by {0} over Rational Field,
 Free module generated by {0, 1, 2} over Rational Field]
sage: [[x.lift() for x in Qi.basis()]
....:  for Qi in Q]
[[x],
 [y, a, b]]

We check that the sum of the dimensions of the isotypic projective modules is the dimension of self:

sage: sum([Qi.dimension() for Qi in Q]) == A.dimension()
True
orthogonal_idempotents_central_mod_radical()

Return a family of orthogonal idempotents of self that project on the central orthogonal idempotents of the semisimple quotient.

OUTPUT:

  • a list of orthogonal idempotents obtained by lifting the central orthogonal idempotents of the semisimple quotient.

ALGORITHM:

The orthogonal idempotents of A are obtained by lifting the central orthogonal idempotents of the semisimple quotient \overline{A}.

Namely, let (\overline{f_i}) be the central orthogonal idempotents of the semisimple quotient of A. We recursively construct orthogonal idempotents of A by the following procedure: assuming (f_i)_{i < n} is a set of already constructed orthogonal idempotent, we construct f_k by idempotent lifting of (1-f) g (1-f), where g is any lift of \overline{e_k} and f=\sum_{i<k} f_i.

See [CR62] for correctness and termination proofs.

See also

  • Algebras.SemiSimple.FiniteDimensional.WithBasis.ParentMethods.central_orthogonal_idempotents()
  • idempotent_lift()

EXAMPLES:

sage: A = Algebras(QQ).FiniteDimensional().WithBasis().example(); A
An example of a finite dimensional algebra with basis:
the path algebra of the Kronecker quiver
(containing the arrows a:x->y and b:x->y) over Rational Field
sage: A.orthogonal_idempotents_central_mod_radical()
[x, y]
sage: Z12 = Monoids().Finite().example(); Z12
An example of a finite multiplicative monoid: the integers modulo 12
sage: A = Z12.algebra(QQ)
sage: idempotents = A.orthogonal_idempotents_central_mod_radical()
sage: sorted(idempotents, key=str)
[-1/2*B[3] + 1/2*B[9],
 -1/2*B[8] + 1/2*B[4],
 -B[0] + 1/2*B[3] + 1/2*B[9],
 -B[0] + 1/2*B[4] + 1/2*B[8],
 1/4*B[1] + 1/2*B[3] + 1/4*B[5] - 1/4*B[7] - 1/2*B[9] - 1/4*B[11],
 1/4*B[1] + 1/4*B[11] - 1/4*B[5] - 1/4*B[7],
 1/4*B[1] - 1/2*B[4] - 1/4*B[5] + 1/4*B[7] + 1/2*B[8] - 1/4*B[11],
 B[0],
 B[0] + 1/4*B[1] - 1/2*B[3] - 1/2*B[4] + 1/4*B[5] + 1/4*B[7] - 1/2*B[8] - 1/2*B[9] + 1/4*B[11]]
sage: sum(idempotents) == 1
True
sage: all(e*e == e for e in idempotents)
True
sage: all(e*f == 0 and f*e == 0 for e in idempotents for f in idempotents if e != f)
True

This is best tested with:

sage: A.is_identity_decomposition_into_orthogonal_idempotents(idempotents)
True

We construct orthogonal idempotents for the algebra of the 0-Hecke monoid:

sage: from sage.monoids.hecke_monoid import HeckeMonoid
sage: A = HeckeMonoid(SymmetricGroup(4)).algebra(QQ)
sage: idempotents = A.orthogonal_idempotents_central_mod_radical()
sage: A.is_identity_decomposition_into_orthogonal_idempotents(idempotents)
True
peirce_decomposition(idempotents=None, check=True)

Return a Peirce decomposition of self.

Let (e_i)_i be a collection of orthogonal idempotents of A with sum 1. The Peirce decomposition of A is the decomposition of A into the direct sum of the subspaces e_i A e_j.

With the default collection of orthogonal idempotents, one has

\dim e_i A e_j = C_{i,j} \dim S_i \dim S_j

where (S_i)_i are the simple modules of A and C_{i,j} is the Cartan invariants matrix.

INPUT:

  • idempotents – a list of orthogonal idempotents (e_i)_{i=0,\ldots,n} of the algebra that sum to 1 (default: the idempotents returned by orthogonal_idempotents_central_mod_radical())
  • check – (default:True) whether to check that the idempotents are indeed orthogonal

OUTPUT:

A list of lists l such that l[i][j] is the subspace e_i A e_j.

EXAMPLES:

sage: A = Algebras(QQ).FiniteDimensional().WithBasis().example(); A
An example of a finite dimensional algebra with basis:
the path algebra of the Kronecker quiver
(containing the arrows a:x->y and b:x->y) over Rational Field
sage: A.orthogonal_idempotents_central_mod_radical()
[x, y]
sage: decomposition = A.peirce_decomposition(); decomposition
[[Free module generated by {0} over Rational Field,
  Free module generated by {0, 1} over Rational Field],
 [Free module generated by {} over Rational Field,
  Free module generated by {0} over Rational Field]]
sage: [ [[x.lift() for x in decomposition[i][j].basis()]
....:    for j in range(2)]
....:   for i in range(2)]
[[[x], [a, b]],
 [[], [y]]]

We recover that the group algebra of the symmetric group S_4 is a block matrix algebra:

sage: A = SymmetricGroup(4).algebra(QQ)
sage: decomposition = A.peirce_decomposition()   # long time
sage: [[decomposition[i][j].dimension()          # long time (4s)
....:   for j in range(len(decomposition))]
....:  for i in range(len(decomposition))]
[[1, 0, 0, 0, 0],
 [0, 9, 0, 0, 0],
 [0, 0, 4, 0, 0],
 [0, 0, 0, 9, 0],
 [0, 0, 0, 0, 1]]

The dimension of each block is d^2, where d is the dimension of the corresponding simple module of S_4. The latter are given by:

sage: [p.standard_tableaux().cardinality() for p in Partitions(4)]
[1, 3, 2, 3, 1]
peirce_summand(ei, ej)

Return the Peirce decomposition summand e_i A e_j.

INPUT:

  • self – an algebra A
  • ei, ej – two idempotents of A

OUTPUT: e_i A e_j, as a subspace of A.

EXAMPLES:

sage: A = Algebras(QQ).FiniteDimensional().WithBasis().example()
sage: idemp = A.orthogonal_idempotents_central_mod_radical()
sage: A.peirce_summand(idemp[0], idemp[1])
Free module generated by {0, 1} over Rational Field
sage: A.peirce_summand(idemp[1], idemp[0])
Free module generated by {} over Rational Field

We recover the 2\times2 block of \QQ[S_4] corresponding to the unique simple module of dimension 2 of the symmetric group S_4:

sage: A4 = SymmetricGroup(4).algebra(QQ)
sage: e = A4.central_orthogonal_idempotents()[2]
sage: A4.peirce_summand(e, e)
Free module generated by {0, 1, 2, 3} over Rational Field
principal_ideal(a, side='left')

Construct the side principal ideal generated by a.

EXAMPLES:

In order to highlight the difference between left and right principal ideals, our first example deals with a non commutative algebra:

sage: A = Algebras(QQ).FiniteDimensional().WithBasis().example(); A
An example of a finite dimensional algebra with basis:
the path algebra of the Kronecker quiver
(containing the arrows a:x->y and b:x->y) over Rational Field
sage: x, y, a, b = A.basis()

In this algebra, multiplication on the right by x annihilates all basis elements but x:

sage: x*x, y*x, a*x, b*x
(x, 0, 0, 0)

so the left ideal generated by x is one-dimensional:

sage: Ax = A.principal_ideal(x, side='left'); Ax
Free module generated by {0} over Rational Field
sage: [B.lift() for B in Ax.basis()]
[x]

Multiplication on the left by x annihilates only x and fixes the other basis elements:

sage: x*x, x*y, x*a, x*b
(x, 0, a, b)

so the right ideal generated by x is 3-dimensional:

sage: xA = A.principal_ideal(x, side='right'); xA
Free module generated by {0, 1, 2} over Rational Field
sage: [B.lift() for B in xA.basis()]
[x, a, b]

See also

radical()

Return the Jacobson radical of self.

This uses radical_basis(), whose default implementation handles algebras over fields of characteristic zero or fields of characteristic p in which we can compute x^{1/p}.

EXAMPLES:

sage: A = Algebras(QQ).FiniteDimensional().WithBasis().example(); A
An example of a finite dimensional algebra with basis:
the path algebra of the Kronecker quiver
(containing the arrows a:x->y and b:x->y) over Rational Field
sage: radical = A.radical(); radical
Radical of An example of a finite dimensional algebra with basis:
the path algebra of the Kronecker quiver
(containing the arrows a:x->y and b:x->y) over Rational Field

The radical is an ideal of A, and thus a finite dimensional non unital associative algebra:

sage: from sage.categories.associative_algebras import AssociativeAlgebras
sage: radical in AssociativeAlgebras(QQ).WithBasis().FiniteDimensional()
True
sage: radical in Algebras(QQ)
False

sage: radical.dimension()
2
sage: radical.basis()
Finite family {0: B[0], 1: B[1]}
sage: radical.ambient() is A
True
sage: [c.lift() for c in radical.basis()]
[a, b]

Todo

  • Tell Sage that the radical is in fact an ideal;
  • Pickling by construction, as A.center();
  • Lazy evaluation of _repr_.

TESTS:

sage: TestSuite(radical).run()
radical_basis()

Return a basis of the Jacobson radical of this algebra.

Note

This implementation handles algebras over fields of characteristic zero (using Dixon’s lemma) or fields of characteristic p in which we can compute x^{1/p} [FR85], [Eb89].

REFERENCES:

[Eb89] Eberly, Wayne. “Computations for algebras and group representations.” Ph.D. Thesis, University of Toronto, 1989.

[FR85] Friedl, Katalin, and Lajos Rónyai. “Polynomial time solutions of some problems of computational algebra.” Proceedings of the seventeenth annual ACM symposium on Theory of computing. ACM, 1985.

OUTPUT:

  • a list of elements of self.

EXAMPLES:

sage: A = Algebras(QQ).FiniteDimensional().WithBasis().example(); A
An example of a finite dimensional algebra with basis:
the path algebra of the Kronecker quiver
(containing the arrows a:x->y and b:x->y) over Rational Field
sage: A.radical_basis()
[a, b]

We construct the group algebra of the Klein Four-Group over the rationals:

sage: A = KleinFourGroup().algebra(QQ)

This algebra belongs to the category of finite dimensional algebras over the rationals:

sage: A in Algebras(QQ).FiniteDimensional().WithBasis()
True

Since the field has characteristic 0, Maschke’s Theorem tells us that the group algebra is semisimple. So its radical is the zero ideal:

sage: A in Algebras(QQ).Semisimple()
True
sage: A.radical_basis()
[]

Let’s work instead over a field of characteristic 2:

sage: A = KleinFourGroup().algebra(GF(2))
sage: A in Algebras(GF(2)).Semisimple()
False
sage: A.radical_basis()
[B[()] + B[(1,2)(3,4)], B[(3,4)] + B[(1,2)(3,4)], B[(1,2)] + B[(1,2)(3,4)]]

We now implement the algebra A = K[x] / x^p-1, where K is a finite field of characteristic p, and check its radical; alas, we currently need to wrap A to make it a proper ModulesWithBasis:

sage: class AnAlgebra(CombinatorialFreeModule):
....:     def __init__(self, F):
....:         R.<x> = PolynomialRing(F)
....:         I = R.ideal(x**F.characteristic()-F.one())
....:         self._xbar = R.quotient(I).gen()
....:         basis_keys = [self._xbar**i for i in range(F.characteristic())]
....:         CombinatorialFreeModule.__init__(self, F, basis_keys,
....:                 category=Algebras(F).FiniteDimensional().WithBasis())
....:     def one(self):
....:         return self.basis()[self.base_ring().one()]
....:     def product_on_basis(self, w1, w2):
....:         return self.from_vector(vector(w1*w2))
sage: AnAlgebra(GF(3)).radical_basis()
[B[1] + 2*B[xbar^2], B[xbar] + 2*B[xbar^2]]
sage: AnAlgebra(GF(16,'a')).radical_basis()
[B[1] + B[xbar]]
sage: AnAlgebra(GF(49,'a')).radical_basis()
[B[1] + 6*B[xbar^6], B[xbar] + 6*B[xbar^6], B[xbar^2] + 6*B[xbar^6],
 B[xbar^3] + 6*B[xbar^6], B[xbar^4] + 6*B[xbar^6], B[xbar^5] + 6*B[xbar^6]]

TESTS:

sage: A = KleinFourGroup().algebra(GF(2))
sage: A.radical_basis()
[B[()] + B[(1,2)(3,4)], B[(3,4)] + B[(1,2)(3,4)], B[(1,2)] + B[(1,2)(3,4)]]

sage: A = KleinFourGroup().algebra(QQ, category=Monoids())
sage: A.radical_basis.__module__
'sage.categories.finite_dimensional_algebras_with_basis'
sage: A.radical_basis()
[]
semisimple_quotient()

Return the semisimple quotient of self.

This is the quotient of self by its radical.

See also

radical()

EXAMPLES:

sage: A = Algebras(QQ).FiniteDimensional().WithBasis().example(); A
An example of a finite dimensional algebra with basis:
the path algebra of the Kronecker quiver
(containing the arrows a:x->y and b:x->y) over Rational Field
sage: a,b,x,y = sorted(A.basis())
sage: S = A.semisimple_quotient(); S
Semisimple quotient of An example of a finite dimensional algebra with basis:
the path algebra of the Kronecker quiver
(containing the arrows a:x->y and b:x->y) over Rational Field
sage: S in Algebras(QQ).Semisimple()
True
sage: S.basis()
Finite family {'y': B['y'], 'x': B['x']}
sage: xs,ys = sorted(S.basis())
sage: (xs + ys) * xs
B['x']

Sanity check: the semisimple quotient of the n-th descent algebra of the symmetric group is of dimension the number of partitions of n:

sage: [ DescentAlgebra(QQ,n).B().semisimple_quotient().dimension()
....:   for n in range(6) ]
[1, 1, 2, 3, 5, 7]
sage: [Partitions(n).cardinality() for n in range(10)]
[1, 1, 2, 3, 5, 7, 11, 15, 22, 30]

Todo

  • Pickling by construction, as A.semisimple_quotient()?
  • Lazy evaluation of _repr_

TESTS:

sage: TestSuite(S).run()