We proceed by systematically filtering out all groups of order \(\neq 60\):
1. \(p\)-groups
These have a nontrivial center which is normal in \(G\), thus they are not simple.
2. Groups with order \(pq\)
These groups are guaranteed to have a normal Sylow \(q\)-subgroup.
3. Groups with order \(p^2 q\)
These groups have a normal Sylow subgroup for either \(p\) or \(q\).
4. Groups with order \(pqr\)
It has been proven (in 4.5.16) that these groups have a normal Sylow subgroup for either \(p\), \(q\) or \(r\).
5. Groups with \(n_p = 1\) for some prime p
Unique Sylow subgroups are normal.
6. Groups where the no. of distinct elements in Sylow subgroups (if not normal) exceeds its order
Let \(\left|G\right| = p^a m\), where \(p \nmid m\). We derive a lower bound for the number of distinct elements in all Sylow \(p\)-subgroups by assuming the largest possible intersection, which has size \(p^{a-1}\). These elements are only counted once, leaving \(p^{a-1}(p-1)\) unique elements which are counted \(k\) times, where \(k\) is the second smallest possible value of \(n_p\) after 1. Excluding the identity, the total number of distinct elements in Sylow \(p\)-subgroups is then \((p^{a-1}-1) + k p^{a-1}(p-1)\). If the sum over all \(p\) plus one exceeds \(\left|G\right|\), then some Sylow \(p\)-subgroup must be normal.
7. Groups where \(\left|G\right| \nmid m!\), where \(m\) is the index of some Sylow subgroup
Let \(P \in Syl_p(G)\). \(G\)'s action of left multiplication on the left cosets of \(P\) induces a permutation representation \(\varphi : G \rightarrow S_m\). If \(G\) is simple, then \(\ker \varphi\) is forced to be 1, since it is a normal proper subgroup. Hence \(G\) is isomorphic to a subgroup of \(S_m\). But this cannot be since \(\left|G\right| \nmid m!\), thus \(G\) is not simple.
8. Groups where \(\left|G\right| \nmid k!\), for all possible Sylow numbers \(k\) of a prime \(p\)
\(G\) acts by conjugation on \(Syl_p(G)\), inducing a permutation representation \(\varphi : G \rightarrow S_k\), where \(k\) is a possible Sylow number (only satisfying the congruence condition). Let \(P \in Syl_p(G)\). If \(G\) is simple, then the statements \(\ker \varphi = \cap_{i} N_G(g_i P g_i^{-1}) \le N_G(P) < G\) and \(\ker \varphi \trianglelefteq G\) force \(\ker \varphi = 1\). The argument continues as per 7.
9. Analysis of order \(90 = 2 \cdot 3^2 \cdot 5\) groups
The possible Sylow numbers for \(n_2\), \(n_3\) and \(n_5\) are \(\{1,3,5,9,15,45\}\), \(\{1,10\}\) and \(\{1,6\}\) respectively. Note that \(n_2 < 5\), because otherwise the number of distinct elements in all Sylow subgroups would exceed 90 (see 6). But 90 does not divide \(1!\) and \(3!\), so \(G\) is not simple.
These 9 steps are sufficient to filter out everything except order 60 groups. For completeness, here is the code used to perform all the calculations (note that it does not filter 90 as it requires special analysis):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 | # Primes less than 100 primes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97] def factorial(n): k = 1 for i in range(2, n+1): k *= i return k def prime_factorize(n): factors = dict() for p in primes: _n = n a = 0 while True: if _n % p != 0: break a += 1 factors.update({p: a}) _n /= p return factors def sylow_nums(n, factors): nums = dict() for p, a in factors.items(): i = 1 m = n / p**a possible = [] while True: if i > m: break if m % i == 0: possible.append(i) i += p nums.update({p: possible}) return nums for i in range(2, 100): factors = prime_factorize(i) # If this is false, then any group G of order i is guaranteed not # to be a non-abelian simple group. wanted = True # G is a p-group if len(factors) == 1: wanted = False # |G| has the form pq or (p**2)q if len(factors) == 2: if set(factors.values()) == {1} or \ set(factors.values()) == {1,2}: wanted = False # |G| has the form pqr if len(factors) == 3 and set(factors.values()) == {1}: wanted = False nums = sylow_nums(i, factors) if [1] in nums.values(): # G has a unique Sylow subgroup wanted = False else: # The number of distinct elements in Sylow subgroups (if they # are nonnormal) is greater than |G| j = 1 # Include the identity for p, ns in nums.items(): # Max no of 'shared' elements across all Sylow p-subgroups # (i.e. largest possible intersection) shared = p**(factors[p]-1) # No of elements in each Sylow p-subgroup not shared unique = p**factors[p] - shared j += (shared-1) + unique*ns[1] if j > i: wanted = False # |G| does not divide m!, where m is the index of some Sylow subgroup for p, a in factors.items(): if factorial(i // p**a) % i != 0: wanted = False # |G| does not divide k!, for all possible Sylow numbers k of some prime p for p, ns in nums.items(): for n in ns: if factorial(n) % i == 0: break else: wanted = False break if wanted: print(i) |
No comments:
Post a Comment