Lewati ke konten utama

Bagian 16.10 Sage

Gelanggang sangat penting dalam studi Anda mengenai aljabar abstrak, dan demikian pula, gelanggang sangat penting dalam perancangan dan penggunaan Sage. Bab ini memuat banyak materi, dan terdapat banyak perintah yang bersesuaian dalam Sage.

Subbagian 16.10.1 Membuat Gelanggang

Berikut adalah daftar berbagai gelanggang, domain, dan lapangan yang dapat Anda konstruksi dengan mudah.
  1. Integers(), ZZ: daerah integral bilangan bulat positif dan negatif, \({\mathbb Z}\text{.}\)
  2. Integers(n): bilangan bulat modulo \(n\text{,}\) \({\mathbb Z_n}\text{.}\) Merupakan lapangan ketika \(n\) prima, tetapi hanya merupakan gelanggang ketika \(n\) komposit.
  3. QQ: lapangan bilangan rasional, \({\mathbb Q}\text{.}\)
  4. RR, CC: lapangan bilangan real dan lapangan bilangan kompleks, \({\mathbb R}\text{,}\) \({\mathbb C}\text{.}\) Mustahil membuat setiap bilangan real di dalam komputer, sehingga secara teknis himpunan-himpunan ini tidak berperilaku sebagai lapangan, tetapi hanya memberikan tiruan yang baik dari bilangan real sesungguhnya. Untuk menegaskan hal ini, kita menyebutnya gelanggang tak eksak.
  5. QuadraticField(n): lapangan yang dibentuk dengan menggabungkan bilangan rasional dengan suatu solusi persamaan polinomial \(x^2-n=0\text{.}\) Notasi yang digunakan dalam teks adalah \({\mathbb Q}[\sqrt{n}]\text{.}\) Bentuk yang setara secara fungsional dapat dibuat dengan sintaks QQ[sqrt(n)]. Perhatikan bahwa n dapat bernilai negatif.
  6. CyclotomicField(n): lapangan yang dibentuk dengan menggabungkan bilangan rasional dengan solusi-solusi persamaan polinomial \(x^n-1=0\text{.}\)
  7. QQbar: lapangan yang dibentuk dengan menggabungkan bilangan rasional dengan solusi-solusi untuk setiap persamaan polinomial berkoefisien bilangan bulat. Lapangan ini dikenal sebagai lapangan bilangan aljabar, yang dilambangkan dengan \(\overline{{\mathbb Q}}\text{.}\)
  8. FiniteField(p): untuk bilangan prima \(p\text{,}\) lapangan bilangan bulat \({\mathbb Z_p}\text{.}\)
Jika Anda menampilkan deskripsi beberapa gelanggang di atas, terkadang Anda akan melihat simbol baru diperkenalkan. Perhatikan contoh berikut:
Kode Sage (cadangan statis)
F = QuadraticField(7)
F
Keluaran referensi (cadangan statis)
Number Field in a with defining polynomial x^2 - 7
with a = 2.645751311...?
Kode Sage (cadangan statis)
root = F.gen(0)
root^2
Keluaran referensi (cadangan statis)
7
Kode Sage (cadangan statis)
root
Keluaran referensi (cadangan statis)
a
Kode Sage (cadangan statis)
(2*root)^3
Keluaran referensi (cadangan statis)
56*a
Di sini Number Field mendeskripsikan objek yang secara umum dibentuk dengan menggabungkan bilangan rasional dengan bilangan lain (dalam hal ini \(\sqrt{7}\)). “a” adalah simbol baru yang berperilaku sebagai akar polinomial \(x^2-7\text{.}\) Kita tidak menentukan akar yang mana, \(\sqrt{7}\) atau \(-\sqrt{7}\text{,}\) dan ketika pemahaman kita tentang teorinya semakin baik, kita akan melihat bahwa hal ini sebenarnya tidak penting.
Kita dapat memperoleh akar ini sebagai pembangkit lapangan bilangan, lalu memanipulasinya. Pertama, menguadratkan root menghasilkan 7. Perhatikan bahwa root ditampilkan sebagai a. Perhatikan pula bahwa komputasi dengan root berperilaku seolah-olah ia adalah salah satu akar dari \(x^2-7\text{,}\) dan hasilnya ditampilkan menggunakan a.
Hal ini dapat sedikit membingungkan: komputasi dimasukkan dengan root, tetapi keluarannya dinyatakan dalam a. Untungnya, ada cara yang lebih baik. Perhatikan contoh berikut:
Kode Sage (cadangan statis)
F.<b> = QuadraticField(7)
F
Keluaran referensi (cadangan statis)
Number Field in b with defining polynomial x^2 - 7
with b = 2.645751311...?
Kode Sage (cadangan statis)
b^2
Keluaran referensi (cadangan statis)
7
Kode Sage (cadangan statis)
(2*b)^3
Keluaran referensi (cadangan statis)
56*b
Dengan sintaks F.<b>, kita dapat membuat lapangan F sekaligus menetapkan pembangkit b dengan nama pilihan kita. Selanjutnya, komputasi dapat menggunakan b sebagai akar dari \(x^2-7\text{,}\) baik dalam masukan maupun keluaran.
Berikut adalah tiga gelanggang baru yang paling baik dibuat menggunakan sintaks baru ini.
  1. F.<a> = FiniteField(p^n): Kelak kita akan menjumpai teorema yang menyatakan bahwa lapangan hingga hanya ada dengan orde yang berupa pangkat suatu bilangan prima. Ketika pangkat tersebut lebih besar daripada 1, kita memerlukan sebuah pembangkit, yang di sini dinyatakan sebagai a.
  2. P.<x>=R[]: gelanggang semua polinomial dalam variabel x, dengan koefisien dari gelanggang R. Perhatikan bahwa R dapat berupa sembarang gelanggang, sehingga ini merupakan konstruksi yang sangat umum, yang menggunakan satu gelanggang untuk membentuk gelanggang lain. Lihat contoh di bawah.
  3. Q.<r,s,t> = QuaternionAlgebra(n, m): bilangan rasional yang digabungkan dengan indeterminat r, s, dan t sedemikian sehingga \(r^2=n\text{,}\) \(s^2=m\text{,}\) dan \(t = rs = -sr\text{.}\) Ini merupakan perumuman kuaternion yang dideskripsikan dalam bab ini, meskipun atas bilangan rasional dan bukan bilangan real, sehingga merupakan gelanggang eksak. Perhatikan bahwa ini adalah salah satu dari sedikit gelanggang tak komutatif dalam Sage. Kuaternion “biasa” dapat dikonstruksi dengan Q.<I,J,K> = QuaternionAlgebra(-1, -1). (Perhatikan bahwa menggunakan I di sini bukanlah pilihan yang baik, karena hal itu akan menimpa simbol I yang digunakan untuk bilangan kompleks.)
Sintaks untuk menentukan nama pembangkit juga dapat digunakan pada banyak gelanggang di atas, sebagaimana diperagakan di atas untuk lapangan kuadratik dan di bawah untuk lapangan siklotomik.
Kode Sage (cadangan statis)
C.<t> = CyclotomicField(8)
C.random_element()
Keluaran referensi (cadangan statis)
-2/11*t^2 + t - 1

Subbagian 16.10.2 Sifat-Sifat Gelanggang

Contoh-contoh di bawah memperagakan cara menanyakan sifat-sifat tertentu dari gelanggang. Jika Anda ikut mencoba, pastikan untuk menjalankan sel komputasi pertama guna mendefinisikan berbagai gelanggang yang digunakan dalam contoh.
Kode Sage (cadangan statis)
Z7 = Integers(7)
Z9 = Integers(9)
Q = QuadraticField(-11)
F.<a> = FiniteField(3^2)
P.<x> = Z7[]
S.<f,g,h> = QuaternionAlgebra(-7, 3)
Eksak versus tak eksak.
Kode Sage (cadangan statis)
QQ.is_exact()
Keluaran referensi (cadangan statis)
True
Kode Sage (cadangan statis)
RR.is_exact()
Keluaran referensi (cadangan statis)
False
Hingga versus tak hingga.
Kode Sage (cadangan statis)
Z7.is_finite()
Keluaran referensi (cadangan statis)
True
Kode Sage (cadangan statis)
Z7.is_finite()
Keluaran referensi (cadangan statis)
True
Daerah integral?
Kode Sage (cadangan statis)
Z7.is_integral_domain()
Keluaran referensi (cadangan statis)
True
Kode Sage (cadangan statis)
Z9.is_integral_domain()
Keluaran referensi (cadangan statis)
False
Lapangan?
Kode Sage (cadangan statis)
Z9.is_field()
Keluaran referensi (cadangan statis)
False
Kode Sage (cadangan statis)
F.is_field()
Keluaran referensi (cadangan statis)
True
Kode Sage (cadangan statis)
Q.is_field()
Keluaran referensi (cadangan statis)
True
Komutatif?
Kode Sage (cadangan statis)
Q.is_commutative()
Keluaran referensi (cadangan statis)
True
Kode Sage (cadangan statis)
S.is_commutative()
Keluaran referensi (cadangan statis)
False
Karakteristik.
Kode Sage (cadangan statis)
Z7.characteristic()
Keluaran referensi (cadangan statis)
7
Kode Sage (cadangan statis)
Z9.characteristic()
Keluaran referensi (cadangan statis)
9
Kode Sage (cadangan statis)
Q.characteristic()
Keluaran referensi (cadangan statis)
0
Kode Sage (cadangan statis)
F.characteristic()
Keluaran referensi (cadangan statis)
3
Kode Sage (cadangan statis)
P.characteristic()
Keluaran referensi (cadangan statis)
7
Kode Sage (cadangan statis)
S.characteristic()
Keluaran referensi (cadangan statis)
0
Identitas aditif dan multiplikatif ditampilkan sebagaimana yang Anda harapkan, tetapi perhatikan bahwa meskipun keduanya dapat ditampilkan secara identik, keduanya mungkin berbeda karena gelanggang tempat keduanya berada berbeda.
Kode Sage (cadangan statis)
b = Z9.zero(); b
Keluaran referensi (cadangan statis)
0
Kode Sage (cadangan statis)
b.parent()
Keluaran referensi (cadangan statis)
Ring of integers modulo 9
Kode Sage (cadangan statis)
c = Q.zero(); c
Keluaran referensi (cadangan statis)
0
Kode Sage (cadangan statis)
c.parent()
Keluaran referensi (cadangan statis)
Number Field in a with defining polynomial x^2 + 11
with a = 3.316624790...?*I
Kode Sage (cadangan statis)
b == c
Keluaran referensi (cadangan statis)
False
Kode Sage (cadangan statis)
d = Z9.one(); d
Keluaran referensi (cadangan statis)
1
Kode Sage (cadangan statis)
d.parent()
Keluaran referensi (cadangan statis)
Ring of integers modulo 9
Kode Sage (cadangan statis)
e = Q.one(); e
Keluaran referensi (cadangan statis)
1
Kode Sage (cadangan statis)
e.parent()
Keluaran referensi (cadangan statis)
Number Field in a with defining polynomial x^2 + 11
with a = 3.316624790...?*I
Kode Sage (cadangan statis)
d == e
Keluaran referensi (cadangan statis)
False
Sage menyediakan sejumlah dukungan untuk subgelanggang. Sebagai contoh, Q dan S merupakan perluasan bilangan rasional, sedangkan F sama sekali berbeda dari bilangan rasional.
Kode Sage (cadangan statis)
QQ.is_subring(Q)
Keluaran referensi (cadangan statis)
True
Kode Sage (cadangan statis)
QQ.is_subring(S)
Keluaran referensi (cadangan statis)
True
Kode Sage (cadangan statis)
QQ.is_subring(F)
Keluaran referensi (cadangan statis)
False
Tidak setiap elemen suatu gelanggang harus memiliki invers multiplikatif; dengan kata lain, tidak setiap elemen harus merupakan suatu unsur satuan (kecuali jika gelanggang tersebut adalah lapangan). Sekarang merupakan praktik yang baik untuk memeriksa apakah suatu elemen merupakan unsur satuan sebelum Anda mencoba menghitung inversnya.
Kode Sage (cadangan statis)
three = Z9(3)
three.is_unit()
Keluaran referensi (cadangan statis)
False
Kode Sage (cadangan statis)
three*three
Keluaran referensi (cadangan statis)
0
Kode Sage (cadangan statis)
four = Z9(4)
four.is_unit()
Keluaran referensi (cadangan statis)
True
Kode Sage (cadangan statis)
g = four^-1; g
Keluaran referensi (cadangan statis)
7
Kode Sage (cadangan statis)
four*g
Keluaran referensi (cadangan statis)
1

Subbagian 16.10.3 Struktur Hasil Bagi

Ideal merupakan analog subgrup normal pada gelanggang dan memungkinkan kita membangun “hasil bagi” — pada dasarnya, gelanggang baru yang didefinisikan pada kelas-kelas ekuivalensi elemen gelanggang semula. Dukungan Sage untuk ideal bervariasi. Ketika ideal dapat dibuat, tidak selalu banyak hal yang dapat Anda lakukan dengannya. Namun, ideal bekerja dengan baik dalam beberapa kasus yang sangat penting.
Bilangan bulat, \({\mathbb Z}\text{,}\) memiliki ideal yang hanya terdiri atas kelipatan suatu bilangan bulat tunggal. Kita dapat membuatnya dengan metode .ideal() atau cukup dengan menuliskan kelipatan skalar dari ZZ. Kemudian, hasil baginya isomorfik dengan suatu gelanggang yang telah dipahami dengan baik. (Perhatikan bahwa I bukan nama yang baik untuk ideal jika kelak kita hendak bekerja dengan bilangan kompleks.)
Kode Sage (cadangan statis)
I1 = ZZ.ideal(4)
I2 = 4*ZZ
I3 = (-4)*ZZ
I1 == I2
Keluaran referensi (cadangan statis)
True
Kode Sage (cadangan statis)
I2 == I3
Keluaran referensi (cadangan statis)
True
Kode Sage (cadangan statis)
Q = ZZ.quotient(I1); Q
Keluaran referensi (cadangan statis)
Ring of integers modulo 4
Kode Sage (cadangan statis)
Q == Integers(4)
Keluaran referensi (cadangan statis)
True
Biasanya kita mungkin perlu lebih berhati-hati dengan pernyataan terakhir. Hasil bagi tersebut adalah himpunan kelas ekuivalensi, yang masing-masing tak hingga, dan tentu saja bukan sebuah bilangan bulat tunggal. Namun, hasil bagi tersebut isomorfik dengan \({\mathbb Z}_4\text{,}\) sehingga Sage langsung melakukan identifikasi ini.
Kode Sage (cadangan statis)
Z7 = Integers(7)
P.<y> = Z7[]
M = P.ideal(y^2+4)
Q = P.quotient(M)
Q
Keluaran referensi (cadangan statis)
Univariate Quotient Polynomial Ring in ybar over
Ring of integers modulo 7 with modulus y^2 + 4
Kode Sage (cadangan statis)
Q.random_element()
Keluaran referensi (cadangan statis)
2*ybar + 6
Kode Sage (cadangan statis)
Q.order()
Keluaran referensi (cadangan statis)
49
Kode Sage (cadangan statis)
Q.is_field()
Keluaran referensi (cadangan statis)
True
Perhatikan bahwa konstruksi gelanggang hasil bagi telah membuat pembangkit baru, dengan mengubah y(\(y\)) menjadi ybar (\(\overline{y}\)). Seperti sebelumnya, kita dapat mengganti nama ini dengan sintaks yang diperagakan di bawah.
Kode Sage (cadangan statis)
Q.<t> = P.quotient(M); Q
Keluaran referensi (cadangan statis)
Univariate Quotient Polynomial Ring in t over
Ring of integers modulo 7 with modulus y^2 + 4
Kode Sage (cadangan statis)
Q.random_element()
Keluaran referensi (cadangan statis)
4*t + 6
Jadi, dari hasil bagi suatu gelanggang tak hingga oleh suatu ideal (yang juga merupakan gelanggang), kita membuat sebuah lapangan yang hingga. Memahami konstruksi ini akan menjadi tema penting dalam beberapa bab berikutnya. Untuk melihat betapa mengagumkannya hal ini, perhatikan apa yang terjadi jika kita hanya membuat satu perubahan kecil.
Kode Sage (cadangan statis)
Z7 = Integers(7)
P.<y> = Z7[]
M = P.ideal(y^2+3)
Q.<t> = P.quotient(M)
Q
Keluaran referensi (cadangan statis)
Univariate Quotient Polynomial Ring in t over
Ring of integers modulo 7 with modulus y^2 + 3
Kode Sage (cadangan statis)
Q.random_element()
Keluaran referensi (cadangan statis)
3*t + 1
Kode Sage (cadangan statis)
Q.order()
Keluaran referensi (cadangan statis)
49
Kode Sage (cadangan statis)
Q.is_field()
Keluaran referensi (cadangan statis)
False
Tersedia beberapa metode yang memberikan sifat-sifat ideal. Secara khusus, kita dapat memeriksa ideal prima dan ideal maksimal dalam gelanggang polinomial. Tinjau hasil-hasil di atas dan di bawah dalam konteks Teorema 16.4.1.
Kode Sage (cadangan statis)
Z7 = Integers(7)
P.<y> = Z7[]
M = P.ideal(y^2+4)
N = P.ideal(y^2+3)
M.is_maximal()
Keluaran referensi (cadangan statis)
True
Kode Sage (cadangan statis)
N.is_maximal()
Keluaran referensi (cadangan statis)
False
Fakta bahwa M merupakan ideal prima memverifikasi Korolari 16.4.6.
Kode Sage (cadangan statis)
M.is_prime()
Keluaran referensi (cadangan statis)
True
Kode Sage (cadangan statis)
N.is_prime()
Keluaran referensi (cadangan statis)
False

Subbagian 16.10.4 Homomorfisma Gelanggang

Ketika Sage menerima 3 + 4/3, bagaimana Sage mengetahui bahwa 3 dimaksudkan sebagai bilangan bulat? Kemudian, untuk menambahkannya dengan bilangan rasional, bagaimana Sage mengetahui bahwa kita sebenarnya ingin memandang komputasi tersebut sebagai 3/1 + 4/3? Hal ini sangat mudah bagi Anda dan saya, tetapi luar biasa sulit bagi sebuah program, dan Anda dapat membayangkan bahwa persoalannya menjadi semakin rumit karena banyaknya kemungkinan gelanggang dalam Sage, subgelanggang, matriks, dan sebagainya. Sebagian jawabannya adalah bahwa Sage menggunakan homomorfisma gelanggang untuk “menerjemahkan” objek (bilangan) di antara gelanggang-gelanggang.
Kita akan memberikan sebuah contoh di bawah, tetapi tidak akan membahas topik ini lebih jauh. Bagi pembaca yang ingin tahu lebih lanjut, membaca dokumentasi Sage dan melakukan eksperimen akan menjadi latihan yang baik.
Kode Sage (cadangan statis)
H = Hom(ZZ, QQ)
phi = H([1])
phi
Keluaran referensi (cadangan statis)
Ring morphism:
  From: Integer Ring
  To:   Rational Field
  Defn: 1 |--> 1
Kode Sage (cadangan statis)
phi.parent()
Keluaran referensi (cadangan statis)
Set of Homomorphisms from Integer Ring to Rational Field
Kode Sage (cadangan statis)
a = 3; a
Keluaran referensi (cadangan statis)
3
Kode Sage (cadangan statis)
a.parent()
Keluaran referensi (cadangan statis)
Integer Ring
Kode Sage (cadangan statis)
b = phi(3); b
Keluaran referensi (cadangan statis)
3
Kode Sage (cadangan statis)
b.parent()
Keluaran referensi (cadangan statis)
Rational Field
Jadi, phi adalah suatu homomorfisma (“morfisme”) yang mengubah bilangan bulat (domainnya adalah ZZ) menjadi bilangan rasional (kodomainnya adalah QQ), dan induknya merupakan himpunan homomorfisma yang oleh Sage disebut “homset.” Meskipun a dan b sama-sama ditampilkan sebagai 3, sehingga tampak tidak dapat dibedakan oleh mata kita, induk dari a dan induk dari b berbeda. Namun, nilai numerik kedua objek tersebut tidak berubah.