Bagian 6.6 Sage
Sage dapat membuat semua koset dari suatu subgrup dan semua subgrup dari suatu grup. Meskipun metode-metode ini dapat agak lambat, dalam banyak, banyak hal metode tersebut jauh lebih baik daripada bereksperimen dengan pensil dan kertas, serta dapat sangat membantu kita memahami struktur grup hingga.
Subbagian 6.6.1 Koset
Sage dapat membuat semua koset kanan (atau kiri) dari suatu subgrup. Dalam penulisan matematis, koset merupakan himpunan, dan urutan elemen di dalam himpunan tidak relevan. Dalam Sage, daftar lebih alami digunakan, dan di sini hal tersebut menguntungkan kita.
Sage membuat koset dari suatu subgrup sebagai daftar yang berisi daftar-daftar. Setiap daftar di dalamnya merupakan satu koset. Koset pertama selalu berupa subgrup itu sendiri, dan elemen pertama koset ini adalah identitas. Setiap koset lain dapat dipandang mempunyai elemen pertama sebagai wakilnya, dan jika elemen ini digunakan sebagai wakil, elemen-elemen koset berada dalam urutan yang sama seperti ketika dibuat dengan mengalikan wakil tersebut dengan elemen-elemen koset pertama (subgrup).
Kata kunci
side dapat bernilai 'right' atau 'left', dan jika tidak diberikan, nilai bawaannya adalah koset kanan. Pilihan tersebut merujuk pada sisi hasil kali yang ditempati wakil. Perhatikan bahwa hasil Sage sekarang tampak “terbalik” dibandingkan dengan teks. Berikut Contoh 6.1.2 ditampilkan kembali, tetapi dengan urutan yang sedikit berbeda.
Kode Sage (cadangan statis)
G = SymmetricGroup(3)
a = G("(1,2)")
H = G.subgroup([a])
rc = G.cosets(H, side='right'); rc
Keluaran referensi (cadangan statis)
[[(), (1,2)], [(2,3), (1,3,2)], [(1,2,3), (1,3)]]
Kode Sage (cadangan statis)
lc = G.cosets(H, side='left'); lc
Keluaran referensi (cadangan statis)
[[(), (1,2)], [(2,3), (1,2,3)], [(1,3,2), (1,3)]]
Jadi, jika kita menelusuri tanda kurung dengan saksama, kita dapat melihat perbedaan antara koset kanan dan koset kiri. Bandingkan koset-koset ini dengan koset dalam teks dan perhatikan bahwa kiri dan kanan terbalik. Hal ini seharusnya tidak menjadi masalah — cukup ingat perbedaan tersebut.
Kode Sage (cadangan statis)
G = SymmetricGroup(3)
b = G("(1,2,3)")
H = G.subgroup([b])
rc = G.cosets(H, side='right'); rc
Keluaran referensi (cadangan statis)
[[(), (1,2,3), (1,3,2)], [(2,3), (1,3), (1,2)]]
Kode Sage (cadangan statis)
lc = G.cosets(H, side='left'); lc
Keluaran referensi (cadangan statis)
[[(), (1,2,3), (1,3,2)], [(2,3), (1,2), (1,3)]]
Jika kita mempelajari pengelompokan tanda kurung, kita dapat melihat bahwa koset kiri dan kanan sama. Mari kita lihat pendapat Sage:
Kode Sage (cadangan statis)
rc == lc
Keluaran referensi (cadangan statis)
False
Secara matematis, kita memerlukan himpunan, tetapi Sage bekerja dengan daftar terurut, sehingga urutan berpengaruh. Namun, jika kita mengetahui bahwa daftar tidak mempunyai duplikat (metode
.cosets() tidak pernah menghasilkan duplikat), kita dapat mengurutkan daftar tersebut sehingga pengujian kesamaan akan bekerja seperti yang diharapkan. Elemen-elemen grup permutasi mempunyai suatu urutan yang didefinisikan — tidak terlalu penting urutan apa yang digunakan, asalkan suatu urutan telah didefinisikan. Fungsi sorted() menerima sebarang daftar dan mengembalikan versi terurutnya. Jadi, untuk setiap daftar koset, kita akan mengurutkan setiap koset lalu mengurutkan daftar koset-koset yang telah terurut. Ini merupakan langkah yang umum, meskipun agak rumit karena daftarnya bersarang.
Kode Sage (cadangan statis)
rc_sorted = sorted([sorted(coset) for coset in rc]) rc_sorted
Keluaran referensi (cadangan statis)
[[(), (1,2,3), (1,3,2)], [(2,3), (1,2), (1,3)]]
Kode Sage (cadangan statis)
lc_sorted = sorted([sorted(coset) for coset in lc]) lc_sorted
Keluaran referensi (cadangan statis)
[[(), (1,2,3), (1,3,2)], [(2,3), (1,2), (1,3)]]
Kode Sage (cadangan statis)
rc_sorted == lc_sorted
Keluaran referensi (cadangan statis)
True
Daftar semua koset dapat cukup panjang (daftar tersebut mencakup setiap elemen grup) dan dapat memerlukan beberapa detik untuk selesai, bahkan bagi grup kecil. Terdapat cara yang lebih canggih dan lebih cepat untuk mempelajari koset (misalnya hanya menggunakan wakilnya), tetapi untuk memahami teknik-teknik tersebut Anda juga perlu memahami lebih banyak teori.
Subbagian 6.6.2 Subgrup
Sage dapat menghitung semua subgrup dari suatu grup. Perhitungan ini dapat menghasilkan keluaran yang bahkan lebih banyak daripada metode koset dan terkadang memerlukan waktu jauh lebih lama, bergantung pada struktur grup. Daftar tersebut diurutkan berdasarkan ukuran subgrup, dimulai dari yang terkecil. Sebagai demonstrasi, pertama-tama kita akan menghitung dan mencantumkan semua subgrup dari suatu grup kecil, lalu mengambil satu saja dari subgrup tersebut dari daftar untuk dipelajari lebih lanjut.
Kode Sage (cadangan statis)
G = SymmetricGroup(3) sg = G.subgroups(); sg
Keluaran referensi (cadangan statis)
[Subgroup generated by [()] of (Symmetric group of order 3! as a permutation group), Subgroup generated by [(2,3)] of (Symmetric group of order 3! as a permutation group), Subgroup generated by [(1,2)] of (Symmetric group of order 3! as a permutation group), Subgroup generated by [(1,3)] of (Symmetric group of order 3! as a permutation group), Subgroup generated by [(1,2,3)] of (Symmetric group of order 3! as a permutation group), Subgroup generated by [(1,2,3), (2,3)] of (Symmetric group of order 3! as a permutation group)]
Kode Sage (cadangan statis)
H = sg[4]; H
Keluaran referensi (cadangan statis)
Subgroup generated by [(1,2,3)] of (Symmetric group of order 3! as a permutation group)
Kode Sage (cadangan statis)
H.order()
Keluaran referensi (cadangan statis)
3
Kode Sage (cadangan statis)
H.list()
Keluaran referensi (cadangan statis)
[(), (1,2,3), (1,3,2)]
Kode Sage (cadangan statis)
H.is_cyclic()
Keluaran referensi (cadangan statis)
True
Keluaran metode
.subgroups() dapat sangat banyak, sehingga terkadang kita tertarik pada sifat subgrup tertentu (seperti dalam contoh sebelumnya) atau pertanyaan yang lebih luas mengenai “struktur subgrup” suatu grup. Di sini kita memperluas pembahasan Proposisi 6.2.7. Perhatikan bahwa hanya karena Sage tidak menghitung subgrup berorde 6 dalam \(A_4\text{,}\) hal ini sama sekali tidak dapat menggantikan suatu pembuktian seperti yang diberikan untuk korolari tersebut. Namun, hasil komputasi mendorong kita mencari hasil teoretis dengan percaya diri.
Kode Sage (cadangan statis)
G = AlternatingGroup(4) sg = G.subgroups() [H.order() for H in sg]
Keluaran referensi (cadangan statis)
[1, 2, 2, 2, 3, 3, 3, 3, 4, 12]
Jadi, kita tidak melihat subgrup berorde 6 dalam daftar subgrup dari \(A_4\text{.}\) Perhatikan bagaimana Teorema Lagrange (Teorema 6.2.2) tampak berlaku — semua orde subgrup membagi \(12\text{,}\) yaitu orde \(A_4\text{.}\) Bersabarlah; perhitungan subgrup berikutnya mungkin memerlukan waktu.
Kode Sage (cadangan statis)
G = SymmetricGroup(4) sg = G.subgroups() [H.order() for H in sg]
Keluaran referensi (cadangan statis)
[1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 6, 6, 6, 6, 8, 8, 8, 12, 24]
Sekali lagi, perhatikan Teorema Lagrange bekerja. Namun, yang lebih menarik, \(S_4\) mempunyai subgrup berorde 6. Tepatnya, terdapat empat subgrup seperti itu. Keempat subgrup berorde 6 tersebut serupa satu sama lain; dapatkah Anda mendeskripsikannya secara sederhana (sebelum menggali daftar
sg untuk memperoleh informasi lebih lanjut)? Jika Anda ingin mengetahui banyaknya subgrup yang dimiliki \(S_4\text{,}\) Anda cukup menghitung banyaknya subgrup dalam daftar sg. Fungsi len() melakukan hal ini untuk sebarang daftar dan sering kali merupakan cara mudah untuk menghitung banyaknya objek.
Kode Sage (cadangan statis)
len(sg)
Keluaran referensi (cadangan statis)
30
Subbagian 6.6.3 Subgrup dari Grup Siklik
Setelah lebih mengenal grup permutasi dan mengetahui metode
.subgroups(), kita dapat meninjau kembali suatu gagasan dari Bab 4. Subgrup dari grup siklik selalu bersifat siklik, tetapi berapa banyak subgrup tersebut dan apa saja ordenya?
Kode Sage (cadangan statis)
G = CyclicPermutationGroup(20) [H.order() for H in G.subgroups()]
Keluaran referensi (cadangan statis)
[1, 2, 4, 5, 10, 20]
Kode Sage (cadangan statis)
G = CyclicPermutationGroup(19) [H.order() for H in G.subgroups()]
Keluaran referensi (cadangan statis)
[1, 19]
Kita dapat melakukan hal ini sepanjang hari, tetapi Sage sudah tersedia bagi Anda; jadi, variasikan orde
G dengan mengubah n dan pelajari keluaran dari banyak percobaan. Cobalah grup siklik berorde 24 dan bandingkan dengan grup simetris \(S_4\) (di atas), yang juga berorde 24. Apakah mulai tampak suatu dugaan?
Kode Sage (cadangan statis)
n = 8 G = CyclicPermutationGroup(n) [H.order() for H in G.subgroups()]
Keluaran referensi (cadangan statis)
[1, 2, 4, 8]
Subbagian 6.6.4 Fungsi Phi Euler
Untuk melengkapi fungsi-fungsi teori bilangan dari Bab 2, perhatikan bahwa Sage menyediakan fungsi \(\phi\) Euler sebagai fungsi
euler_phi().
Kode Sage (cadangan statis)
euler_phi(345)
Keluaran referensi (cadangan statis)
176
Berikut eksperimen menarik yang dapat Anda jalankan beberapa kali.
Kode Sage (cadangan statis)
m = random_prime(10000) n = random_prime(10000) m, n, euler_phi(m*n) == euler_phi(m)*euler_phi(n)
Keluaran referensi (cadangan statis)
(5881, 1277, True)
Apakah mulai tampak dugaan lain? Dapatkah Anda menggeneralisasi hasil ini?

