Lewati ke konten utama

Bagian 3.8 Sage

Banyak grup yang dibahas dalam bab ini tersedia untuk dikaji dalam Sage. Penting untuk memahami bahwa himpunan yang membentuk objek aljabar (grup dalam bab ini) disebut “induk” dalam Sage, dan unsur-unsur objek tersebut disebut, sebagaimana dapat diduga, “unsur.” Jadi, setiap unsur termasuk dalam suatu induk (dengan kata lain, termuat dalam suatu himpunan). Kita dapat menanyakan sifat induk (berhingga? orde? abelian?), dan kita dapat menanyakan sifat setiap unsur (identitas? invers?). Berikut ini akan ditunjukkan cara membuat beberapa grup yang umum dijumpai dan mulai mengeksplorasi sifat-sifatnya dengan Sage.

Subbagian 3.8.1 Bilangan bulat modulo n

Kode Sage (cadangan statis)
Z8 = Integers(8)
Z8
Keluaran referensi (cadangan statis)
Ring of integers modulo 8
Kode Sage (cadangan statis)
Z8.list()
Keluaran referensi (cadangan statis)
[0, 1, 2, 3, 4, 5, 6, 7]
Kode Sage (cadangan statis)
a = Z8.an_element(); a
Keluaran referensi (cadangan statis)
0
Kode Sage (cadangan statis)
a.parent()
Keluaran referensi (cadangan statis)
Ring of integers modulo 8
Kita ingin bekerja dengan unsur-unsur Z8. Jika sekarang Anda mengetik 6 ke dalam sebuah sel komputasi, apa yang Anda maksud? Bilangan bulat \(6\text{,}\) bilangan rasional \(\frac{6}{1}\text{,}\) bilangan real \(6.00000\text{,}\) atau bilangan kompleks \(6.00000+0.00000i\text{?}\) Atau mungkin Anda benar-benar menginginkan bilangan bulat \(6\) modulo \(8\text{?}\) Sage sama sekali tidak mengetahui apa yang Anda maksud atau inginkan. Untuk memperjelasnya, Anda dapat melakukan “koersi” atas 6 ke dalam Z8 dengan sintaks Z8(6). Tanpa ini, Sage akan memperlakukan bilangan masukan seperti 6 sebagai bilangan bulat, yang dalam arti tertentu merupakan interpretasi paling sederhana. Pelajari contoh berikut dengan saksama; mula-mula kita bekerja dengan bilangan bulat “biasa”, kemudian dengan bilangan bulat modulo 8.
Kode Sage (cadangan statis)
a = 6
a
Keluaran referensi (cadangan statis)
6
Kode Sage (cadangan statis)
a.parent()
Keluaran referensi (cadangan statis)
Integer Ring
Kode Sage (cadangan statis)
b = 7
c = a + b; c
Keluaran referensi (cadangan statis)
13
Kode Sage (cadangan statis)
d = Z8(6)
d
Keluaran referensi (cadangan statis)
6
Kode Sage (cadangan statis)
d.parent()
Keluaran referensi (cadangan statis)
Ring of integers modulo 8
Kode Sage (cadangan statis)
e = Z8(7)
f = d+e; f
Keluaran referensi (cadangan statis)
5
Kode Sage (cadangan statis)
g = Z8(85); g
Keluaran referensi (cadangan statis)
5
Kode Sage (cadangan statis)
f == g
Keluaran referensi (cadangan statis)
True
Z8 agak tidak biasa sebagai contoh pertama, sebab padanya didefinisikan dua operasi, yaitu penjumlahan dan perkalian; penjumlahan membentuk grup, sedangkan perkalian tidak. Meskipun demikian, kita dapat bekerja dengan bagian aditifnya; di sini kita membentuk tabel Cayley untuk penjumlahan.
Kode Sage (cadangan statis)
Z8.addition_table(names='elements')
Keluaran referensi (cadangan statis)
+  0 1 2 3 4 5 6 7
 +----------------
0| 0 1 2 3 4 5 6 7
1| 1 2 3 4 5 6 7 0
2| 2 3 4 5 6 7 0 1
3| 3 4 5 6 7 0 1 2
4| 4 5 6 7 0 1 2 3
5| 5 6 7 0 1 2 3 4
6| 6 7 0 1 2 3 4 5
7| 7 0 1 2 3 4 5 6
Jika \(n\) merupakan bilangan prima, struktur perkaliannya (dengan mengecualikan nol) juga membentuk grup.
Bilangan bulat modulo \(n\) sangat penting, sehingga Sage mengimplementasikan penjumlahan dan perkalian sekaligus. Grup simetri merupakan contoh yang lebih baik tentang cara Sage mengimplementasikan grup, sebab hanya terdapat satu operasi.

Subbagian 3.8.2 Grup simetri

Simetri beberapa bangun geometris telah didefinisikan dalam Sage, meskipun dengan nama yang berbeda. Simetri-simetri tersebut diimplementasikan sebagai “grup permutasi”, yang akan mulai kita kaji dengan saksama dalam Bab 5.
Sage menggunakan bilangan bulat untuk memberi label titik sudut, dengan pencacahan dimulai dari 1, bukan menggunakan huruf. Secara bawaan, unsur dicetak menggunakan “notasi siklus”, yang akan dijelaskan dengan saksama dalam Bab 5. Berikut sebuah contoh, baik dalam matematika maupun Sage. Untuk bagian Sage, kita membuat grup simetri, kemudian membuat simetri \(\rho_2\) melalui koersi, lalu menampilkan unsur tersebut dalam notasi siklus. Setelah itu, kita hanya membuat baris bawah dari notasi permutasi yang kita gunakan.
\begin{equation*} \rho_2= \begin{pmatrix} A & B & C\\ C & A & B \end{pmatrix} = \begin{pmatrix} 1 & 2 & 3\\ 3 & 1 & 2 \end{pmatrix} \end{equation*}
Kode Sage (cadangan statis)
triangle = SymmetricGroup(3)
rho2 = triangle([3,1,2])
rho2
Keluaran referensi (cadangan statis)
(1,3,2)
Kode Sage (cadangan statis)
[rho2(x) for x in triangle.domain()]
Keluaran referensi (cadangan statis)
[3, 1, 2]
Komprehensi senarai terakhir perlu dijelaskan. Metode .domain() memberikan senarai simbol yang digunakan untuk grup permutasi triangle, kemudian rho2 digunakan dengan sintaks seolah-olah merupakan fungsi (memang merupakan fungsi) untuk menghasilkan bayangan yang akan mengisi baris bawah.
Dengan komprehensi senarai ganda, kita dapat mencantumkan keenam unsur grup dalam format “baris bawah”. Latihan yang baik adalah memasangkan setiap unsur dengan namanya sebagaimana diberikan dalam Gambar 3.1.6.
Kode Sage (cadangan statis)
[[a(x) for x in triangle.domain()] for a in triangle]
Keluaran referensi (cadangan statis)
[[1, 2, 3], [3, 1, 2], [2, 3, 1], [1, 3, 2], [3, 2, 1], [2, 1, 3]]
Buku, penulis, dan perangkat lunak yang berbeda mempunyai pandangan yang berbeda pula mengenai urutan penulisan perkalian fungsi. Buku ajar ini bertumpu pada gagasan komposisi fungsi, sehingga \(fg\) merupakan komposisi \((fg)(x)=f(g(x))\) dan secara alami \(g\) diterapkan terlebih dahulu. Sage menggunakan pandangan sebaliknya: ketika kita menulis \(fg\text{,}\) Sage memahami bahwa kita ingin menerapkan \(f\) terlebih dahulu. Kedua pendekatan tersebut tidak salah dan tidak ada yang niscaya lebih unggul; keduanya hanya berbeda, dan masing-masing mempunyai alasan yang kuat. Ketika Anda membaca buku lain yang membahas grup permutasi, tentukan terlebih dahulu pendekatan mana yang digunakannya. (Perhatikan bahwa pembahasan komposisi fungsi dalam Sage ini hanya berlaku untuk permutasi—fungsi “biasa” dalam Sage dikomposisikan dalam urutan yang mungkin Anda kenal dari mata kuliah kalkulus.)
Mengalihwahanakan notasi antara teks dan Sage di sini merupakan latihan yang bermanfaat. Kita akan mengulangi pembahasan pada akhir Bagian 3.1, tetapi membalik urutan setiap hasil kali agar komputasinya mengikuti gaya Sage dan mencerminkan secara tepat apa yang dilakukan dalam teks.
Kode Sage (cadangan statis)
mu1 = triangle([1,3,2])
mu2 = triangle([3,2,1])
mu3 = triangle([2,1,3])
rho1 = triangle([2,3,1])
product = rho1*mu1
product == mu2
Keluaran referensi (cadangan statis)
True
Kode Sage (cadangan statis)
[product(x) for x in triangle.domain()]
Keluaran referensi (cadangan statis)
[3, 2, 1]
Kode Sage (cadangan statis)
rho1*mu1 == mu1*rho1
Keluaran referensi (cadangan statis)
False
Kode Sage (cadangan statis)
mu1*rho1 == mu3
Keluaran referensi (cadangan statis)
True
Setelah memahami bahwa Sage melakukan perkalian dalam urutan terbalik, kita dapat menghitung tabel Cayley untuk grup ini. Perilaku bawaannya adalah memberi nama unsur grup dengan huruf a, b, c, \(\dots{}\) dalam urutan yang sama dengan urutan unsur grup yang dihasilkan perintah .list(). Namun, Anda juga dapat mencetak unsur dalam tabel sebagaimana bentuk unsur itu sendiri (di sini menggunakan notasi siklus), atau Anda dapat memberi nama pada unsur-unsur tersebut. Kita akan menggunakan u sebagai singkatan untuk \(\mu\) dan r sebagai singkatan untuk \(\rho\text{.}\)
Kode Sage (cadangan statis)
triangle.cayley_table()
Keluaran referensi (cadangan statis)
*  a b c d e f
 +------------
a| a b c d e f
b| b a d c f e
c| c e a f b d
d| d f b e a c
e| e c f a d b
f| f d e b c a
Kode Sage (cadangan statis)
triangle.cayley_table(names='elements')
Keluaran referensi (cadangan statis)
      *       ()   (2,3)   (1,2) (1,2,3) (1,3,2)   (1,3)
       +------------------------------------------------
     ()|      ()   (2,3)   (1,2) (1,2,3) (1,3,2)   (1,3)
  (2,3)|   (2,3)      () (1,2,3)   (1,2)   (1,3) (1,3,2)
  (1,2)|   (1,2) (1,3,2)      ()   (1,3)   (2,3) (1,2,3)
(1,2,3)| (1,2,3)   (1,3)   (2,3) (1,3,2)      ()   (1,2)
(1,3,2)| (1,3,2)   (1,2)   (1,3)      () (1,2,3)   (2,3)
  (1,3)|   (1,3) (1,2,3) (1,3,2)   (2,3)   (1,2)      ()
Kode Sage (cadangan statis)
triangle.cayley_table(names=['id','u3','r1','r2','u1','u2'])
Keluaran referensi (cadangan statis)
 *  id u3 r1 r2 u1 u2
  +------------------
id| id u3 r1 r2 u1 u2
u3| u3 id r2 r1 u2 u1
r1| r1 u1 id u2 u3 r2
r2| r2 u2 u3 u1 id r1
u1| u1 r1 u2 id r2 u3
u2| u2 r2 u1 u3 r1 id
Anda hendaknya memverifikasi bahwa tabel di atas benar, sebagaimana Tabel 3.2 juga benar. Ingat bahwa konvensinya adalah mengalikan label baris dengan label kolom, dalam urutan tersebut. Namun, untuk membandingkan kedua tabel, Anda perlu mengingat perbedaan urutan antara buku ajar ini dan Sage.

Subbagian 3.8.3 Kuaternion

Sage mengimplementasikan kuaternion, tetapi unsur-unsurnya bukan berupa matriks, melainkan permutasi. Meskipun tampak berbeda, strukturnya identik. Versi mana yang Anda bayangkan (matriks atau permutasi) tidak menjadi masalah jika Anda menyusun tabel Cayley dan menggunakan perilaku bawaan berupa huruf untuk menamai unsur. Dalam bentuk permutasi ataupun huruf, dapatkah Anda mengidentifikasi \(-1\text{,}\) \(I\text{,}\) \(J\text{,}\) dan \(K\text{?}\)
Kode Sage (cadangan statis)
Q = QuaternionGroup()
[[a(x) for x in Q.domain()] for a in Q]
Keluaran referensi (cadangan statis)
[[1, 2, 3, 4, 5, 6, 7, 8], [3, 4, 1, 2, 7, 8, 5, 6],
 [4, 1, 2, 3, 8, 5, 6, 7], [2, 3, 4, 1, 6, 7, 8, 5],
 [7, 6, 5, 8, 1, 4, 3, 2], [5, 8, 7, 6, 3, 2, 1, 4],
 [8, 7, 6, 5, 2, 1, 4, 3], [6, 5, 8, 7, 4, 3, 2, 1]]
Kode Sage (cadangan statis)
Q.cayley_table()
Keluaran referensi (cadangan statis)
*  a b c d e f g h
 +----------------
a| a b c d e f g h
b| b c d a h e f g
c| c d a b g h e f
d| d a b c f g h e
e| e f g h c d a b
f| f g h e b c d a
g| g h e f a b c d
h| h e f g d a b c
Seharusnya cukup jelas bahwa a merupakan unsur identitas grup (\(1\)), baik dari perilakunya dalam tabel maupun dari representasi “baris bawah”-nya sebagai unsur pertama senarai di atas. Jika Anda lebih menyukainya, Anda dapat meminta Sage menampilkan senarai keluarannya ketika dipandang sebagai fungsi.
Kode Sage (cadangan statis)
id = Q.identity()
[id(x) for x in Q.domain()]
Keluaran referensi (cadangan statis)
[1, 2, 3, 4, 5, 6, 7, 8]
Unsur \(-1\) seharusnya mempunyai sifat \(-1\cdot -1= 1\text{.}\) Kita melihat bahwa unsur identitas a muncul pada diagonal tabel Cayley hanya ketika kita menghitung c*c. Hal ini dapat kita verifikasi dengan mudah dengan mengambil unsur ketiga dari judul kolom tabel Cayley. Setelah mengidentifikasi \(-1\text{,}\) begitu kita menemukan \(I\text{,}\) kita dapat menghitung \(-I\) dengan mudah, dan seterusnya.
Kode Sage (cadangan statis)
minus_one = Q.cayley_table().column_keys()[2]
[minus_one(x) for x in Q.domain()]
Keluaran referensi (cadangan statis)
[3, 4, 1, 2, 7, 8, 5, 6]
Kode Sage (cadangan statis)
minus_one*minus_one == Q.identity()
Keluaran referensi (cadangan statis)
True
Cobalah memasangkan huruf-huruf tersebut dengan seluruh delapan unsur kuaternion. Berhati-hatilah ketika memilih nama; simbol I digunakan oleh Sage untuk bilangan imajiner \(i=\sqrt{-1}\) (yang akan kita gunakan di bawah), tetapi Sage secara diam-diam mengizinkan Anda mendefinisikan ulang simbol tersebut menjadi apa pun. Hal yang sama berlaku untuk penggunaan huruf kecil i dalam Sage. Jadi, beri nama unsur kuaternion Anda seperti QI, QJ, QK untuk menghindari kerancuan.
Ketika mulai bekerja dengan grup, bekerja dengan unsur yang sebenarnya akan membantu pemahaman. Akan tetapi, banyak sifat grup sama sekali tidak bergantung pada urutan perkalian yang kita gunakan ataupun nama atau representasi yang kita gunakan untuk unsur-unsurnya. Berikut beberapa fakta tentang kuaternion yang dapat kita hitung tanpa mengetahui bagaimana tepatnya unsur-unsurnya ditulis atau dikalikan.
Kode Sage (cadangan statis)
Q.is_finite()
Keluaran referensi (cadangan statis)
True
Kode Sage (cadangan statis)
Q.order()
Keluaran referensi (cadangan statis)
8
Kode Sage (cadangan statis)
Q.is_abelian()
Keluaran referensi (cadangan statis)
False

Subbagian 3.8.4 Subgrup

Teknik terbaik untuk membuat subgrup akan dibahas dalam bab-bab berikutnya, tetapi kita sudah dapat membuat beberapa grup yang secara alami merupakan subgrup dari grup lain.
Unsur-unsur kuaternion direpresentasikan oleh permutasi tertentu dari bilangan bulat 1 sampai 8. Kita juga dapat membangun grup dari semua permutasi kedelapan bilangan bulat tersebut. Grup ini menjadi cukup besar, jadi jangan mencantumkan seluruh unsurnya kecuali jika Anda menginginkan keluaran yang sangat panjang! (Silakan coba jika berani.)
Kode Sage (cadangan statis)
S8 = SymmetricGroup(8)
a = S8.random_element()
[a(x) for x in S8.domain()]     # random
Keluaran referensi (cadangan statis)
[5, 2, 6, 4, 1, 8, 3, 7]
Kode Sage (cadangan statis)
S8.order()
Keluaran referensi (cadangan statis)
40320
Grup kuaternion, Q, merupakan subgrup dari grup lengkap semua permutasi, yaitu grup simetris \(S_8\) atau S8, dan Sage menyimpan fakta ini sebagai sifat dari Q.
Kode Sage (cadangan statis)
Q.is_subgroup(S8)
Keluaran referensi (cadangan statis)
True
Dalam Sage, bilangan kompleks dikenal dengan nama CC. Kita dapat membuat senarai unsur dalam subgrup yang dijelaskan dalam Contoh 3.2.9. Kemudian kita dapat memverifikasi bahwa himpunan ini merupakan subgrup dengan memeriksa tabel Cayley, menggunakan perkalian sebagai operasinya.
Kode Sage (cadangan statis)
H = [CC(1), CC(-1), CC(I), CC(-I)]
CC.multiplication_table(elements=H,
                        names=['1', '-1', 'i', '-i'])
Keluaran referensi (cadangan statis)
*   1 -1  i -i
  +------------
 1|  1 -1  i -i
-1| -1  1 -i  i
 i|  i -i -1  1
-i| -i  i  1 -1