Lewati ke konten utama

Bagian 15.7 Sage

Subbagian 15.7.1 Subgrup Sylow

Metode grup permutasi Sage .sylow_subgroup(p) mengembalikan satu subgrup Sylow-\(p\text{.}\) Jika bilangan prima tersebut bukan pembagi sejati dari orde grup, metode ini mengembalikan subgrup berorde \(p^0\text{,}\) dengan kata lain, subgrup trivial. Karena itu, berhati-hatilah saat membentuk bilangan prima Anda. Kadang-kadang, Anda mungkin hanya menginginkan satu subgrup Sylow semacam itu, karena sebarang dua subgrup Sylow-\(p\) saling konjugat, dan dengan demikian isomorfik (Teorema 15.1.7). Ini juga berarti kita dapat membuat subgrup Sylow-\(p\) lain dengan mengonjugasi subgrup yang telah diperoleh. Metode grup permutasi .conjugate(g) akan mengonjugasi grup dengan g.
Dengan mengonjugasi satu subgrup Sylow-\(p\) berulang kali, kita selalu akan menghasilkan subgrup duplikat. Karena itu, diperlukan konstruksi yang agak rumit untuk membentuk daftar yang hanya memuat subgrup unik sebagai daftar konjugat. Rutin yang menghitung semua subgrup Sylow-\(p\) ini berguna di seluruh bagian ini. Rutin tersebut dapat dibuat jauh lebih efisien dengan mengonjugasi menggunakan satu elemen saja per koset penormal, tetapi bentuk ini memadai untuk keperluan kita. Pastikan menjalankan sel berikut jika Anda sedang daring, agar fungsi tersebut terdefinisi untuk digunakan kemudian.
Kode Sage (cadangan statis)
def all_sylow(G, p):
    '''Form the set of all distinct Sylow p-subgroups of G'''
    scriptP = []
    P = G.sylow_subgroup(p)
    for x in G:
        H = P.conjugate(x)
        if not(H in scriptP):
            scriptP.append(H)
    return scriptP
Mari kita selidiki subgrup Sylow dari grup dihedral \(D_{18}\text{.}\) Sebagai grup berorde \(36=2^2\cdot 3^2\text{,}\) menurut Teorema Sylow Pertama terdapat subgrup Sylow-\(2\) berorde \(4\) dan subgrup Sylow-\(3\) berorde \(9\text{.}\) Pertama, untuk \(p=2\text{,}\) kita memperoleh satu subgrup Sylow-\(2\text{,}\) membentuk semua konjugatnya, lalu menyusun daftar subgrup tanpa duplikat. (Perintah-perintah ini memerlukan waktu untuk dijalankan, jadi bersabarlah.)
Kode Sage (cadangan statis)
G = DihedralGroup(18)
S2 = G.sylow_subgroup(2); S2
Keluaran referensi (cadangan statis)
Subgroup generated by
[(2,18)(3,17)(4,16)(5,15)(6,14)(7,13)(8,12)(9,11),
 (1,10)(2,11)(3,12)(4,13)(5,14)(6,15)(7,16)(8,17)(9,18)]
of (Dihedral group of order 36 as a permutation group)
Kode Sage (cadangan statis)
uniqS2 = all_sylow(G, 2)
uniqS2
Keluaran referensi (cadangan statis)
[Permutation Group with generators
 [(2,18)(3,17)(4,16)(5,15)(6,14)(7,13)(8,12)(9,11),
 (1,10)(2,11)(3,12)(4,13)(5,14)(6,15)(7,16)(8,17)(9,18)],
 Permutation Group with generators
 [(1,7)(2,6)(3,5)(8,18)(9,17)(10,16)(11,15)(12,14),
 (1,10)(2,11)(3,12)(4,13)(5,14)(6,15)(7,16)(8,17)(9,18)],
 Permutation Group with generators
 [(1,13)(2,12)(3,11)(4,10)(5,9)(6,8)(14,18)(15,17),
 (1,10)(2,11)(3,12)(4,13)(5,14)(6,15)(7,16)(8,17)(9,18)],
 Permutation Group with generators
 [(1,15)(2,14)(3,13)(4,12)(5,11)(6,10)(7,9)(16,18),
 (1,10)(2,11)(3,12)(4,13)(5,14)(6,15)(7,16)(8,17)(9,18)],
 Permutation Group with generators
 [(1,3)(4,18)(5,17)(6,16)(7,15)(8,14)(9,13)(10,12),
 (1,10)(2,11)(3,12)(4,13)(5,14)(6,15)(7,16)(8,17)(9,18)],
 Permutation Group with generators
 [(1,9)(2,8)(3,7)(4,6)(10,18)(11,17)(12,16)(13,15),
 (1,10)(2,11)(3,12)(4,13)(5,14)(6,15)(7,16)(8,17)(9,18)],
 Permutation Group with generators
 [(1,11)(2,10)(3,9)(4,8)(5,7)(12,18)(13,17)(14,16),
 (1,10)(2,11)(3,12)(4,13)(5,14)(6,15)(7,16)(8,17)(9,18)],
 Permutation Group with generators
 [(1,17)(2,16)(3,15)(4,14)(5,13)(6,12)(7,11)(8,10),
 (1,10)(2,11)(3,12)(4,13)(5,14)(6,15)(7,16)(8,17)(9,18)],
 Permutation Group with generators
 [(1,5)(2,4)(6,18)(7,17)(8,16)(9,15)(10,14)(11,13),
 (1,10)(2,11)(3,12)(4,13)(5,14)(6,15)(7,16)(8,17)(9,18)]]
Kode Sage (cadangan statis)
len(uniqS2)
Keluaran referensi (cadangan statis)
9
Teorema Sylow Ketiga menyatakan bahwa untuk \(p=2\) kita mengharapkan \(1, 3\text{,}\) atau \(9\) subgrup Sylow-\(2\text{,}\) sehingga hasil komputasi berupa \(9\) subgrup konsisten dengan prediksi teori. Dapatkah Anda memvisualisasikan setiap subgrup ini sebagai simetri suatu segi-\(18\text{?}\) Perhatikan bahwa kita juga memiliki banyak subgrup berorde \(2\) di dalam subgrup-subgrup berorde \(4\) ini.
Sekarang untuk kasus \(p=3\text{.}\)
Kode Sage (cadangan statis)
G = DihedralGroup(18)
S3 = G.sylow_subgroup(3); S3
Keluaran referensi (cadangan statis)
Subgroup generated by
[(1,15,11,7,3,17,13,9,5)(2,16,12,8,4,18,14,10,6),
 (1,7,13)(2,8,14)(3,9,15)(4,10,16)(5,11,17)(6,12,18)]
of (Dihedral group of order 36 as a permutation group)
Kode Sage (cadangan statis)
uniqS3 = all_sylow(G, 3)
uniqS3
Keluaran referensi (cadangan statis)
[Permutation Group with generators
[(1,15,11,7,3,17,13,9,5)(2,16,12,8,4,18,14,10,6),
(1,7,13)(2,8,14)(3,9,15)(4,10,16)(5,11,17)(6,12,18)]]
Kode Sage (cadangan statis)
len(uniqS3)
Keluaran referensi (cadangan statis)
1
Apa yang diprediksi Teorema Sylow Ketiga? Hanya \(1\) atau \(4\) subgrup Sylow-\(3\text{.}\) Setelah menemukan hanya satu subgrup secara komputasional, kita mengetahui bahwa semua konjugat dari satu-satunya subgrup Sylow-\(3\) tersebut sama. Dengan kata lain, subgrup Sylow-\(3\) normal di \(D_{18}\text{.}\) Mari kita periksa juga.
Kode Sage (cadangan statis)
S3.is_normal(G)
Keluaran referensi (cadangan statis)
True
Setidaknya satu subgrup berorde \(3\) yang termuat dalam subgrup Sylow-\(3\) ini seharusnya terlihat jelas dari orde para pembangkit, dan Anda bahkan mungkin menyadari bahwa himpunan pembangkit yang diberikan dapat diperkecil, karena salah satunya merupakan pangkat dari yang lain.
Kode Sage (cadangan statis)
S3.is_cyclic()
Keluaran referensi (cadangan statis)
True
Ingat bahwa masih ada banyak subgrup lain dengan orde yang berbeda. Sebagai contoh, dapatkah Anda membentuk subgrup berorde \(6=2\cdot 3\) di \(D_{18}\text{?}\)

Subbagian 15.7.2 Penormal

Perintah baru yang relevan bagi bagian ini adalah konstruksi penormal. Perintah Sage G.normalizer(H) mengembalikan subgrup dari G yang memuat elemen-elemen yang menormalkan subgrup H. Kita mengilustrasikan penggunaannya dengan subgrup Sylow di atas.
Kode Sage (cadangan statis)
G = DihedralGroup(18)
S2 = G.sylow_subgroup(2)
S3 = G.sylow_subgroup(3)
N2 = G.normalizer(S2); N2
Keluaran referensi (cadangan statis)
Subgroup generated by
[(1,10)(2,11)(3,12)(4,13)(5,14)(6,15)(7,16)(8,17)(9,18),
 (2,18)(3,17)(4,16)(5,15)(6,14)(7,13)(8,12)(9,11)]
 of (Dihedral group of order 36 as a permutation group)
Kode Sage (cadangan statis)
N2 == S2
Keluaran referensi (cadangan statis)
True
Kode Sage (cadangan statis)
N3 = G.normalizer(S3); N3
Keluaran referensi (cadangan statis)
Subgroup generated by
[(1,15,11,7,3,17,13,9,5)(2,16,12,8,4,18,14,10,6),
 (1,7,13)(2,8,14)(3,9,15)(4,10,16)(5,11,17)(6,12,18),
 (2,18)(3,17)(4,16)(5,15)(6,14)(7,13)(8,12)(9,11),
 (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18)]
of (Dihedral group of order 36 as a permutation group)
Kode Sage (cadangan statis)
N3 == G
Keluaran referensi (cadangan statis)
True
Penormal suatu subgrup selalu memuat seluruh subgrup tersebut, sehingga penormal S2 sekecil mungkin. Kita telah mengetahui bahwa S3 normal di G, sehingga tidak mengherankan bahwa penormalnya sebesar mungkin—setiap elemen G menormalkan S3. Mari kita hitung penormal di \(D_{18}\) yang lebih “menarik.”
Kode Sage (cadangan statis)
G = DihedralGroup(18)
a = G("(1,7,13)(2,8,14)(3,9,15)(4,10,16)(5,11,17)(6,12,18)")
b = G("(1,5)(2,4)(6,18)(7,17)(8,16)(9,15)(10,14)(11,13)")
H = G.subgroup([a, b])
H.order()
Keluaran referensi (cadangan statis)
6
Kode Sage (cadangan statis)
N = G.normalizer(H)
N
Keluaran referensi (cadangan statis)
Subgroup generated by
[(1,5)(2,4)(6,18)(7,17)(8,16)(9,15)(10,14)(11,13),
 (1,7,13)(2,8,14)(3,9,15)(4,10,16)(5,11,17)(6,12,18),
 (1,2)(3,18)(4,17)(5,16)(6,15)(7,14)(8,13)(9,12)(10,11)]
of (Dihedral group of order 36 as a permutation group)
Kode Sage (cadangan statis)
N.order()
Keluaran referensi (cadangan statis)
12
Jadi, bagi subgrup berorde \(6\) ini, penormalnya lebih besar secara sejati daripada subgrup tersebut, tetapi tetap lebih kecil secara sejati daripada seluruh grup (dan dengan demikian subgrup itu tidak normal di grup dihedral). Secara langsung, setiap subgrup normal di dalam penormalnya:
Kode Sage (cadangan statis)
H.is_normal(G)
Keluaran referensi (cadangan statis)
False
Kode Sage (cadangan statis)
H.is_normal(N)
Keluaran referensi (cadangan statis)
True

Subbagian 15.7.3 Grup Sederhana Hingga

Sebelumnya kita telah melihat metode grup permutasi Sage .is_simple(). Contoh 15.2.8 menyatakan bahwa grup berorde \(64\) tidak pernah sederhana. Grup disiklik DiCyclicGroup(16) merupakan grup nonabelian berorde \(64\text{,}\) sehingga kita dapat menguji metode ini pada grup tersebut. Ternyata grup ini memiliki banyak subgrup normal—daftarnya selalu memuat subgrup trivial dan grup itu sendiri, sehingga jumlah apa pun yang melebihi \(2\) menunjukkan adanya subgrup normal nontrivial.
Kode Sage (cadangan statis)
DC=DiCyclicGroup(16)
DC.order()
Keluaran referensi (cadangan statis)
64
Kode Sage (cadangan statis)
DC.is_simple()
Keluaran referensi (cadangan statis)
False
Kode Sage (cadangan statis)
ns = DC.normal_subgroups()
len(ns)
Keluaran referensi (cadangan statis)
9
Berikut ini sebuah grup yang cukup menarik, salah satu dari \(26\) grup sederhana sporadik, yang dikenal sebagai grup Higman–Sims, \(HS\text{.}\) Para pembangkit yang digunakan di bawah berasal dari representasi pada 100 titik dalam format GAP, yang tersedia di web.mat.bham.ac.uk/atlas/v2.0/spor/HS/. Dua pembangkit yang hanya berorde \(2\) dan \(5\) (seperti dapat Anda lihat dengan mudah) membangkitkan tepat \(44\,352\,000\) elemen, tetapi tidak menghasilkan subgrup normal nontrivial. Menakjubkan.
Kode Sage (cadangan statis)
G = SymmetricGroup(100)
a = G([(1,60),  (2,72),  (3,81),  (4,43),  (5,11),  (6,87),
        (7,34),  (9,63),  (12,46), (13,28), (14,71), (15,42),
        (16,97), (18,57), (19,52), (21,32), (23,47), (24,54),
        (25,83), (26,78), (29,89), (30,39), (33,61), (35,56),
        (37,67), (44,76), (45,88), (48,59), (49,86), (50,74),
        (51,66), (53,99), (55,75), (62,73), (65,79), (68,82),
        (77,92), (84,90), (85,98), (94,100)])
b = G([(1,86,13,10,47),  (2,53,30,8,38),
        (3,40,48,25,17),  (4,29,92,88,43),   (5,98,66,54, 65),
        (6,27,51,73,24),  (7,83,16,20,28),   (9,23,89,95,61),
        (11,42,46,91,32), (12,14, 81,55,68), (15,90,31,56,37),
        (18,69,45,84,76), (19,59,79,35,93),  (21,22,64,39,100),
        (26,58,96,85,77), (33,52,94,75,44),  (34,62,87,78,50),
        (36,82,60,74,72), (41,80,70,49,67),  (57,63,71,99,97)])
a.order(), b.order()
Keluaran referensi (cadangan statis)
(2, 5)
Kode Sage (cadangan statis)
HS = G.subgroup([a, b])
HS.order()
Keluaran referensi (cadangan statis)
44352000
Kode Sage (cadangan statis)
HS.is_simple()
Keluaran referensi (cadangan statis)
True
Kita telah melihat grup ini sebelumnya dalam latihan Bab 14 tentang aksi grup, ketika grup ini merupakan satu-satunya subgrup normal nontrivial dari grup automorfisme graf Higman–Sims, sehingga memperoleh nama tersebut.

Subbagian 15.7.4 Konsol dan Antarmuka GAP

Sampai di sini kajian khusus kita tentang teori grup berakhir, meskipun grup masih akan digunakan dalam bagian-bagian berikutnya. Seperti telah disebutkan, sebagian besar komputasi grup di Sage dilakukan oleh program sumber terbuka “Groups, Algorithms, and Programming”, yang lebih dikenal dengan nama GAP. Jika setelah mata kuliah ini dukungan grup dalam Sage tidak lagi memadai bagi Anda, mempelajari GAP merupakan langkah berikutnya sebagai ahli teori grup. Setiap instalasi Sage menyertakan GAP, dan versi GAP yang disertakan mudah dilihat:
Kode Sage (cadangan statis)
gap.version()
Keluaran referensi (cadangan statis)
'4.14.0'
Anda dapat berinteraksi dengan GAP di Sage melalui beberapa cara. Cara yang paling langsung adalah membuat grup permutasi dengan perintah Sage gap().
Kode Sage (cadangan statis)
G = gap('Group( (1,2,3,4,5,6), (1,3,5) )')
G
Keluaran referensi (cadangan statis)
Group( [ (1,2,3,4,5,6), (1,3,5) ] )
Sekarang hampir semua perintah GAP dapat digunakan dengan G, mengikuti konvensi bahwa sebagian besar perintah GAP mengharapkan grup sebagai argumen pertama, sementara kita memberikan grup tersebut melalui sintaks berorientasi objek G.. Jika Anda membaca dokumentasi GAP, terlihat bahwa Center merupakan perintah GAP yang hanya mengharapkan satu grup sebagai argumen, sedangkan Centralizer merupakan perintah GAP yang mengharapkan dua argumen—sebuah grup, kemudian sebuah elemen grup.
Kode Sage (cadangan statis)
G.Center()
Keluaran referensi (cadangan statis)
Group( [ (1,3,5)(2,4,6) ] )
Kode Sage (cadangan statis)
G.Centralizer('(1, 3, 5)')
Keluaran referensi (cadangan statis)
Group( [ (1,3,5), (2,4,6), (1,3,5)(2,4,6) ] )
Jika menggunakan antarmuka Sage Notebook, Anda dapat mengatur baris pertama sel komputasi menjadi %gap, lalu seluruh sel akan ditafsirkan seolah-olah Anda berinteraksi langsung dengan GAP. Artinya, Anda menggunakan sintaks GAP, yang sedikit berbeda dari sintaks universal Sage seperti terlihat di atas. Anda juga dapat memakai kotak tarik-turun di bagian atas lembar kerja, memilih gap sebagai sistem (alih-alih sage), lalu seluruh lembar kerja akan ditafsirkan sebagai perintah GAP. Berikut satu contoh sederhana yang seharusnya dapat Anda evaluasi dalam lembar kerja saat ini. Contoh khusus ini tidak akan berjalan dengan benar dalam Sage Cell pada versi halaman web bagian ini.
Perhatikan bahwa
  • Kita tidak perlu mengapit setiap permutasi dengan sebanyak tanda petik seperti di Sage.
  • Penetapan menggunakan :=, bukan =. Jika Anda melupakan tanda titik dua, Anda akan mendapatkan pesan galat seperti Variable: 'G' must have a value
  • Setiap baris harus diakhiri tanda titik koma. Jika terlupa, beberapa baris akan digabungkan.
Anda dapat memperoleh bantuan tentang perintah GAP dengan perintah seperti berikut, meskipun segera akan terlihat bahwa GAP mengasumsikan pengetahuan aljabar yang jauh lebih mendalam daripada Sage.
Kode Sage (cadangan statis)
print(gap.help('SymmetricGroup', pager=False))
Dalam versi baris perintah Sage, Anda juga dapat menggunakan GAP “konsol.” Sekali lagi, Anda harus menggunakan sintaks GAP, dan tidak memperoleh banyak kemudahan yang tersedia dalam notebook Sage. Perlu diketahui sejak awal bahwa quit; merupakan cara keluar dari konsol GAP dan kembali ke Sage. Jika menjalankan Sage dari baris perintah, gunakan perintah gap_console() untuk memulai GAP.
Menenangkan untuk mengetahui bahwa Sage menyertakan salinan lengkap GAP yang telah terpasang dan siap dijalankan. Namun, bagian ini bukan tutorial GAP, jadi bacalah dokumentasi di situs web utama GAP: www.gap-system.org untuk mempelajari cara memanfaatkan GAP sebaik mungkin.