# AlgebraPackage(R, A)¶

AlgebraPackage assembles a variety of useful functions for general algebras.

basis: Vector A -> Vector A if R has EuclideanDomain

`basis(va)` selects a basis from the elements of `va`.

basisOfCenter: () -> List A

`basisOfCenter()` returns a basis of the space of all `x` of `A` satisfying `commutator(x, a) = 0` and `associator(x, a, b) = associator(a, x, b) = associator(a, b, x) = 0` for all `a`, `b` in `A`.

basisOfCentroid: () -> List Matrix R

`basisOfCentroid()` returns a basis of the centroid, i.e. the endomorphism ring of `A` considered as `(A, A)`-bimodule.

basisOfCommutingElements: () -> List A

`basisOfCommutingElements()` returns a basis of the space of all `x` of `A` satisfying `0 = commutator(x, a)` for all `a` in `A`.

basisOfLeftAnnihilator: A -> List A

`basisOfLeftAnnihilator(a)` returns a basis of the space of all `x` of `A` satisfying `0 = x*a`.

basisOfLeftNucleus: () -> List A

`basisOfLeftNucleus()` returns a basis of the space of all `x` of `A` satisfying `0 = associator(x, a, b)` for all `a`, `b` in `A`.

basisOfLeftNucloid: () -> List Matrix R

`basisOfLeftNucloid()` returns a basis of the space of endomorphisms of `A` as right module. Note: left nucloid coincides with left nucleus if `A` has a unit.

basisOfMiddleNucleus: () -> List A

`basisOfMiddleNucleus()` returns a basis of the space of all `x` of `A` satisfying `0 = associator(a, x, b)` for all `a`, `b` in `A`.

basisOfNucleus: () -> List A

`basisOfNucleus()` returns a basis of the space of all `x` of `A` satisfying `associator(x, a, b) = associator(a, x, b) = associator(a, b, x) = 0` for all `a`, `b` in `A`.

basisOfRightAnnihilator: A -> List A

`basisOfRightAnnihilator(a)` returns a basis of the space of all `x` of `A` satisfying `0 = a*x`.

basisOfRightNucleus: () -> List A

`basisOfRightNucleus()` returns a basis of the space of all `x` of `A` satisfying `0 = associator(a, b, x)` for all `a`, `b` in `A`.

basisOfRightNucloid: () -> List Matrix R

`basisOfRightNucloid()` returns a basis of the space of endomorphisms of `A` as left module. Note: right nucloid coincides with right nucleus if `A` has a unit.

biRank: A -> NonNegativeInteger

`biRank(x)` determines the number of linearly independent elements in `x`, `x*bi`, `bi*x`, `bi*x*bj`, `i, j=1, ..., n`, where `b=[b1, ..., bn]` is a basis. Note: if `A` has a unit, then doubleRank, weakBiRank and biRank coincide.

doubleRank: A -> NonNegativeInteger

`doubleRank(x)` determines the number of linearly independent elements in `b1*x`, …, `x*bn`, where `b=[b1, ..., bn]` is a basis.

leftRank: A -> NonNegativeInteger

`leftRank(x)` determines the number of linearly independent elements in `x*b1`, …, `x*bn`, where `b=[b1, ..., bn]` is a basis.

`radicalOfLeftTraceForm()` returns basis for null space of `leftTraceMatrix()`, if the algebra is associative, alternative or a Jordan algebra, then this space equals the radical (maximal nil ideal) of the algebra.
`rightRank(x)` determines the number of linearly independent elements in `b1*x`, …, `bn*x`, where `b=[b1, ..., bn]` is a basis.
`weakBiRank(x)` determines the number of linearly independent elements in the `bi*x*bj`, `i, j=1, ..., n`, where `b=[b1, ..., bn]` is a basis.