s6 = SymmetricGroup(6) tuplegens = [[[(1, 4), (2, 3), (5, 6)], [(1, 5, 3), (2, 6, 4)]], [[(1, 4), (2, 5), (3, 6)], [(1, 5, 3), (2, 6, 4)]], [[(2, 5), (3, 6)], [(1, 4), (2, 5)], [(1, 6, 5), (2, 4, 3)]], [[(2, 6), (3, 5)], [(1, 4), (2, 5), (3, 6)], [(1, 5, 3), (2, 6, 4)]], [[(2, 6, 4)], [(1, 4), (2, 5), (3, 6)], [(1, 5, 3)]], [[(3, 6)], [(2, 5)], [(1, 4)], [(1, 6, 5), (2, 4, 3)]], [[(2, 3), (5, 6)], [(2, 5), (3, 6)], [(1, 4), (2, 5)], [(1, 6, 5), (2, 4, 3)]], [[(2, 5), (3, 6)], [(2, 6, 5, 3)], [(1, 4), (2, 5)], [(1, 6, 5), (2, 4, 3)]], [[(2, 6, 4)], [(2, 6), (3, 5)], [(1, 4), (2, 5), (3, 6)], [(1, 5, 3)]], [[(2, 6, 4)], [(2, 6), (3, 5)], [(1, 4), (2, 3, 6, 5)], [(1, 5, 3)]], [[(3, 6)], [(2, 3), (5, 6)], [(2, 5)], [(1, 3, 5), (2, 4, 6)], [(1, 4)]], [[(1, 4), (2, 6)], [(1, 5, 3, 4, 6)]], [[(4, 6)], [(3, 5)], [(2, 6, 4)], [(1, 4), (2, 5), (3, 6)], [(1, 5, 3)]], [[(2, 3, 4, 6)], [(1, 2, 3, 6, 4)], [(1, 6), (4, 5)]], [[(2, 6, 4)], [(1, 5, 3, 4, 2)]], [[(1, 2, 3, 4, 5, 6)], [(1, 2)]]] groups = [s6.subgroup(l) for l in tuplegens] alsocontains = [(4, 0), (11, 2), (13, 2), (13, 7)] strictcontains = [(i,j) for i in range(16) for j in range(16) if groups[j].is_subgroup(groups[i])] contains = [(i,j) for i in range(16) for j in range(16) if (i,j) in strictcontains or (i,j) in alsocontains] def subgroup_up_to_conjugacy(g,h): for x in gap.ConjugateSubgroups(s6,g): if gap.IsSubgroup(x,h): return True return False # contains == [(i,j) for i in range(16) for j in range(16) if subgroup_up_to_conjugacy(groups[i],groups[j])] R. = PowerSeriesRing(QQ,'t',default_prec=30) hilbertnum = [(sum([1/((1-x.matrix()*t).determinant()) for x in groups[j]]))*prod([1-t^i for i in range(1,7)])/groups[j].order() for j in range(16)] minover = [[i for i in range(16) if (i,j) in contains and len([k for k in range(16) if (i,k) in contains and (k,j) in contains])==2] for j in range(16)] S. = QQ['z1','z2','z3','z4','z5','z6'] def monomials(deg): mons = [z1^(deg-i2-i3-i4-i5-i6)*z2^i2*z3^i3*z4^i4*z5^i5*z6^i6 for i6 in range(deg+1) for i5 in range(deg+1-i6) for i4 in range(deg+1-i5-i6) for i3 in range(deg+1-i4-i5-i6) for i2 in range(deg+1-i3-i4-i5-i6)] return mons def find_friendly_polynomial(grpnum,deg): grp = groups[grpnum] grpord = grp.order() cand = [sum([mon*sig for sig in grp]) for mon in monomials(deg)] cand.sort(key = lambda pol: len(pol.coefficients())) zappers = [None for i in range(len(minover[grpnum]))] for i in range(len(minover[grpnum])): while True: zap = groups[minover[grpnum][i]].random_element() if not zap in grp: zappers[i] = zap break for pol in cand: happy = True for zap in zappers: if pol*zap == pol: happy = False break if happy: if len([None for sig in s6 if pol*sig==pol]) == grpord: return pol def find_friendly_polynomial_alldegrees(grpnum): deg = 1 while True: pol = find_friendly_polynomial(grpnum, deg) if pol != None: return pol deg = deg+1 pols = [None for j in range(16)] pols[15] = S(1) pols[14] = prod([S.gens()[i]-S.gens()[j] for j in range(6) for i in range(j)]) pols[13] = z1^2*z2^2*z3*z4 + z1*z2*z3^2*z4^2 + z1^2*z2*z3^2*z5 + z2^2*z3^2*z4*z5 + z1*z2^2*z4^2*z5 + z1^2*z3*z4^2*z5 + z1*z2^2*z3*z5^2 + z1^2*z2*z4*z5^2 + z1*z3^2*z4*z5^2 + z2*z3*z4^2*z5^2 + z1*z2^2*z3^2*z6 + z1^2*z3^2*z4*z6 + z1^2*z2*z4^2*z6 + z2^2*z3*z4^2*z6 + z1^2*z2^2*z5*z6 + z3^2*z4^2*z5*z6 + z1^2*z3*z5^2*z6 + z2*z3^2*z5^2*z6 + z2^2*z4*z5^2*z6 + z1*z4^2*z5^2*z6 + z1^2*z2*z3*z6^2 + z1*z2^2*z4*z6^2 + z2*z3^2*z4*z6^2 + z1*z3*z4^2*z6^2 + z2^2*z3*z5*z6^2 + z1*z3^2*z5*z6^2 + z1^2*z4*z5*z6^2 + z2*z4^2*z5*z6^2 + z1*z2*z5^2*z6^2 + z3*z4*z5^2*z6^2 pols[12] = z1*z3 + z2*z4 + z1*z5 + z3*z5 + z2*z6 + z4*z6 pols[11] = z1*z2*z3 + z1*z2*z4 + z1*z3*z5 + z2*z4*z5 + z3*z4*z5 + z2*z3*z6 + z1*z4*z6 + z3*z4*z6 + z1*z5*z6 + z2*z5*z6 pols[10] = z1*z4 + z2*z5 + z3*z6 pols[9] = z1^3*z2^2*z3*z4 + z1*z2^3*z3^2*z4 + z1*z2*z3^3*z4^2 + z1^2*z2*z3*z4^3 + z1^2*z2^3*z4*z5 + z2^2*z3^3*z4*z5 + z1^3*z2*z4^2*z5 + z2*z3^2*z4^3*z5 + z2^3*z3*z4*z5^2 + z1*z2*z4^3*z5^2 + z1*z2^2*z4*z5^3 + z2*z3*z4^2*z5^3 + z1^2*z2^3*z3*z6 + z1*z2^2*z3^3*z6 + z1^3*z3*z4^2*z6 + z1*z3^2*z4^3*z6 + z1^3*z2^2*z5*z6 + z2^3*z3^2*z5*z6 + z3^3*z4^2*z5*z6 + z1^2*z4^3*z5*z6 + z1*z2^3*z5^2*z6 + z3*z4^3*z5^2*z6 + z2^2*z3*z5^3*z6 + z1*z4^2*z5^3*z6 + z1^3*z2*z3*z6^2 + z1*z3^3*z4*z6^2 + z2*z3^3*z5*z6^2 + z1^3*z4*z5*z6^2 + z1*z2*z5^3*z6^2 + z3*z4*z5^3*z6^2 + z1*z2*z3^2*z6^3 + z1^2*z3*z4*z6^3 + z1^2*z2*z5*z6^3 + z3^2*z4*z5*z6^3 + z2*z3*z5^2*z6^3 + z1*z4*z5^2*z6^3 pols[8] = z1^2*z2^2*z3*z4 + z1*z2*z3^2*z4^2 + z2^2*z3^2*z4*z5 + z1^2*z2*z4^2*z5 + z1*z2^2*z4*z5^2 + z2*z3*z4^2*z5^2 + z1*z2^2*z3^2*z6 + z1^2*z3*z4^2*z6 + z1^2*z2^2*z5*z6 + z3^2*z4^2*z5*z6 + z2^2*z3*z5^2*z6 + z1*z4^2*z5^2*z6 + z1^2*z2*z3*z6^2 + z1*z3^2*z4*z6^2 + z2*z3^2*z5*z6^2 + z1^2*z4*z5*z6^2 + z1*z2*z5^2*z6^2 + z3*z4*z5^2*z6^2 pols[7] = z1^3*z2^2*z3 + z1*z2^3*z3^2 + z1^2*z2*z3^3 + z2^2*z3^3*z4 + z2^3*z3*z4^2 + z2*z3^2*z4^3 + z1^3*z3^2*z5 + z3^3*z4^2*z5 + z1*z3^3*z5^2 + z3*z4^3*z5^2 + z1^2*z3*z5^3 + z3^2*z4*z5^3 + z1^2*z2^3*z6 + z2^2*z4^3*z6 + z1^3*z5^2*z6 + z4^2*z5^3*z6 + z1^3*z2*z6^2 + z2^3*z4*z6^2 + z4^3*z5*z6^2 + z1*z5^3*z6^2 + z1*z2^2*z6^3 + z2*z4^2*z6^3 + z1^2*z5*z6^3 + z4*z5^2*z6^3 pols[6] = z1*z2*z3 + z3*z4*z5 + z2*z4*z6 + z1*z5*z6 pols[5] = z1*z2*z4 + z2*z3*z5 + z1*z4*z5 + z1*z3*z6 + z3*z4*z6 + z2*z5*z6 pols[4] = z1^2*z3 + z2^2*z4 + z3^2*z5 + z1*z5^2 + z4^2*z6 + z2*z6^2 pols[3] = z1*z2 + z2*z3 + z3*z4 + z4*z5 + z1*z6 + z5*z6 pols[2] = z1^3*z2^2*z3 + z1*z2^3*z3^2 + z1^2*z2*z3^3 + z3^3*z4^2*z5 + z3*z4^3*z5^2 + z3^2*z4*z5^3 + z2^2*z4^3*z6 + z1^3*z5^2*z6 + z2^3*z4*z6^2 + z1*z5^3*z6^2 + z2*z4^2*z6^3 + z1^2*z5*z6^3 pols[1] = z1^2*z2 + z2^2*z3 + z3^2*z4 + z4^2*z5 + z5^2*z6 + z1*z6^2 pols[0] = z1^2*z2*z3 + z2*z3*z4^2 + z3^2*z4*z5 + z1*z2^2*z6 + z1*z5^2*z6 + z4*z5*z6^2