Matrix Group Elements#

EXAMPLES:

sage: F = GF(3); MS = MatrixSpace(F, 2, 2)                                          # optional - sage.rings.finite_rings
sage: gens = [MS([[1,0], [0,1]]), MS([[1,1], [0,1]])]                               # optional - sage.rings.finite_rings
sage: G = MatrixGroup(gens); G                                                      # optional - sage.rings.finite_rings
Matrix group over Finite Field of size 3 with 2 generators (
[1 0]  [1 1]
[0 1], [0 1] )
sage: g = G([[1,1], [0,1]])                                                         # optional - sage.rings.finite_rings
sage: h = G([[1,2], [0,1]])                                                         # optional - sage.rings.finite_rings
sage: g*h                                                                           # optional - sage.rings.finite_rings
[1 0]
[0 1]

You cannot add two matrices, since this is not a group operation. You can coerce matrices back to the matrix space and add them there:

sage: g + h                                                                         # optional - sage.rings.finite_rings
Traceback (most recent call last):
...
TypeError: unsupported operand parent(s) for +:
'Matrix group over Finite Field of size 3 with 2 generators (
[1 0]  [1 1]
[0 1], [0 1]
)' and
'Matrix group over Finite Field of size 3 with 2 generators (
[1 0]  [1 1]
[0 1], [0 1]
)'

sage: g.matrix() + h.matrix()                                                       # optional - sage.rings.finite_rings
[2 0]
[0 2]

Similarly, you cannot multiply group elements by scalars but you can do it with the underlying matrices:

sage: 2*g                                                                           # optional - sage.rings.finite_rings
Traceback (most recent call last):
...
TypeError: unsupported operand parent(s) for *: 'Integer Ring'
and 'Matrix group over Finite Field of size 3 with 2 generators (
[1 0]  [1 1]
[0 1], [0 1] )'

AUTHORS:

  • David Joyner (2006-05): initial version David Joyner

  • David Joyner (2006-05): various modifications to address William Stein’s TODO’s.

  • William Stein (2006-12-09): many revisions.

  • Volker Braun (2013-1) port to new Parent, libGAP.

  • Travis Scrimshaw (2016-01): reworks class hierarchy in order to cythonize

class sage.groups.matrix_gps.group_element.MatrixGroupElement_generic#

Bases: MultiplicativeGroupElement

Element of a matrix group over a generic ring.

The group elements are implemented as Sage matrices.

INPUT:

  • M – a matrix

  • parent – the parent

  • check – bool (default: True); if True, then do some type checking

  • convert – bool (default: True); if True, then convert M to the right matrix space

EXAMPLES:

sage: W = CoxeterGroup(['A',3], base_ring=ZZ)                                   # optional - sage.combinat
sage: g = W.an_element(); g                                                     # optional - sage.combinat
[ 0  0 -1]
[ 1  0 -1]
[ 0  1 -1]
inverse()#

Return the inverse group element

OUTPUT: A matrix group element.

EXAMPLES:

sage: W = CoxeterGroup(['A',3], base_ring=ZZ)                               # optional - sage.combinat
sage: g = W.an_element()                                                    # optional - sage.combinat
sage: ~g                                                                    # optional - sage.combinat
[-1  1  0]
[-1  0  1]
[-1  0  0]
sage: g * ~g == W.one()                                                     # optional - sage.combinat
True
sage: ~g * g == W.one()                                                     # optional - sage.combinat
True

sage: W = CoxeterGroup(['B',3])                                             # optional - sage.combinat sage.rings.number_field
sage: W.base_ring()                                                         # optional - sage.combinat sage.rings.number_field
Number Field in a with defining polynomial x^2 - 2 with a = 1.414213562373095?
sage: g = W.an_element()                                                    # optional - sage.combinat sage.rings.number_field
sage: ~g                                                                    # optional - sage.combinat sage.rings.number_field
[-1  1  0]
[-1  0  a]
[-a  0  1]
is_one()#

Return whether self is the identity of the group.

EXAMPLES:

sage: W = CoxeterGroup(['A',3])                                             # optional - sage.combinat
sage: g = W.gen(0)                                                          # optional - sage.combinat
sage: g.is_one()                                                            # optional - sage.combinat
False

sage: W.an_element().is_one()                                               # optional - sage.combinat
False
sage: W.one().is_one()                                                      # optional - sage.combinat
True
list()#

Return list representation of this matrix.

EXAMPLES:

sage: W = CoxeterGroup(['A',3], base_ring=ZZ)                               # optional - sage.combinat
sage: g = W.gen(0)                                                          # optional - sage.combinat
sage: g                                                                     # optional - sage.combinat
[-1  1  0]
[ 0  1  0]
[ 0  0  1]
sage: g.list()                                                              # optional - sage.combinat
[[-1, 1, 0], [0, 1, 0], [0, 0, 1]]
matrix()#

Obtain the usual matrix (as an element of a matrix space) associated to this matrix group element.

One reason to compute the associated matrix is that matrices support a huge range of functionality.

EXAMPLES:

sage: W = CoxeterGroup(['A',3], base_ring=ZZ)                               # optional - sage.combinat
sage: g = W.gen(0)                                                          # optional - sage.combinat
sage: g.matrix()                                                            # optional - sage.combinat
[-1  1  0]
[ 0  1  0]
[ 0  0  1]
sage: parent(g.matrix())                                                    # optional - sage.combinat
Full MatrixSpace of 3 by 3 dense matrices over Integer Ring

Matrices have extra functionality that matrix group elements do not have:

sage: g.matrix().charpoly('t')                                              # optional - sage.combinat
t^3 - t^2 - t + 1
sage.groups.matrix_gps.group_element.is_MatrixGroupElement(x)#

Test whether x is a matrix group element

INPUT:

  • x – anything.

OUTPUT: Boolean.

EXAMPLES:

sage: from sage.groups.matrix_gps.group_element import is_MatrixGroupElement
sage: is_MatrixGroupElement('helloooo')
False

sage: G = GL(2,3)                                                               # optional - sage.rings.finite_rings
sage: is_MatrixGroupElement(G.an_element())                                     # optional - sage.rings.finite_rings
True