hex

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