Finite Groups, Abelian Groups - Tutorial

Skip to content
Back to top
View this page
Edit this page

# Finite Groups, Abelian Groups

Sage has some support for computing with permutation groups, finite classical groups (such as \(SU(n,q)\)), finite matrix groups (with your own generators), and abelian groups (even infinite ones). Much of this is implemented using the interface to GAP.

For example, to create a permutation group, give a list of generators, as in the following example.

Sage

    sage: G = PermutationGroup(['(1,2,3)(4,5)', '(3,4)'])
    sage: G
    Permutation Group with generators [(3,4), (1,2,3)(4,5)]
    sage: G.order()
    120
    sage: G.is_abelian()
    False
    sage: G.derived_series()           # random-ish output
    [Permutation Group with generators [(1,2,3)(4,5), (3,4)],
     Permutation Group with generators [(1,5)(3,4), (1,5)(2,4), (1,3,5)]]
    sage: G.center()
    Subgroup generated by [()] of (Permutation Group with generators [(3,4), (1,2,3)(4,5)])
    sage: G.random_element()           # random output
    (1,5,3)(2,4)
    sage: print(latex(G))
    \langle (3,4), (1,2,3)(4,5) \rangle

Python

    >>> from sage.all import *
    >>> G = PermutationGroup(['(1,2,3)(4,5)', '(3,4)'])
    >>> G
    Permutation Group with generators [(3,4), (1,2,3)(4,5)]
    >>> G.order()
    120
    >>> G.is_abelian()
    False
    >>> G.derived_series()           # random-ish output
    [Permutation Group with generators [(1,2,3)(4,5), (3,4)],
     Permutation Group with generators [(1,5)(3,4), (1,5)(2,4), (1,3,5)]]
    >>> G.center()
    Subgroup generated by [()] of (Permutation Group with generators [(3,4), (1,2,3)(4,5)])
    >>> G.random_element()           # random output
    (1,5,3)(2,4)
    >>> print(latex(G))
    \langle (3,4), (1,2,3)(4,5) \rangle

You can also obtain the character table (in LaTeX format) in Sage:

Sage

    sage: G = PermutationGroup([[(1,2),(3,4)], [(1,2,3)]])
    sage: latex(G.character_table()) # random
    \left(\begin{array}{rrrr}
    1 & 1 & 1 & 1 \\
    1 & -\zeta_{3} - 1 & \zeta_{3} & 1 \\
    1 & \zeta_{3} & -\zeta_{3} - 1 & 1 \\
    3 & 0 & 0 & -1
    \end{array}\right)

[Python]

    >>> from sage.all import *
    >>> G = PermutationGroup([[(Integer(1),Integer(2)),(Integer(3),Integer(4))], [(Integer(1),Integer(2),Integer(3))]])
    >>> latex(G.character_table()) # random
    \left(\begin{array}{rrrr}
    1 & 1 & 1 & 1 \\
    1 & -\zeta_{3} - 1 & \zeta_{3} & 1 \\
    1 & \zeta_{3} & -\zeta_{3} - 1 & 1 \\
    3 & 0 & 0 & -1
    \end{array}\right)

Sage also includes classical and matrix groups over finite fields:

Sage

    sage: MS = MatrixSpace(GF(7), 2)
    sage: gens = [MS([[1,0],[-1,1]]),MS([[1,1],[0,1]])]
    sage: G = MatrixGroup(gens)
    sage: G.conjugacy_classes_representatives()
    (
    [1 0]  [0 6]  [0 4]  [6 0]  [0 6]  [0 4]  [0 6]  [0 6]  [0 6]  [4 0]
    [0 1], [1 5], [5 5], [0 6], [1 2], [5 2], [1 0], [1 4], [1 3], [0 2],

    [5 0]
    [0 3]
    )
    sage: G = Sp(4,GF(7))
    sage: G
    Symplectic Group of degree 4 over Finite Field of size 7
    sage: G.random_element()             # random output
    [5 5 5 1]
    [0 2 6 3]
    [5 0 1 0]
    [4 6 3 4]
    sage: G.order()
    276595200

Python

    >>> from sage.all import *
    >>> MS = MatrixSpace(GF(Integer(7)), Integer(2))
    >>> gens = [MS([[Integer(1),Integer(0)],[-Integer(1),Integer(1)]]),MS([[Integer(1),Integer(1)],[Integer(0),Integer(1)]])]
    >>> G = MatrixGroup(gens)
    >>> G.conjugacy_classes_representatives()
    (
    [1 0]  [0 6]  [0 4]  [6 0]  [0 6]  [0 4]  [0 6]  [0 6]  [0 6]  [4 0]
    [0 1], [1 5], [5 5], [0 6], [1 2], [5 2], [1 0], [1 4], [1 3], [0 2],
    <BLANKLINE>
    [5 0]
    [0 3]
    )
    >>> G = Sp(Integer(4),GF(Integer(7)))
    >>> G
    Symplectic Group of degree 4 over Finite Field of size 7
    >>> G.random_element()             # random output
    [5 5 5 1]
    [0 2 6 3]
    [5 0 1 0]
    [4 6 3 4]
    >>> G.order()
    276595200

You can also compute using abelian groups (infinite and finite):

Sage

    sage: F = AbelianGroup(5, [5,5,7,8,9], names='abcde')
    sage: (a, b, c, d, e) = F.gens()
    sage: d * b**2 * c**3
    b^2*c^3*d
    sage: F = AbelianGroup(3,[2]*3); F
    Multiplicative Abelian group isomorphic to C2 x C2 x C2
    sage: H = AbelianGroup([2,3], names="xy"); H
    Multiplicative Abelian group isomorphic to C2 x C3
    sage: AbelianGroup(5)
    Multiplicative Abelian group isomorphic to Z x Z x Z x Z x Z
    sage: AbelianGroup(5).order()
    +Infinity

[Python]

    >>> from sage.all import *
    >>> F = AbelianGroup(Integer(5), [Integer(5),Integer(5),Integer(7),Integer(8),Integer(9)], names='abcde')
    >>> (a, b, c, d, e) = F.gens()
    >>> d * b**Integer(2) * c**Integer(3)
    b^2*c^3*d
    >>> F = AbelianGroup(Integer(3),[Integer(2)]*Integer(3)); F
    Multiplicative Abelian group isomorphic to C2 x C2 x C2
    >>> H = AbelianGroup([Integer(2),Integer(3)], names="xy"); H
    Multiplicative Abelian group isomorphic to C2 x C3
    >>> AbelianGroup(Integer(5))
    Multiplicative Abelian group isomorphic to Z x Z x Z x Z x Z
    >>> AbelianGroup(Integer(5)).order()
    +Infinity