Bagian 10.5 Sage
Sage memiliki beberapa fungsi praktis yang memungkinkan kita menyelidiki dengan cepat apakah suatu subgrup normal, dan jika demikian, sifat grup hasil bagi yang dihasilkan. Namun, untuk memperoleh pemahaman awal, kita juga dapat bekerja dengan koset-koset yang dibentuk secara langsung. Mari kita mulai dengan mengerjakannya secara langsung, lalu mempelajari cara yang lebih mudah.
Subbagian 10.5.1 Mengalikan Koset
Definisi grup hasil bagi memerlukan suatu subgrup normal, lalu kita mendefinisikan cara untuk “mengalikan” dua koset dari subgrup tersebut sehingga menghasilkan koset lain. Penting untuk disadari bahwa definisi subgrup normal dapat ditafsirkan sebagai tepat syarat yang kita perlukan agar perkalian baru ini dapat dijalankan. Kita akan membahas dua contoh—pertama dengan subgrup normal, lalu dengan subgrup yang tidak normal.
Perhatikan grup dihedral \(D_{8}\text{,}\) yaitu grup simetri suatu segi-\(8\text{.}\) Jika kita mengambil elemen yang menghasilkan putaran seperempat, kita dapat menggunakannya untuk membangkitkan subgrup siklik berorde 4. Subgrup ini merupakan subgrup normal (untuk sementara, percayalah pada pernyataan ini). Pertama-tama, bentuk koset-koset (kanan) (perhatikan bahwa tidak ada keluaran):
Kode Sage (cadangan statis)
G = DihedralGroup(8)
quarter_turn = G('(1,3,5,7)(2,4,6,8)')
S = G.subgroup([quarter_turn])
C = G.cosets(S)
Jadi,
C merupakan sebuah daftar yang berisi daftar-daftar, dan setiap elemen grup G muncul tepat satu kali di suatu tempat. Jika ingin, Anda dapat meminta Sage mencetak C, tetapi kita akan berusaha menghindarinya di sini. Kita hendak mengalikan dua koset (daftar). Bagaimana caranya? Ambil sembarang elemen dari daftar pertama dan sembarang elemen dari daftar kedua, lalu kalikan keduanya (kita tahu cara melakukannya karena keduanya merupakan elemen G). Sekarang kita memiliki sebuah elemen G. Apa yang harus dilakukan dengan elemen ini, sedangkan yang sesungguhnya kita inginkan sebagai hasil kali dua koset adalah sebuah koset? Sederhana—kita mencari koset yang memuat hasil kali tersebut. Mari kita coba. Kita akan mengalikan koset \(1\) dengan koset \(3\) (menurut Teorema Lagrange, terdapat \(4\) koset). Pelajari kode berikut dengan saksama untuk memahami apa yang dilakukannya, lalu baca penjelasan sesudahnya.
Kode Sage (cadangan statis)
p = C[1][0]*C[3][0] [i for i in srange(len(C)) if p in C[i]]
Keluaran referensi (cadangan statis)
[2]
Apa yang telah kita lakukan? Pada baris pertama, kita membentuk
p sebagai hasil kali dua elemen grup, satu dari koset \(1\) dan satu dari koset \(3\) (C[1], C[3]). Karena kita dapat memilih sembarang elemen dari setiap koset, kita memilih elemen pertama dari masing-masing koset (C[ ][0]). Kemudian kita menelusuri semua koset, dengan hanya memilih koset yang memuat p. Karena p hanya akan berada dalam satu koset, kita mengharapkan daftar yang hanya berisi satu elemen. Di sini, daftar berelemen tunggal tersebut hanya memuat 2. Jadi, hasil kali koset \(1\) dan koset \(3\) adalah koset \(2\text{.}\)
Hal penting di sini ialah bahwa hasil ini (koset \(1\) dikali koset \(3\) menghasilkan koset \(2\)) seharusnya selalu sama, tanpa bergantung pada elemen yang kita pilih dari kedua koset untuk membentuk
p. Mari kita ulangi, tetapi kali ini kita tidak memilih elemen pertama dari koset \(1\) dan koset \(3\text{;}\) sebagai gantinya, kita akan memilih elemen ketiga dari koset \(1\) dan elemen kedua dari koset \(3\) (ingat, pencacahan dimulai dari nol!).
Kode Sage (cadangan statis)
p = C[1][2]*C[3][1] [i for i in srange(len(C)) if p in C[i]]
Keluaran referensi (cadangan statis)
[2]
Bagus. Kita memperoleh hasil yang sama. Jika Anda masih memercayai bahwa
S merupakan subgrup normal dari G, hasil inilah yang diramalkan oleh teori. Buat salinan sel komputasi di atas dan cobalah pilihan wakil lain untuk setiap koset. Kemudian cobalah hasil kali koset-koset lain dengan wakil yang bervariasi.
Sekarang saat yang tepat untuk memperkenalkan cara memperluas Sage dan menambahkan fungsi baru. Kita akan merancang fungsi perkalian koset. Bacalah kode berikut dengan saksama, lalu simak penjelasan sesudahnya.
Kode Sage (cadangan statis)
def coset_product(i, j, C): p = C[i][0]*C[j][0] c = [k for k in srange(len(C)) if p in C[k]] return c[0]
Baris pertama membentuk fungsi Sage baru bernama
coset_product. Hal ini dilakukan dengan kata def; perhatikan pula tanda titik dua pada akhir baris. Masukan fungsi tersebut ialah nomor koset-koset yang hendak kita kalikan dan daftar lengkap semua koset. Kedua baris di tengah seharusnya sudah tidak asing dari pembahasan di atas. Kita tahu bahwa c merupakan daftar berelemen tunggal, sehingga c[0] akan mengambil satu nomor koset ini, dan return menetapkan bahwa nilai tersebut merupakan keluaran fungsi. Perhatikan bahwa indentasi di atas harus tepat seperti yang ditampilkan. Kita dapat menuliskan seluruh komputasi ini dalam satu baris tanpa membuat fungsi baru, tetapi bentuknya akan mulai sulit ditangani. Anda perlu mengeksekusi blok kode di atas untuk benar-benar mendefinisikan fungsi tersebut; jika berhasil, tidak akan ada keluaran. Sekarang kita dapat menggunakan fungsi baru ini untuk mengulangi pekerjaan di atas:
Kode Sage (cadangan statis)
coset_product(1, 3, C)
Keluaran referensi (cadangan statis)
2
Sekarang Anda mengetahui dasar-dasar cara memperluas Sage dan melakukan jauh lebih banyak daripada yang semula dirancang untuknya. Dengan sedikit latihan, Anda bahkan dapat mengusulkan dan menyumbangkan fungsi baru kepada Sage, karena Sage merupakan proyek sumber terbuka. Bagus.
Sekarang mari kita periksa keadaan ketika subgrupnya tidak normal. Kita akan melihat bahwa definisi perkalian koset tidak memadai dalam kasus ini. Perhatikan pula bahwa fungsi baru
coset_product tidak berguna karena mengasumsikan bahwa koset-kosetnya berasal dari subgrup normal.
Perhatikan grup alternasi \(A_4\text{,}\) yang dapat kita tafsirkan sebagai grup simetri sebuah tetrahedron. Untuk membentuk subgrup, ambil elemen yang mempertahankan satu titik sudut dan memutar sisi di hadapannya—elemen ini akan membangkitkan subgrup siklik berorde 3, dan menurut Teorema Lagrange kita akan memperoleh empat koset. Kita menghitungnya di sini. (Sekali lagi, tidak ada keluaran yang diminta.)
Kode Sage (cadangan statis)
G = AlternatingGroup(4)
face_turn = G("(1,2,3)")
S = G.subgroup([face_turn])
C = G.cosets(S)
Sekali lagi, perhatikan hasil kali koset \(1\) dan koset \(3\text{:}\)
Kode Sage (cadangan statis)
p = C[1][0]*C[3][0] [i for i in srange(len(C)) if p in C[i]]
Keluaran referensi (cadangan statis)
[0]
Ulangi lagi, tetapi sekarang untuk koset \(3\text{,}\) pilih elemen kedua dari koset tersebut untuk menghasilkan hasil kali
p:
Kode Sage (cadangan statis)
p = C[1][0]*C[3][1] [i for i in srange(len(C)) if p in C[i]]
Keluaran referensi (cadangan statis)
[2]
Jadi, apakah hasil kali koset \(1\) dan koset \(3\) sama dengan koset \(0\) atau koset \(2\text{?}\) Kita tidak dapat menentukannya! Jadi, tidak ada cara untuk membentuk grup hasil bagi bagi subgrup ini. Anda dapat bereksperimen lebih lanjut dengan subgrup ini, tetapi dalam arti tertentu, contoh ini telah selesai—tidak ada lagi yang dapat dikatakan.
Subbagian 10.5.2 Metode Sage untuk Subgrup Normal
Anda dapat dengan mudah meminta Sage menentukan apakah suatu subgrup normal atau tidak. Kenormalan dipandang sebagai sifat subgrup tersebut, tetapi Anda harus memberi tahu Sage apa “grup induknya”, karena jawabannya dapat berubah bergantung pada nilai ini. (Sebagai contoh,
H.is_normal(H) akan selalu bernilai True.) Berikut dua contoh kita dari pembahasan di atas.
Kode Sage (cadangan statis)
G = DihedralGroup(8)
quarter_turn = G('(1,3,5,7)(2,4,6,8)')
S = G.subgroup([quarter_turn])
S.is_normal(G)
Keluaran referensi (cadangan statis)
True
Kode Sage (cadangan statis)
G = AlternatingGroup(4)
face_turn = G("(1,2,3)")
S = G.subgroup([face_turn])
S.is_normal(G)
Keluaran referensi (cadangan statis)
False
Teks ini membuktikan dalam Bagian 10.2 bahwa \(A_5\) sederhana, i.e. \(A_5\) tidak memiliki subgrup normal. Kita dapat membentuk setiap subgrup \(A_5\) dan menanyakan apakah subgrup tersebut normal dalam \(A_5\) dengan menggunakan metode
.is_normal(). Namun, Sage telah menyediakan cara langsung untuk itu.
Kode Sage (cadangan statis)
G = AlternatingGroup(5) G.is_simple()
Keluaran referensi (cadangan statis)
True
Kita juga dapat membentuk grup hasil bagi apabila kita memiliki subgrup normal.
Kode Sage (cadangan statis)
G = DihedralGroup(8)
quarter_turn = G('(1,3,5,7)(2,4,6,8)')
S = G.subgroup([quarter_turn])
Q = G.quotient(S)
Q
Keluaran referensi (cadangan statis)
Permutation Group with generators [(1,2)(3,4), (1,3)(2,4)]
Hal ini berguna, tetapi juga sedikit mengusik. Kita telah memperoleh grup hasil bagi, tetapi gagasan tentang koset telah hilang, karena
Q dikembalikan sebagai grup permutasi baru pada himpunan simbol yang berbeda. Kita tidak dapat menganggap bahwa bilangan yang digunakan untuk grup permutasi baru Q memiliki kaitan dengan koset yang diperoleh dari metode .cosets(). Akan tetapi, kita dapat melihat bahwa grup hasil bagi tersebut dideskripsikan sebagai grup yang dibangkitkan oleh dua elemen berorde dua. Kita dapat meminta orde grup itu, atau berdasarkan Teorema Lagrange kita mengetahui bahwa grup hasil bagi tersebut berorde \(4\text{.}\) Sekarang kita dapat mengatakan bahwa hanya ada dua grup berorde empat, yaitu grup siklik berorde \(4\) dan grup nonsiklik berorde \(4\text{,}\) yang kita kenal sebagai grup-\(4\) Klein atau \({\mathbb Z}_2\times{\mathbb Z}_2\text{.}\) Grup hasil bagi ini tampaknya merupakan grup nonsiklik karena grup siklik berorde 4 hanya memiliki satu elemen berorde 2. Mari kita lihat jawaban Sage.
Kode Sage (cadangan statis)
Q.is_isomorphic(KleinFourGroup())
Keluaran referensi (cadangan statis)
True
Ya, tepat demikian.
Terakhir, Sage dapat membentuk daftar semua subgrup normal dari suatu grup. Seperti yang telah kita lihat, daftar grup itu sendiri kadang-kadang memuat informasi dalam jumlah yang terlalu besar. Kita akan memperagakannya dengan hanya menampilkan orde subgrup normal yang dihasilkan.
Kode Sage (cadangan statis)
G = DihedralGroup(8) N = G.normal_subgroups() [H.order() for H in N]
Keluaran referensi (cadangan statis)
[16, 8, 8, 8, 4, 2, 1]
Jadi, secara khusus kita melihat bahwa subgrup “putaran seperempat” kita merupakan satu-satunya subgrup normal berorde \(4\) dalam grup ini.

