# Finite dimensional free algebra quotients¶

REMARK:

This implementation only works for finite dimensional quotients, since a list of basis monomials and the multiplication matrices need to be explicitly provided.

The homogeneous part of a quotient of a free algebra over a field by a finitely generated homogeneous twosided ideal is available in a different implementation. See free_algebra_letterplace and quotient_ring.

sage: n = 2
sage: A = FreeAlgebra(QQ,n,'x')
sage: F = A.monoid()
sage: i, j = F.gens()
sage: mons = [ F(1), i, j, i*j ]
sage: r = len(mons)
sage: M = MatrixSpace(QQ,r)
sage: mats = [M([0,1,0,0, -1,0,0,0, 0,0,0,-1, 0,0,1,0]), M([0,0,1,0, 0,0,0,1, -1,0,0,0, 0,-1,0,0]) ]
sage: H2.<i,j> = A.quotient(mons,mats)
sage: H2 == loads(dumps(H2))
True
sage: i == loads(dumps(i))
True


Test comparison by equality:

sage: HQ = sage.algebras.free_algebra_quotient.hamilton_quatalg(QQ)[0]
sage: HZ = sage.algebras.free_algebra_quotient.hamilton_quatalg(ZZ)[0]
sage: HQ == HQ
True
sage: HQ == HZ
False
sage: HZ == QQ
False

class sage.algebras.free_algebra_quotient.FreeAlgebraQuotient(A, mons, mats, names)

Returns a quotient algebra defined via the action of a free algebra A on a (finitely generated) free module. The input for the quotient algebra is a list of monomials (in the underlying monoid for A) which form a free basis for the module of A, and a list of matrices, which give the action of the free generators of A on this monomial basis.

EXAMPLES:

Quaternion algebra defined in terms of three generators:

sage: n = 3
sage: A = FreeAlgebra(QQ,n,'i')
sage: F = A.monoid()
sage: i, j, k = F.gens()
sage: mons = [ F(1), i, j, k ]
sage: M = MatrixSpace(QQ,4)
sage: mats = [M([0,1,0,0, -1,0,0,0, 0,0,0,-1, 0,0,1,0]),  M([0,0,1,0, 0,0,0,1, -1,0,0,0, 0,-1,0,0]),  M([0,0,0,1, 0,0,-1,0, 0,1,0,0, -1,0,0,0]) ]
sage: H3.<i,j,k> = FreeAlgebraQuotient(A,mons,mats)
sage: x = 1 + i + j + k
sage: x
1 + i + j + k
sage: x**128
-170141183460469231731687303715884105728 + 170141183460469231731687303715884105728*i + 170141183460469231731687303715884105728*j + 170141183460469231731687303715884105728*k


Same algebra defined in terms of two generators, with some penalty on already slow arithmetic.

sage: n = 2
sage: A = FreeAlgebra(QQ,n,'x')
sage: F = A.monoid()
sage: i, j = F.gens()
sage: mons = [ F(1), i, j, i*j ]
sage: r = len(mons)
sage: M = MatrixSpace(QQ,r)
sage: mats = [M([0,1,0,0, -1,0,0,0, 0,0,0,-1, 0,0,1,0]), M([0,0,1,0, 0,0,0,1, -1,0,0,0, 0,-1,0,0]) ]
sage: H2.<i,j> = A.quotient(mons,mats)
sage: k = i*j
sage: x = 1 + i + j + k
sage: x
1 + i + j + i*j
sage: x**128
-170141183460469231731687303715884105728 + 170141183460469231731687303715884105728*i + 170141183460469231731687303715884105728*j + 170141183460469231731687303715884105728*i*j

Element
dimension()

The rank of the algebra (as a free module).

EXAMPLES:

sage: sage.algebras.free_algebra_quotient.hamilton_quatalg(QQ)[0].dimension()
4

free_algebra()

The free algebra generating the algebra.

EXAMPLES:

sage: sage.algebras.free_algebra_quotient.hamilton_quatalg(QQ)[0].free_algebra()
Free Algebra on 3 generators (i0, i1, i2) over Rational Field

gen(i)

The i-th generator of the algebra.

EXAMPLES:

sage: H, (i,j,k) = sage.algebras.free_algebra_quotient.hamilton_quatalg(QQ)
sage: H.gen(0)
i
sage: H.gen(2)
k


An IndexError is raised if an invalid generator is requested:

sage: H.gen(3)
Traceback (most recent call last):
...
IndexError: Argument i (= 3) must be between 0 and 2.


Negative indexing into the generators is not supported:

sage: H.gen(-1)
Traceback (most recent call last):
...
IndexError: Argument i (= -1) must be between 0 and 2.

matrix_action()

EXAMPLES:

sage: sage.algebras.free_algebra_quotient.hamilton_quatalg(QQ)[0].matrix_action()
(
[ 0  1  0  0]  [ 0  0  1  0]  [ 0  0  0  1]
[-1  0  0  0]  [ 0  0  0  1]  [ 0  0 -1  0]
[ 0  0  0 -1]  [-1  0  0  0]  [ 0  1  0  0]
[ 0  0  1  0], [ 0 -1  0  0], [-1  0  0  0]
)

module()

The free module of the algebra.

sage: H = sage.algebras.free_algebra_quotient.hamilton_quatalg(QQ)[0]; H Free algebra quotient on 3 generators (‘i’, ‘j’, ‘k’) and dimension 4 over Rational Field sage: H.module() Vector space of dimension 4 over Rational Field
monoid()
The free monoid of generators of the algebra.

EXAMPLES:

sage: sage.algebras.free_algebra_quotient.hamilton_quatalg(QQ)[0].monoid()
Free monoid on 3 generators (i0, i1, i2)

monomial_basis()

The free monoid of generators of the algebra as elements of a free monoid.

EXAMPLES:

sage: sage.algebras.free_algebra_quotient.hamilton_quatalg(QQ)[0].monomial_basis()
(1, i0, i1, i2)

ngens()

The number of generators of the algebra.

EXAMPLES:

sage: sage.algebras.free_algebra_quotient.hamilton_quatalg(QQ)[0].ngens()
3

rank()

The rank of the algebra (as a free module).

EXAMPLES:

sage: sage.algebras.free_algebra_quotient.hamilton_quatalg(QQ)[0].rank()
4

sage.algebras.free_algebra_quotient.hamilton_quatalg(R)

Hamilton quaternion algebra over the commutative ring R, constructed as a free algebra quotient.

INPUT:
• R – a commutative ring
OUTPUT:
• Q – quaternion algebra
• gens – generators for Q

EXAMPLES:

sage: H, (i,j,k) = sage.algebras.free_algebra_quotient.hamilton_quatalg(ZZ)
sage: H
Free algebra quotient on 3 generators ('i', 'j', 'k') and dimension 4 over Integer Ring
sage: i^2
-1
sage: i in H
True


Note that there is another vastly more efficient models for quaternion algebras in Sage; the one here is mainly for testing purposes:

sage: R.<i,j,k> = QuaternionAlgebra(QQ,-1,-1)  # much fast than the above