35.6. Derived series and wreath products
Hex.PermGroup.Group.derivedSeries computes the derived series
G ⊇ [G, G] ⊇ …, stopping at the trivial group or at a nontrivial group equal
to its own derived subgroup, and stores each term as a group. In the first
case G is solvable, which Hex.PermGroup.Group.isSolvable reports.
The symmetric group on four points has derived series
S₄ ⊇ A₄ ⊇ V₄ ⊇ 1:
def symmetric4 : Group 4 := Group.ofGenerators
#[Perm.mk #v[1, 0, 2, 3], rotation]
def derivedOrders :=
symmetric4.derivedSeries.certificate.orders symmetric4
#guard derivedOrders = [24, 12, 4, 1]
For G acting on n points and H acting on m points,
Hex.PermGroup.Group.wreathProduct constructs the wreath product
G ≀ H acting on n * m points, arranged as m blocks of n points. Its
base group is Gᵐ, with an independent copy of G acting on each block, and
H permutes the blocks. Its generators are a copy of each generator of G
in each block, followed by the generators of H.
Hex.PermGroup.WreathProduct.copy embeds G into a given block,
Hex.PermGroup.WreathProduct.inr embeds H as the permutations of
the blocks, and Hex.PermGroup.WreathProduct.top projects onto H.
When the blocks are nonempty, that is when 0 < n, the order of G ≀ H is |G|ᵐ · |H|
(Hex.PermGroup.Group.wreathProduct_order). With n = 0 there are no
points, and the wreath product is trivial. The wreath product of two groups
of order 2 is the dihedral group of order 8 again:
def c2Swap : Perm 2 := Perm.mk #v[1, 0]
def c2 : Group 2 := Group.ofGenerators #[c2Swap]
def c2wr2 := c2.wreathProduct c2
#guard c2wr2.order = 8
#guard c2wr2.generators.size = 3
def c2Element : Element c2 :=
⟨c2Swap, .generator (⊢ c2Swap ∈ c2.generators All goals completed! 🐙)⟩
def baseCopy :=
WreathProduct.copy c2 0 c2Element
def topCopy :=
WreathProduct.inr c2 c2Element
#guard baseCopy != topCopy
def baseTopIsId : Bool :=
WreathProduct.top baseCopy == Element.id c2
#guard baseTopIsId
#guard WreathProduct.top topCopy = c2Element
end HexPermGroupChapter