Alg2star-1

2477 days ago by J.Wisniewski

# Algebra 2*, wiosna 2012 # Temat 1: oswojenie z SAGE na przykladzie badania grup permutacji # przypomnienie pojec: # automorfizmy wewnetrzne, dzialanie grupy na sobie # klasy sprzezonosci elementow oraz klasy sprzezonych podgrup # twierdzenie Sylowa # dla grup reprezentowanych jako permutacje # przyklad pierwszy, dokladnie opisany: D8=PermutationGroup([[(1,3)],[(1,2),(3,4)]]) # reprezentujemy grupe izometrii kwadratu jako generowana przez dwa odbicia # widziane jako permutacje wierzcholkow, rozkladamy je na cykle # sprawdzamy rzad print "Rzad grupy izometrii kwadratu:" print D8.order() reps = D8.conjugacy_classes_representatives() # generujemy liste reprezentantow klas order = [] class_sizes = [] # zdefiniowalismy dwa puste wektory for g in reps: order.append(g.order()) # wypelniamy je rzedami elementow for g in reps: # oraz wielkoscia klasy class_sizes.append(D8.order()/D8.centralizer(g).order() ) # drukujemy dwa wektory opisujace rzad elementu w klasie oraz ilosc elementow w klasie print "Klasy sprzezonosci elementow, rzad elementu i liczba elementow w klasie" print order print class_sizes 
       
Rzad grupy izometrii kwadratu:
8
Klasy sprzezonosci elementow, rzad elementu i liczba elementow w
klasie
[1, 2, 2, 4, 2]
[1, 2, 2, 2, 1]
# sprawdzamy rownanie klas czyli to, ze suma elementow po klasach daje rzad grupy # w tym celu wektor wielkosci klas wymnozymy z jednostkowym W=matrix(ZZ,len(reps),1) for i in range(0,len(reps)): W[i,0]=1 M=matrix(ZZ,class_sizes) D8.order()==M*W 
       
True
# a teraz to samo ale dla klas sprzezonosci podgrup D8 reps=D8.conjugacy_classes_subgroups() order = [] class_sizes = [] for H in reps: order.append(H.order()) for H in reps: class_sizes.append(D8.order()/D8.normalizer(H).order() ) # dwa wektory ponizej beda podawaly rzad podgrupy w klasie sprzezonosci # oraz wielkosci tej klasy czyli ilosc sprzezonych podgrup print "Klasy podgrup sprzezonych: rzad podgrupy i liczba podgrup z nia sprzezonych" print order print class_sizes 
       
Klasy podgrup sprzezonych: rzad podgrupy i liczba podgrup z nia
sprzezonych
[1, 2, 2, 2, 4, 4, 4, 8]
[1, 2, 1, 2, 1, 1, 1, 1]
# tym razem popatrzymy na grupe liniowa, ktora w Sage reprezentuje sie jako grupa permutacji # te wlasnosc maja grupy PGL, PSL, PSU nad cialami skonczonymi G=PGL(2,3) # nie jest to bardzo duza grupa print "Rzad grupy" print G.order() reps = G.conjugacy_classes_representatives() order = [] class_sizes = [] for g in reps: order.append(g.order()) for g in reps: class_sizes.append(G.order()/G.centralizer(g).order() ) # patrzac na liczbe elementow i ich rzad bedziemy umieli zdeterminowac ilosc podgrup Sylowa # co sprawdzimy zaraz ponizej print "Rzedy elementow i liczba ich klas sprzezonosci" print order print class_sizes 
       
Rzad grupy
24
Rzedy elementow i liczba ich klas sprzezonosci
[1, 2, 2, 3, 4]
[1, 6, 3, 8, 6]
# i jeszcze raz robimy to samo ale dla klas sprzezonosci podgrup reps=G.conjugacy_classes_subgroups() order = [] class_sizes = [] for H in reps: order.append(H.order()) for H in reps: class_sizes.append(G.order()/G.normalizer(H).order() ) print "Klasy podgrup sprzezonych: rzad podgrupy i liczba podgrup z nia sprzezonych" print order print class_sizes 
       
Klasy podgrup sprzezonych: rzad podgrupy i liczba podgrup z nia
sprzezonych
[1, 2, 2, 3, 4, 4, 4, 6, 8, 12, 24]
[1, 3, 6, 4, 1, 3, 3, 4, 3, 1, 1]
# a teraz te same macierze ale nad wiekszym cialem G=PGL(2,9) # ta grupa jest juz calkiem spora print "Rzad grupy" print G.order() reps = G.conjugacy_classes_representatives() order = [] class_sizes = [] for g in reps: order.append(g.order()) for g in reps: class_sizes.append(G.order()/G.centralizer(g).order() ) print "Rzedy elementow i liczba ich klas sprzezonosci" print order print class_sizes 
       
Rzad grupy
720
Rzedy elementow i liczba ich klas sprzezonosci
[1, 2, 8, 4, 8, 3, 2, 5, 5, 10, 10]
[1, 45, 90, 90, 90, 80, 36, 72, 72, 72, 72]
# powtarzamy jak poprzednio reps=G.conjugacy_classes_subgroups() order = [] class_sizes = [] for H in reps: order.append(H.order()) for H in reps: class_sizes.append(G.order()/G.normalizer(H).order() ) print "Klasy podgrup sprzezonych: rzad podgrupy i liczba podgrup z nia sprzezonych" print order print class_sizes 
       
Klasy podgrup sprzezonych: rzad podgrupy i liczba podgrup z nia
sprzezonych
[1, 2, 2, 3, 4, 4, 4, 5, 6, 8, 8, 8, 9, 10, 10, 10, 12, 16, 18, 20,
24, 36, 60, 72, 360, 720]
[1, 36, 45, 40, 30, 45, 90, 36, 120, 45, 45, 45, 10, 36, 36, 36, 30,
45, 10, 36, 30, 10, 12, 10, 1, 1]
# wyszlo duzo podgrup i nic nie widac, wobec tego # za pomoca petli wyliczymy podgrupy Sylowa oraz liczbe ich klas sprzezonosci # czyli sprawdzamy tw Sylowa # najpierw rozkladamy rzad grupy na produkt poteg roznych liczb pierwszych n=G.order() # definiujemy dwa puste wektory Sylov1 = [] Sylov2 = [] # pierwszy wektor zapelniamy potegami liczb pierwszych z rozkladu for i in range(len(factor(n))): Sylov1.append((factor(n)[i][0])^(factor(n)[i][1]) ) # drugi wektor zapelniamy liczbami klas sprzezonosci grup Sylowa odpowiedniego rzedu for j in Sylov1: for H in reps: if H.order()==j: Sylov2.append(G.order()/G.normalizer(H).order() ) print "Rzedy podgrup Sylowa oraz ich liczba" print Sylov1 print Sylov2 
       
Rzedy podgrup Sylowa oraz ich liczba
[16, 9, 5]
[45, 10, 36]