from sympy.combinatorics import Permutation, Cycle from sympy.combinatorics.named_groups import SymmetricGroup S5 = SymmetricGroup(5) S5_elems = list(S5.generate_schreier_sims()) IDENTITY = Permutation(4) ALPHA = Permutation(Cycle(0, 1, 2, 3, 4)) BETA = Permutation(Cycle(0, 2, 4, 3, 1)) ALPHA_INV = (~ALPHA) BETA_INV = (~BETA) COMMUTATOR = ALPHA * BETA * ALPHA_INV * BETA_INV ELEMENTS = [ALPHA, ALPHA_INV, BETA, BETA_INV, COMMUTATOR] CONJUGATORS = {e: {} for e in ELEMENTS} for e1 in ELEMENTS: for e2 in ELEMENTS: for gamma in S5_elems: if gamma * e1 * (~gamma) == e2: CONJUGATORS[e1][e2] = (gamma, ~gamma) break class GroupInstruction(object): def __init__(self, index, g0, g1): self.index = index self.g0 = g0 self.g1 = g1 def __str__(self): return str(self.index).ljust(4) + str(self.g0).ljust(15) + str( self.g1).ljust(13)