Linear Groups#
EXAMPLES:
sage: GL(4, QQ)
General Linear Group of degree 4 over Rational Field
sage: GL(1, ZZ)
General Linear Group of degree 1 over Integer Ring
sage: GL(100, RR)
General Linear Group of degree 100 over Real Field with 53 bits of precision
sage: GL(3, GF(49,'a')) # needs sage.rings.finite_rings
General Linear Group of degree 3 over Finite Field in a of size 7^2
sage: SL(2, ZZ)
Special Linear Group of degree 2 over Integer Ring
sage: G = SL(2, GF(3)); G
Special Linear Group of degree 2 over Finite Field of size 3
sage: # needs sage.libs.gap
sage: G.is_finite()
True
sage: G.conjugacy_classes_representatives()
(
[1 0] [0 2] [0 1] [2 0] [0 2] [0 1] [0 2]
[0 1], [1 1], [2 1], [0 2], [1 2], [2 2], [1 0]
)
sage: G = SL(6, GF(5))
sage: G.gens()
(
[2 0 0 0 0 0] [4 0 0 0 0 1]
[0 3 0 0 0 0] [4 0 0 0 0 0]
[0 0 1 0 0 0] [0 4 0 0 0 0]
[0 0 0 1 0 0] [0 0 4 0 0 0]
[0 0 0 0 1 0] [0 0 0 4 0 0]
[0 0 0 0 0 1], [0 0 0 0 4 0]
)
>>> from sage.all import *
>>> GL(Integer(4), QQ)
General Linear Group of degree 4 over Rational Field
>>> GL(Integer(1), ZZ)
General Linear Group of degree 1 over Integer Ring
>>> GL(Integer(100), RR)
General Linear Group of degree 100 over Real Field with 53 bits of precision
>>> GL(Integer(3), GF(Integer(49),'a')) # needs sage.rings.finite_rings
General Linear Group of degree 3 over Finite Field in a of size 7^2
>>> SL(Integer(2), ZZ)
Special Linear Group of degree 2 over Integer Ring
>>> G = SL(Integer(2), GF(Integer(3))); G
Special Linear Group of degree 2 over Finite Field of size 3
>>> # needs sage.libs.gap
>>> G.is_finite()
True
>>> G.conjugacy_classes_representatives()
(
[1 0] [0 2] [0 1] [2 0] [0 2] [0 1] [0 2]
[0 1], [1 1], [2 1], [0 2], [1 2], [2 2], [1 0]
)
>>> G = SL(Integer(6), GF(Integer(5)))
>>> G.gens()
(
[2 0 0 0 0 0] [4 0 0 0 0 1]
[0 3 0 0 0 0] [4 0 0 0 0 0]
[0 0 1 0 0 0] [0 4 0 0 0 0]
[0 0 0 1 0 0] [0 0 4 0 0 0]
[0 0 0 0 1 0] [0 0 0 4 0 0]
[0 0 0 0 0 1], [0 0 0 0 4 0]
)
AUTHORS:
William Stein: initial version
David Joyner: degree, base_ring, random, order methods; examples
David Joyner (2006-05): added center, more examples, renamed random attributes, bug fixes.
William Stein (2006-12): total rewrite
Volker Braun (2013-1) port to new Parent, libGAP, extreme refactoring.
REFERENCES: See [KL1990] and [Car1972].
- sage.groups.matrix_gps.linear.GL(n, R, var='a')[source]#
Return the general linear group.
The general linear group \(GL( d, R )\) consists of all \(d \times d\) matrices that are invertible over the ring \(R\).
Note
This group is also available via
groups.matrix.GL()
.INPUT:
n
– a positive integer.R
– ring or an integer. If an integer is specified, the corresponding finite field is used.var
– variable used to represent generator of the finite field, if needed.
EXAMPLES:
sage: G = GL(6, GF(5)) sage: G.base_ring() Finite Field of size 5 sage: G.category() Category of finite groups sage: # needs sage.libs.gap sage: G.order() 11064475422000000000000000 sage: TestSuite(G).run() sage: G = GL(6, QQ) sage: G.category() Category of infinite groups sage: # needs sage.libs.gap sage: TestSuite(G).run()
>>> from sage.all import * >>> G = GL(Integer(6), GF(Integer(5))) >>> G.base_ring() Finite Field of size 5 >>> G.category() Category of finite groups >>> # needs sage.libs.gap >>> G.order() 11064475422000000000000000 >>> TestSuite(G).run() >>> G = GL(Integer(6), QQ) >>> G.category() Category of infinite groups >>> # needs sage.libs.gap >>> TestSuite(G).run()
Here is the Cayley graph of (relatively small) finite General Linear Group:
sage: # needs sage.graphs sage.libs.gap sage: g = GL(2,3) sage: d = g.cayley_graph(); d Digraph on 48 vertices sage: d.plot(color_by_label=True, vertex_size=0.03, # long time # needs sage.plot ....: vertex_labels=False) Graphics object consisting of 144 graphics primitives sage: d.plot3d(color_by_label=True) # long time # needs sage.plot Graphics3d Object
>>> from sage.all import * >>> # needs sage.graphs sage.libs.gap >>> g = GL(Integer(2),Integer(3)) >>> d = g.cayley_graph(); d Digraph on 48 vertices >>> d.plot(color_by_label=True, vertex_size=RealNumber('0.03'), # long time # needs sage.plot ... vertex_labels=False) Graphics object consisting of 144 graphics primitives >>> d.plot3d(color_by_label=True) # long time # needs sage.plot Graphics3d Object
sage: # needs sage.libs.gap sage: F = GF(3); MS = MatrixSpace(F, 2, 2) sage: gens = [MS([[2,0], [0,1]]), MS([[2,1], [2,0]])] sage: G = MatrixGroup(gens) sage: G.order() 48 sage: G.cardinality() 48 sage: H = GL(2,F) sage: H.order() 48 sage: H == G True sage: H.gens() == G.gens() True sage: H.as_matrix_group() == H True sage: H.gens() ( [2 0] [2 1] [0 1], [2 0] )
>>> from sage.all import * >>> # needs sage.libs.gap >>> F = GF(Integer(3)); MS = MatrixSpace(F, Integer(2), Integer(2)) >>> gens = [MS([[Integer(2),Integer(0)], [Integer(0),Integer(1)]]), MS([[Integer(2),Integer(1)], [Integer(2),Integer(0)]])] >>> G = MatrixGroup(gens) >>> G.order() 48 >>> G.cardinality() 48 >>> H = GL(Integer(2),F) >>> H.order() 48 >>> H == G True >>> H.gens() == G.gens() True >>> H.as_matrix_group() == H True >>> H.gens() ( [2 0] [2 1] [0 1], [2 0] )
- class sage.groups.matrix_gps.linear.LinearMatrixGroup_generic(degree, base_ring, special, sage_name, latex_string, category=None, invariant_form=None)[source]#
Bases:
NamedMatrixGroup_generic
- cardinality()[source]#
Return the order of
self
.EXAMPLES:
sage: G = SL(3, GF(5)) sage: G.order() 372000
>>> from sage.all import * >>> G = SL(Integer(3), GF(Integer(5))) >>> G.order() 372000
The order computation also works over the base rings \(\ZZ/n\ZZ\):
sage: GL(4, Integers(15)).order() 2815842631680000000 sage: SL(4, Integers(15)).order() 351980328960000000 sage: G = GL(2, Integers(6)) sage: G.order() == len(list(G)) True sage: H = SL(2, Integers(6)) sage: H.order() == len(list(H)) True
>>> from sage.all import * >>> GL(Integer(4), Integers(Integer(15))).order() 2815842631680000000 >>> SL(Integer(4), Integers(Integer(15))).order() 351980328960000000 >>> G = GL(Integer(2), Integers(Integer(6))) >>> G.order() == len(list(G)) True >>> H = SL(Integer(2), Integers(Integer(6))) >>> H.order() == len(list(H)) True
Arbitrary base rings are currently not fully supported:
sage: R.<x> = PolynomialRing(GF(7)) sage: S = R.quotient(x^2 + 5) sage: GL(2, S).order() Traceback (most recent call last): ... NotImplementedError: order computation of linear groups not fully supported for arbitrary base rings
>>> from sage.all import * >>> R = PolynomialRing(GF(Integer(7)), names=('x',)); (x,) = R._first_ngens(1) >>> S = R.quotient(x**Integer(2) + Integer(5)) >>> GL(Integer(2), S).order() Traceback (most recent call last): ... NotImplementedError: order computation of linear groups not fully supported for arbitrary base rings
- order()[source]#
Return the order of
self
.EXAMPLES:
sage: G = SL(3, GF(5)) sage: G.order() 372000
>>> from sage.all import * >>> G = SL(Integer(3), GF(Integer(5))) >>> G.order() 372000
The order computation also works over the base rings \(\ZZ/n\ZZ\):
sage: GL(4, Integers(15)).order() 2815842631680000000 sage: SL(4, Integers(15)).order() 351980328960000000 sage: G = GL(2, Integers(6)) sage: G.order() == len(list(G)) True sage: H = SL(2, Integers(6)) sage: H.order() == len(list(H)) True
>>> from sage.all import * >>> GL(Integer(4), Integers(Integer(15))).order() 2815842631680000000 >>> SL(Integer(4), Integers(Integer(15))).order() 351980328960000000 >>> G = GL(Integer(2), Integers(Integer(6))) >>> G.order() == len(list(G)) True >>> H = SL(Integer(2), Integers(Integer(6))) >>> H.order() == len(list(H)) True
Arbitrary base rings are currently not fully supported:
sage: R.<x> = PolynomialRing(GF(7)) sage: S = R.quotient(x^2 + 5) sage: GL(2, S).order() Traceback (most recent call last): ... NotImplementedError: order computation of linear groups not fully supported for arbitrary base rings
>>> from sage.all import * >>> R = PolynomialRing(GF(Integer(7)), names=('x',)); (x,) = R._first_ngens(1) >>> S = R.quotient(x**Integer(2) + Integer(5)) >>> GL(Integer(2), S).order() Traceback (most recent call last): ... NotImplementedError: order computation of linear groups not fully supported for arbitrary base rings
- sage.groups.matrix_gps.linear.SL(n, R, var='a')[source]#
Return the special linear group.
The special linear group \(SL( d, R )\) consists of all \(d \times d\) matrices that are invertible over the ring \(R\) with determinant one.
Note
This group is also available via
groups.matrix.SL()
.INPUT:
n
– positive integerR
– ring or integer; if an integer is specified, the corresponding finite field is usedvar
– variable used to represent generator of the finite field, if needed
EXAMPLES:
sage: SL(3, GF(2)) Special Linear Group of degree 3 over Finite Field of size 2 sage: G = SL(15, GF(7)); G Special Linear Group of degree 15 over Finite Field of size 7 sage: G.category() Category of finite groups sage: # needs sage.libs.gap sage: G.order() 1956712595698146962015219062429586341124018007182049478916067369638713066737882363393519966343657677430907011270206265834819092046250232049187967718149558134226774650845658791865745408000000 sage: len(G.gens()) 2 sage: G = SL(2, ZZ); G Special Linear Group of degree 2 over Integer Ring sage: G.category() Category of infinite groups sage: G.gens() ( [ 0 1] [1 1] [-1 0], [0 1] )
>>> from sage.all import * >>> SL(Integer(3), GF(Integer(2))) Special Linear Group of degree 3 over Finite Field of size 2 >>> G = SL(Integer(15), GF(Integer(7))); G Special Linear Group of degree 15 over Finite Field of size 7 >>> G.category() Category of finite groups >>> # needs sage.libs.gap >>> G.order() 1956712595698146962015219062429586341124018007182049478916067369638713066737882363393519966343657677430907011270206265834819092046250232049187967718149558134226774650845658791865745408000000 >>> len(G.gens()) 2 >>> G = SL(Integer(2), ZZ); G Special Linear Group of degree 2 over Integer Ring >>> G.category() Category of infinite groups >>> G.gens() ( [ 0 1] [1 1] [-1 0], [0 1] )
Next we compute generators for \(\mathrm{SL}_3(\ZZ)\)
sage: G = SL(3, ZZ); G Special Linear Group of degree 3 over Integer Ring sage: # needs sage.libs.gap sage: G.gens() ( [0 1 0] [ 0 1 0] [1 1 0] [0 0 1] [-1 0 0] [0 1 0] [1 0 0], [ 0 0 1], [0 0 1] ) sage: TestSuite(G).run()
>>> from sage.all import * >>> G = SL(Integer(3), ZZ); G Special Linear Group of degree 3 over Integer Ring >>> # needs sage.libs.gap >>> G.gens() ( [0 1 0] [ 0 1 0] [1 1 0] [0 0 1] [-1 0 0] [0 1 0] [1 0 0], [ 0 0 1], [0 0 1] ) >>> TestSuite(G).run()