Matrix group elements implemented in GAP#

class sage.groups.matrix_gps.group_element_gap.MatrixGroupElement_gap#

Bases: ElementLibGAP

Element of a matrix group over a generic ring.

The group elements are implemented as wrappers around libGAP matrices.

INPUT:

  • M – a matrix

  • parent – the parent

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

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

list()#

Return list representation of this matrix.

EXAMPLES:

sage: F = GF(3); MS = MatrixSpace(F,2,2)
sage: gens = [MS([[1,0],[0,1]]),MS([[1,1],[0,1]])]
sage: G = MatrixGroup(gens)
sage: g = G.0
sage: g
[1 0]
[0 1]
sage: g.list()
[[1, 0], [0, 1]]
matrix()#

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

EXAMPLES:

sage: F = GF(3); MS = MatrixSpace(F,2,2)
sage: gens = [MS([[1,0],[0,1]]),MS([[1,1],[0,1]])]
sage: G = MatrixGroup(gens)
sage: m = G.gen(0).matrix(); m
[1 0]
[0 1]
sage: m.parent()
Full MatrixSpace of 2 by 2 dense matrices over Finite Field of size 3

sage: k = GF(7); G = MatrixGroup([matrix(k,2,[1,1,0,1]), matrix(k,2,[1,0,0,2])])
sage: g = G.0
sage: g.matrix()
[1 1]
[0 1]
sage: parent(g.matrix())
Full MatrixSpace of 2 by 2 dense matrices over Finite Field of size 7

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

sage: g.matrix().charpoly('t')
t^2 + 5*t + 1
multiplicative_order()#

Return the order of this group element, which is the smallest positive integer \(n\) such that \(g^n = 1\), or +Infinity if no such integer exists.

EXAMPLES:

sage: k = GF(7)
sage: G = MatrixGroup([matrix(k,2,[1,1,0,1]), matrix(k,2,[1,0,0,2])]); G
Matrix group over Finite Field of size 7 with 2 generators (
[1 1]  [1 0]
[0 1], [0 2]
)
sage: G.order()
21
sage: G.gen(0).multiplicative_order(), G.gen(1).multiplicative_order()
(7, 3)

order is just an alias for multiplicative_order:

sage: G.gen(0).order(), G.gen(1).order()
(7, 3)

sage: k = QQ
sage: G = MatrixGroup([matrix(k,2,[1,1,0,1]), matrix(k,2,[1,0,0,2])]); G
Matrix group over Rational Field with 2 generators (
[1 1]  [1 0]
[0 1], [0 2]
)
sage: G.order()
+Infinity
sage: G.gen(0).order(), G.gen(1).order()
(+Infinity, +Infinity)

sage: gl = GL(2, ZZ);  gl
General Linear Group of degree 2 over Integer Ring
sage: g = gl.gen(2);  g
[1 1]
[0 1]
sage: g.order()
+Infinity
word_problem(gens=None)#

Solve the word problem.

This method writes the group element as a product of the elements of the list gens, or the standard generators of the parent of self if gens is None.

INPUT:

  • gens – a list/tuple/iterable of elements (or objects that can be converted to group elements), or None (default). By default, the generators of the parent group are used.

OUTPUT:

A factorization object that contains information about the order of factors and the exponents. A ValueError is raised if the group element cannot be written as a word in gens.

ALGORITHM:

Use GAP, which has optimized algorithms for solving the word problem (the GAP functions EpimorphismFromFreeGroup and PreImagesRepresentative).

EXAMPLES:

sage: G = GL(2,5); G
General Linear Group of degree 2 over Finite Field of size 5
sage: G.gens()
(
[2 0]  [4 1]
[0 1], [4 0]
)
sage: G(1).word_problem([G.gen(0)])
1
sage: type(_)
<class 'sage.structure.factorization.Factorization'>

sage: g = G([0,4,1,4])
sage: g.word_problem()
([4 1]
 [4 0])^-1

Next we construct a more complicated element of the group from the generators:

sage: s,t = G.0, G.1
sage: a = (s * t * s); b = a.word_problem(); b
([2 0]
 [0 1]) *
([4 1]
 [4 0]) *
([2 0]
 [0 1])
sage: flatten(b)
[
[2 0]     [4 1]     [2 0]
[0 1], 1, [4 0], 1, [0 1], 1
]
sage: b.prod() == a
True

We solve the word problem using some different generators:

sage: s = G([2,0,0,1]); t = G([1,1,0,1]); u = G([0,-1,1,0])
sage: a.word_problem([s,t,u])
([2 0]
 [0 1])^-1 *
([1 1]
 [0 1])^-1 *
([0 4]
 [1 0]) *
([2 0]
 [0 1])^-1

We try some elements that don’t actually generate the group:

sage: a.word_problem([t,u])
Traceback (most recent call last):
...
ValueError: word problem has no solution

AUTHORS:

  • David Joyner and William Stein

  • David Loeffler (2010): fixed some bugs

  • Volker Braun (2013): LibGAP