Bagian 5.5 Sage
Sebagian besar dukungan Sage untuk teori grup didasarkan pada rutin dari GAP (Groups, Algorithms, and Programming) di www.gap-system.org, yang disertakan dalam setiap salinan Sage. Ini merupakan paket sumber terbuka yang matang, yang berasal dari tahun 1986. (Di sini terdapat rujukan ke pembahasan konsol GAP dan sebagainya di bagian selanjutnya.)
Seperti telah kita lihat, grup dapat dideskripsikan dengan berbagai cara, misalnya sebagai himpunan matriks, himpunan bilangan kompleks, atau himpunan simbol yang tunduk pada relasi pendefinisi. Cara yang sangat konkret untuk menyatakan grup adalah melalui permutasi (fungsi injektif dan surjektif dari bilangan bulat \(1\) hingga \(n\)), dengan komposisi fungsi sebagai operasi dalam grup, seperti yang dideskripsikan dalam bab ini. Sage memiliki banyak rutin yang dirancang untuk bekerja dengan grup jenis ini, dan rutin tersebut juga merupakan sarana yang baik bagi pelajar teori grup untuk memperoleh pengalaman dengan gagasan dasar teori grup. Karena kedua alasan ini, kita akan memusatkan perhatian pada grup-grup jenis tersebut.
Subbagian 5.5.1 Grup dan Elemen Permutasi
Cara termudah untuk bekerja dengan elemen grup permutasi dalam Sage adalah menuliskannya dalam notasi siklus. Karena elemen-elemen ini merupakan hasil kali siklus-siklus saling lepas (yang komutatif), kita tidak perlu memikirkan urutan siklus yang sebenarnya. Jika kita menulis
(1,3)(2,4), kita mungkin memahaminya sebagai suatu permutasi (topik bab ini!) dan mengetahui bahwa permutasi tersebut dapat menjadi elemen \(S_4\text{,}\) atau mungkin grup simetris pada lebih dari 4 simbol. Sage tidak dapat memulai semudah itu dan memerlukan sedikit konteks, sehingga kita mengonversi untaian karakter yang ditulis dalam notasi siklus ke dalam grup simetris untuk membuat elemen grup. Berikut beberapa contoh dan perhitungan sampel. Ingat bahwa Sage dan buku ini berbeda dalam menafsirkan urutan komposisi dua permutasi dalam suatu hasil kali.
Kode Sage (cadangan statis)
G = SymmetricGroup(5)
sigma = G("(1,3)(2,5,4)")
sigma*sigma
Keluaran referensi (cadangan statis)
(2,4,5)
Kode Sage (cadangan statis)
rho = G("(2,4)(1,5)")
rho^3
Keluaran referensi (cadangan statis)
(1,5)(2,4)
Jika tiga contoh berikut terasa membingungkan atau “terbalik”, sekarang merupakan saat yang tepat untuk meninjau kembali pembahasan Sage mengenai urutan komposisi permutasi dalam subbagian Grup simetri.
Kode Sage (cadangan statis)
sigma*rho
Keluaran referensi (cadangan statis)
(1,3,5,2)
Kode Sage (cadangan statis)
rho*sigma
Keluaran referensi (cadangan statis)
(1,4,5,3)
Kode Sage (cadangan statis)
rho^-1*sigma*rho
Keluaran referensi (cadangan statis)
(1,2,4)(3,5)
Ada cara lain untuk membuat elemen grup permutasi, yang mungkin berguna dalam situasi tertentu, tetapi tidak sepraktis cara di atas untuk penggunaan sehari-hari.
Kode Sage (cadangan statis)
sigma1 = G("(1,3)(2,5,4)")
sigma1
Keluaran referensi (cadangan statis)
(1,3)(2,5,4)
Kode Sage (cadangan statis)
sigma2 = G([(1,3),(2,5,4)]) sigma2
Keluaran referensi (cadangan statis)
(1,3)(2,5,4)
Kode Sage (cadangan statis)
sigma3 = G([3,5,1,2,4]) sigma3
Keluaran referensi (cadangan statis)
(1,3)(2,5,4)
Kode Sage (cadangan statis)
sigma1 == sigma2
Keluaran referensi (cadangan statis)
True
Kode Sage (cadangan statis)
sigma2 == sigma3
Keluaran referensi (cadangan statis)
True
Kode Sage (cadangan statis)
sigma2.cycle_tuples()
Keluaran referensi (cadangan statis)
[(1, 3), (2, 5, 4)]
Kode Sage (cadangan statis)
[sigma3(x) for x in G.domain()]
Keluaran referensi (cadangan statis)
[3, 5, 1, 2, 4]
Versi kedua \(\sigma\) merupakan senarai “tupel”, yang memerlukan banyak tanda koma dan harus diapit dalam suatu senarai. (Tupel dengan panjang satu harus ditulis seperti
(4,) untuk membedakannya dari penggunaan tanda kurung sebagai pengelompokan, seperti dalam 5*(4).) Versi ketiga menggunakan “baris bawah” dari notasi dua baris yang lebih rumit dan diperkenalkan pada awal bab — yaitu senarai terurut dari nilai keluaran permutasi ketika dipandang sebagai fungsi.
Dengan demikian kita melihat bahwa meskipun terdapat tiga prosedur masukan berbeda, semua versi \(\sigma\) dicetak dengan cara yang sama, dan bahkan semuanya benar-benar sama satu sama lain. (Ini merupakan perbedaan yang halus — antara apakah suatu objek itu dalam Sage dan bagaimana objek tersebut menampilkan dirinya.)
Kita dapat bersikap lebih cermat lagi mengenai sifat elemen-elemen kita. Perhatikan bahwa setelah Sage mulai bekerja, Sage dapat menaikkan hasil kali \(\tau\sigma\) ke dalam grup permutasi yang lebih besar. Kita dapat “menaikkan” elemen ke grup permutasi yang lebih besar, tetapi akan terjadi kesalahan jika kita mencoba memaksakan elemen ke dalam grup simetris yang terlalu kecil.
Kode Sage (cadangan statis)
H = SymmetricGroup(4)
sigma = H("(1,2,3,4)")
G = SymmetricGroup(6)
tau = G("(1,2,3,4,5,6)")
rho = tau * sigma
rho
Keluaran referensi (cadangan statis)
(1,3)(2,4,5,6)
Kode Sage (cadangan statis)
sigma.parent()
Keluaran referensi (cadangan statis)
Symmetric group of order 4! as a permutation group
Kode Sage (cadangan statis)
tau.parent()
Keluaran referensi (cadangan statis)
Symmetric group of order 6! as a permutation group
Kode Sage (cadangan statis)
rho.parent()
Keluaran referensi (cadangan statis)
Symmetric group of order 6! as a permutation group
Kode Sage (cadangan statis)
tau.parent() == rho.parent()
Keluaran referensi (cadangan statis)
True
Kode Sage (cadangan statis)
sigmaG = G(sigma) sigmaG.parent()
Keluaran referensi (cadangan statis)
Symmetric group of order 6! as a permutation group
Akan terjadi kesalahan jika kita mencoba mengonversi permutasi dengan terlalu banyak simbol ke dalam grup permutasi yang menggunakan terlalu sedikit simbol.
Kode Sage (cadangan statis)
tauH = H(tau)
Keluaran referensi (cadangan statis)
Traceback (most recent call last): ... ValueError: invalid data to initialize a permutation
Alih-alih hanya bekerja dengan elemen grup simetris, kita dapat membuat berbagai grup permutasi dalam Sage. Berikut beberapa contoh sebagai permulaan:
| Perintah Sage | Deskripsi |
SymmetricGroup(n) |
Permutasi pada \(n\) simbol, \(n!\) elemen |
DihedralGroup(n) |
Simetri segi-\(n\text{,}\) \(2n\) elemen. |
CyclicPermutationGroup(n) |
Rotasi segi-\(n\) (tanpa pencerminan), \(n\) elemen |
AlternatingGroup(n) |
Grup alternasi pada \(n\) simbol, \(n!/2\) elemen |
KleinFourGroup() |
Grup nonsiklik berorde 4 |
Anda juga dapat menemukan grup permutasi Sage melalui katalog
groups. Dalam sel berikut, tempatkan kursor tepat setelah tanda titik terakhir dan tekan tombol tab. Anda akan memperoleh daftar metode yang dapat digunakan untuk membuat grup permutasi. Seperti biasa, tambahkan tanda tanya setelah suatu metode dan tekan tombol tab untuk memperoleh dokumentasi daring metode tersebut.
Kode Sage (cadangan statis)
groups.permutation.
Subbagian 5.5.2 Sifat Elemen Permutasi
Kadang-kadang lebih mudah mengambil suatu elemen dari senarai elemen grup permutasi; dengan demikian elemen tersebut sudah terikat pada induknya dan tidak perlu dikonversi. Dalam contoh berikut,
rotate dan flip secara otomatis merupakan elemen G karena cara kita memperolehnya.
Kode Sage (cadangan statis)
D = DihedralGroup(5) elements = D.list(); elements
Keluaran referensi (cadangan statis)
[(), (1,5,4,3,2), (1,4,2,5,3), (1,3,5,2,4), (1,2,3,4,5), (2,5)(3,4), (1,5)(2,4), (1,4)(2,3), (1,3)(4,5), (1,2)(3,5)]
Kode Sage (cadangan statis)
rotate = elements[4] flip = elements[7] flip*rotate == rotate* flip
Keluaran referensi (cadangan statis)
False
Jadi, dari pernyataan terakhir ini kita melihat bahwa grup simetri segi lima tidak abelian. Namun, ada cara yang lebih mudah.
Kode Sage (cadangan statis)
D = DihedralGroup(5) D.is_abelian()
Keluaran referensi (cadangan statis)
False
Masih banyak metode lain yang dapat Anda gunakan baik untuk grup permutasi maupun elemen-elemennya. Gunakan sel komputasi kosong di bawah ini untuk membuat suatu grup permutasi (grup apa pun yang Anda sukai) dan suatu elemen grup permutasi (elemen apa pun yang Anda sukai). Kemudian gunakan pelengkapan tab untuk melihat semua metode yang tersedia bagi suatu elemen, atau bagi suatu grup (nama, tanda titik, tombol tab). Beberapa nama mungkin Anda kenali, beberapa akan kita pelajari dalam bab-bab mendatang, dan beberapa lainnya merupakan alat penelitian yang sangat khusus dan dapat Anda gunakan ketika menulis disertasi Ph.D. dalam teori grup. Untuk setiap metode ini, ingat bahwa Anda dapat mengetikkan namanya, diikuti tanda tanya, untuk melihat dokumentasi dan contoh. Bereksperimenlah dan jelajahilah — sangat sulit untuk merusak apa pun.
Berikut beberapa contoh pilihan dari berbagai metode yang tersedia.
Kode Sage (cadangan statis)
A4 = AlternatingGroup(4) A4.order()
Keluaran referensi (cadangan statis)
12
Kode Sage (cadangan statis)
A4.is_finite()
Keluaran referensi (cadangan statis)
True
Kode Sage (cadangan statis)
A4.is_abelian()
Keluaran referensi (cadangan statis)
False
Kode Sage (cadangan statis)
A4.is_cyclic()
Keluaran referensi (cadangan statis)
False
Kode Sage (cadangan statis)
sigma = A4("(1,2,4)")
sigma^-1
Keluaran referensi (cadangan statis)
(1,4,2)
Kode Sage (cadangan statis)
sigma.order()
Keluaran referensi (cadangan statis)
3
Metode elemen grup permutasi
.sign() sangat berguna ketika mempelajari grup alternasi. Metode ini mengembalikan 1 jika permutasi genap dan -1 jika permutasi ganjil.
Kode Sage (cadangan statis)
G = SymmetricGroup(3)
sigma = G("(1,2)")
tau = G("(1,3)")
rho = sigma*tau
sigma.sign()
Keluaran referensi (cadangan statis)
-1
Kode Sage (cadangan statis)
rho.sign()
Keluaran referensi (cadangan statis)
1
Kita dapat membuat subgrup dengan memberikan senarai “pembangkit” kepada grup utama. Elemen-elemen ini berfungsi untuk “membangkitkan” suatu subgrup — bayangkan mengalikan elemen-elemen ini (beserta inversnya) berulang kali, membentuk elemen baru yang juga harus berada dalam subgrup dan turut terlibat dalam hasil kali baru, hingga tidak lagi muncul elemen baru. Definisi tersebut memang berakhir dengan pernyataan yang sangat tidak presisi, tetapi cukup untuk saat ini. Definisi yang lebih baik adalah bahwa subgrup yang dibangkitkan oleh elemen-elemen tersebut merupakan subgrup terkecil dari grup utama yang memuat semua pembangkit — definisi ini memadai jika Anda mengetahui semua subgrup yang mungkin.
Dengan satu pembangkit, hasil kali berulang hanya menjadi pangkat-pangkat pembangkit tunggal tersebut. Subgrup yang dibangkitkan kemudian bersifat siklik. Dengan dua (atau lebih) pembangkit, terutama dalam grup nonabelian, situasinya dapat menjadi jauh lebih rumit. Jadi, mari kita mulai dengan satu pembangkit saja. Namun, jangan lupa untuk tetap menempatkannya dalam suatu senarai.
Kode Sage (cadangan statis)
A4 = AlternatingGroup(4)
sigma = A4("(1,2,4)")
sg = A4.subgroup([sigma])
sg
Keluaran referensi (cadangan statis)
Subgroup generated by [(1,2,4)] of (Alternating group of order 4!/2 as a permutation group)
Kode Sage (cadangan statis)
sg.order()
Keluaran referensi (cadangan statis)
3
Kode Sage (cadangan statis)
sg.list()
Keluaran referensi (cadangan statis)
[(), (1,2,4), (1,4,2)]
Kode Sage (cadangan statis)
sg.is_abelian()
Keluaran referensi (cadangan statis)
True
Kode Sage (cadangan statis)
sg.is_cyclic()
Keluaran referensi (cadangan statis)
True
Kode Sage (cadangan statis)
sg.is_subgroup(A4)
Keluaran referensi (cadangan statis)
True
Sekarang kita dapat mengerjakan kembali contoh dari bagian paling awal bab ini. Kita mengubah kedua elemen ke notasi siklus, membentuk subgrup dari dua pembangkit (subgrup tersebut tidak siklik), dan karena subgrup itu abelian, kita tidak perlu memandang tabel Cayley Sage sebagai pencerminan diagonal dari tabel dalam contoh.
Kode Sage (cadangan statis)
G = SymmetricGroup(5)
sigma = G("(4,5)")
tau = G("(1,3)")
H = G.subgroup([sigma, tau])
H.list()
Keluaran referensi (cadangan statis)
[(), (4,5), (1,3), (1,3)(4,5)]
Kode Sage (cadangan statis)
text_names = ['id', 'sigma', 'tau', 'mu'] H.cayley_table(names=text_names)
Keluaran referensi (cadangan statis)
* id sigma tau mu
+------------------------
id| id sigma tau mu
sigma| sigma id mu tau
tau| tau mu id sigma
mu| mu tau sigma id
Subbagian 5.5.3 Grup Gerak Kubus
Kita dapat meniru contoh dalam buku dan membuat elemen \(S_4\) sebagai permutasi diagonal. Konstruksi yang lebih jelas, tetapi kurang memberi wawasan, ialah memandang 8 titik sudut kubus sebagai butir-butir yang dipermutasikan. Beberapa simetri kubus yang jelas kemudian diperoleh dengan memasang sumbu melalui pusat suatu sisi hingga pusat sisi yang berhadapan, dengan putaran seperempat atau setengah terhadap sumbu-sumbu ini membentuk simetri. Dengan tiga sumbu semacam itu dan empat rotasi per sumbu, kita memperoleh 12 simetri, kecuali bahwa permutasi identitas telah kita hitung dua kali lebih banyak.
Beri label keempat titik sudut persegi atas dengan \(1\) hingga \(4\text{,}\) tempatkan \(1\) di sudut kiri depan, lalu lanjutkan searah jarum jam jika dilihat dari atas. Gunakan \(5\) hingga \(8\) untuk titik sudut persegi bawah, sehingga \(5\) tepat berada di bawah \(1\text{,}\) \(6\) di bawah \(2\text{,}\) dan seterusnya. Kita akan menggunakan putaran seperempat searah jarum jam terhadap setiap sumbu, jika masing-masing dilihat dari atas, depan, dan kanan.
Kode Sage (cadangan statis)
G = SymmetricGroup(8)
above = G("(1,2,3,4)(5,6,7,8)")
front = G("(1,4,8,5)(2,3,7,6)")
right = G("(1,2,6,5)(3,7,8,4)")
cube = G.subgroup([above, front, right])
cube.order()
Keluaran referensi (cadangan statis)
24
Kode Sage (cadangan statis)
cube.list()
Keluaran referensi (cadangan statis)
[(), (1,3)(2,4)(5,7)(6,8), (1,6)(2,5)(3,8)(4,7), (1,8)(2,7)(3,6)(4,5), (1,4,3,2)(5,8,7,6), (1,2,3,4)(5,6,7,8), (1,5)(2,8)(3,7)(4,6), (1,7)(2,6)(3,5)(4,8), (2,5,4)(3,6,8), (1,3,8)(2,7,5), (1,6,3)(4,5,7), (1,8,6)(2,4,7), (1,4)(2,8)(3,5)(6,7), (1,2,6,5)(3,7,8,4), (1,5,6,2)(3,4,8,7), (1,7)(2,3)(4,6)(5,8), (2,4,5)(3,8,6), (1,3,6)(4,7,5), (1,6,8)(2,7,4), (1,8,3)(2,5,7), (1,4,8,5)(2,3,7,6), (1,2)(3,5)(4,6)(7,8), (1,5,8,4)(2,6,7,3), (1,7)(2,8)(3,4)(5,6)]
Karena dari pembahasan dalam buku kita mengetahui bahwa grup simetri memiliki \(24\) elemen, kita melihat bahwa ketiga putaran seperempat tersebut cukup untuk membentuk setiap simetri. Hal ini memunculkan beberapa pertanyaan yang dapat Anda temukan dalam Latihan 5.6.4.

