Finite Groups, Abelian Groups
=============================

Sage has some support for computing with permutation groups, finite
classical groups (such as :math:`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: 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

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

::

    sage: G = PermutationGroup([[(1,2),(3,4)], [(1,2,3)]])
    sage: latex(G.character_table())
    \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: 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],
    <BLANKLINE>
    [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

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

::

    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