### Navigation

- index
- modules |
- next |
- previous |
- Algebras »

# 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`.

TESTS:

    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

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

  Bases: `sage.structure.unique_representation.UniqueRepresentation`, `sage.rings.ring.Algebra`, `object`

  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

  TEST:

      sage: TestSuite(H2).run()

  `Element`

    alias of `FreeAlgebraQuotientElement`

  `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

### Navigation

- index
- modules |
- next |
- previous |
- Algebras »