Sagebrush · Examples · Notebooks

Group theory (Sage)

Permutation groups: orders, products, cycle types and the Mathieu groups.

notebook · Sage · course · by Sagebrush · MIT license

group theory

Download (ZIP)Source on GitHub

Preview

Permutation groups

Computed in this page by Sagebrush's own group engine, written in Rust from the literature (Sims, Holt, Seress, Atkinson). A group is stored as a stabilizer chain, built by the Schreier–Sims algorithm and then checked by its deterministic test, so orders and membership are proven, not probable. On all 2604 transitive groups of degree at most 16, it agrees with Magma on order, primitivity, solvability, transitivity, block systems and more. Points are , and elements multiply left to right, as in Sage and GAP.

G = PermutationGroup(['(1,2,3,4,5)', '(1,2)'])
G, G.order(), G == SymmetricGroup(5)
(Permutation Group with generators [(1,2,3,4,5), (1,2)], 120, True)
# g*h applies g first
g = G('(1,2,3)(4,5)'); h = G('(1,4)')
g*h, h*g, g^-1, g.order(), g.cycle_type(), g.sign()
((1,2,3,4,5), (1,5,4,2,3), (1,3,2)(4,5), 6, [3, 2], -1)

The Mathieu groups

The five sporadic Mathieu groups are the only 4- and 5-transitive groups besides the symmetric and alternating ones. Here is built from Conway's generators on the projective line over , and and are its point stabilizers.

[(n, MathieuGroup(n).order(), MathieuGroup(n).transitivity()) for n in [11, 12, 22, 23, 24]]
[(11, 7920, 4), (12, 95040, 5), (22, 443520, 3), (23, 10200960, 4), (24, 244823040, 5)]
# The number of elements of each cycle type in M11: its conjugacy class sizes
MathieuGroup(11).cycle_type_counts()
{(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1): 1, (2, 2, 2, 2, 1, 1, 1): 165, (3, 3, 3, 1, 1): 440, (4, 4, 1, 1, 1): 990, (5, 5, 1): 1584, (6, 3, 2): 1320, (8, 2, 1): 1980, (11,): 1440}
M = MathieuGroup(12)
g = M.random_element()
g, g in M, '(1,2)' in M, M.is_primitive()
((1,11,8,6,3,12,4,5,2,10)(7,9), True, False, True)

Blocks and primitivity

A block is a set of points that every element maps to itself or to a disjoint set. The symmetries of a hexagon preserve the three pairs of opposite vertices and the two triangles. For the Galois group of a polynomial, the block systems correspond to the subfields of the field generated by one root.

D = DihedralGroup(6)
D.is_primitive(), D.blocks_all(representatives=False)
(False, [[[1, 4], [2, 5], [3, 6]], [[1, 3, 5], [2, 4, 6]]])
[(n, CyclicPermutationGroup(n).blocks_all()) for n in [6, 8, 12]]
[(6, [[1, 4], [1, 3, 5]]), (8, [[1, 5], [1, 3, 5, 7]]), (12, [[1, 7], [1, 5, 9], [1, 4, 7, 10], [1, 3, 5, 7, 9, 11]])]

Solvability

is solvable exactly when . That is why there is no formula in radicals for the roots of a general quintic. The derived series of is .

[(n, SymmetricGroup(n).is_solvable()) for n in range(2, 9)]
[(2, True), (3, True), (4, True), (5, False), (6, False), (7, False), (8, False)]
[H.order() for H in SymmetricGroup(4).derived_series()]
[24, 12, 4, 1]
# PSL(2, 7), the simple group of order 168, acting on the 8 points of the projective line over F_7
P = PSL(2, 7)
P.order(), P.degree(), P.transitivity(), P.is_perfect()
(168, 8, 2, True)
# Normal subgroups and stabilizers
AlternatingGroup(5).is_normal(SymmetricGroup(5)), SymmetricGroup(7).stabilizer(1).order(), MathieuGroup(24).stabilizer(24).order() == MathieuGroup(23).order()
(True, 720, True)

This group engine computes Galois groups of polynomials: see the Galois groups examples.

Files

Open the ZIP's notebook in Sagebrush (File, Open) to run and change it.