CoCalc Public Files313-sp20 / assignments / Hw10 / Part C.ipynb
Author: Jean Ericson
Views : 38
Compute Environment: Ubuntu 18.04 (Deprecated)

Part C- Book Exercises

1. Build every subgroup of the alternating group on 5 symbols, $A_5$, and check that each is not a normal subgroup (except for the two trivial cases). This command might take a couple seconds to run. Compare this with the time needed to run the .is_simple() method and realize that there is a significant amount of theory and cleverness brought to bear in speeding up commands like this. (It is possible that your Sage installation lacks GAP's “Table of Marks” library and you will be unable to compute the list of subgroups.)
In [3]:
A = AlternatingGroup(5)

In [9]:
Sub = A.subgroup(A)
print Sub

Subgroup generated by [(), (3,4,5), (3,5,4), (2,3)(4,5), (2,3,4), (2,3,5), (2,4,3), (2,4,5), (2,4)(3,5), (2,5,3), (2,5,4), (2,5)(3,4), (1,2)(4,5), (1,2)(3,4), (1,2)(3,5), (1,2,3), (1,2,3,4,5), (1,2,3,5,4), (1,2,4,5,3), (1,2,4), (1,2,4,3,5), (1,2,5,4,3), (1,2,5), (1,2,5,3,4), (1,3,2), (1,3,4,5,2), (1,3,5,4,2), (1,3)(4,5), (1,3,4), (1,3,5), (1,3)(2,4), (1,3,2,4,5), (1,3,5,2,4), (1,3)(2,5), (1,3,2,5,4), (1,3,4,2,5), (1,4,5,3,2), (1,4,2), (1,4,3,5,2), (1,4,3), (1,4,5), (1,4)(3,5), (1,4,5,2,3), (1,4)(2,3), (1,4,2,3,5), (1,4,2,5,3), (1,4,3,2,5), (1,4)(2,5), (1,5,4,3,2), (1,5,2), (1,5,3,4,2), (1,5,3), (1,5,4), (1,5)(3,4), (1,5,4,2,3), (1,5)(2,3), (1,5,2,3,4), (1,5,2,4,3), (1,5,3,2,4), (1,5)(2,4)] of (Alternating group of order 5!/2 as a permutation group)
In [10]:
Sub.is_normal(A)

True

Here, it is only true in the trivial cases $e$ and 1.

In [13]:
A.is_simple()

True

The is simple argument took far less time, although the normal subgroup one did not take too long either for my computer.

In [14]:
%%time
for H in A.subgroups():
if H.is_normal(A):
print H

Subgroup generated by [()] of (Alternating group of order 5!/2 as a permutation group) Subgroup generated by [(2,4)(3,5), (1,2,5)] of (Alternating group of order 5!/2 as a permutation group) CPU times: user 163 ms, sys: 31.6 ms, total: 194 ms Wall time: 239 ms
In [15]:
%%time
A.is_simple()

CPU times: user 175 µs, sys: 80 µs, total: 255 µs Wall time: 264 µs
True
In [ ]:


In [ ]:


1. Consider the quotient group of the group of symmetries of an 8-gon, formed with the cyclic subgroup of order 4 generated by a quarter-turn. Use the coset_product function to determine the Cayley table for this quotient group. Use the number of each coset, as produced by the .cosets() method as names for the elements of the quotient group. You will need to build the table “by hand” as there is no easy way to have Sage's Cayley table command do this one for you. You can build a table in the Sage Notebook pop-up editor (shift-click on a blue line) or you might read the documentation of the html.table() method.
In [16]:
G = DihedralGroup(8)
quarter_turn = G('(1,3,5,7)(2,4,6,8)')
N = G.subgroup([quarter_turn])
C = G.cosets(N)

In [17]:
len(C) # number of cosets

4
In [19]:
def coset_product(i, j, C):
"""
Given: indices i and j within the list C of cosets.
- Multiply the 0th element from each coset.
- Call the result p.
- Return the index of the first (and only!) coset in C in which p lies.
"""
p = C[i][0]*C[j][0]
cosets = [k for k in srange(len(C)) if p in C[k]]
return cosets[0]

def cosets_cayley_table(C):
"""
Try to build a cayley table, given a list C of cosets of some group.
"""
n = len(C)
mat = matrix(vector([var('x')]+range(n)))
for i in range(n):
row = [i]
for j in range(n):
k = coset_product(i, j, C)
row.append(k)
mat = mat.stack(matrix([row]))
mat.subdivide(1,1)
return mat

In [20]:
cosets_cayley_table(C)

[x|0 1 2 3] [-+-------] [0|0 1 2 3] [1|1 0 3 2] [2|2 3 0 1] [3|3 2 1 0]

Cayley Table Entry (1,2) = 3. What computation above "1,2" is actually being recorded? Here, it is a quarter-turn once and two flips.

In [ ]:


In [ ]:


In [22]:
G1 = AlternatingGroup(4)
face_turn = G1('(1,2,3)')
H = G1.subgroup([face_turn])
C1 = G1.cosets(H)

In [23]:
cosets_cayley_table(C1)

[x|0 1 2 3] [-+-------] [0|0 1 2 3] [1|1 2 0 0] [2|2 0 1 2] [3|3 3 3 1]

This is not a Cayley table because in the last row, there are multiple 3's but in a true Cayley table, there is only one character seen in ecah line and row of its kind.

In [ ]:


In [ ]:


1. Consider the cyclic subgroup of order 4 in the symmetries of an 8-gon. Verify that the subgroup is normal by first building the raw left and right cosets (without using the .cosets() method) and then checking their equality in Sage, all with a single command that employs sorting with the sorted() command.
In [24]:
print list(N)
g = G('(1,2,3,4,5,6,7,8)')
print sorted(g*k for k in N) # a left coset

all([sorted(g*k for k in N) == sorted(k*g for k in N) for g in G])

[(), (1,5)(2,6)(3,7)(4,8), (1,7,5,3)(2,8,6,4), (1,3,5,7)(2,4,6,8)] [(1,2,3,4,5,6,7,8), (1,4,7,2,5,8,3,6), (1,6,3,8,5,2,7,4), (1,8,7,6,5,4,3,2)]
True
In [25]:
G.cosets(N, side="right")

[[(), (1,3,5,7)(2,4,6,8), (1,5)(2,6)(3,7)(4,8), (1,7,5,3)(2,8,6,4)], [(2,8)(3,7)(4,6), (1,7)(2,6)(3,5), (1,5)(2,4)(6,8), (1,3)(4,8)(5,7)], [(1,2)(3,8)(4,7)(5,6), (1,8)(2,7)(3,6)(4,5), (1,6)(2,5)(3,4)(7,8), (1,4)(2,3)(5,8)(6,7)], [(1,2,3,4,5,6,7,8), (1,4,7,2,5,8,3,6), (1,6,3,8,5,2,7,4), (1,8,7,6,5,4,3,2)]]
In [27]:
G.cosets == True

True

Line IN [27] shows that G.cosets in this case is true when compared to line IN [24] from above.

In [ ]: