Lewati ke konten utama

Toric code

Berikutnya kita akan membahas kode CSS tertentu yang dikenal sebagai toric code, yang ditemukan oleh Alexei Kitaev pada tahun 1997. Sebenarnya, toric code bukan satu kode tunggal, melainkan sebuah keluarga kode, satu untuk setiap bilangan bulat positif mulai dari 2. Kode-kode ini memiliki beberapa properti kunci:

  • Generator stabilizer memiliki bobot rendah, dan khususnya semuanya memiliki bobot 4. Dalam terminologi teori kode, toric code adalah contoh kode parity check densitas rendah kuantum, atau quantum LDPC code (di mana rendah berarti 4 dalam hal ini). Ini bagus karena setiap pengukuran generator stabilizer tidak perlu melibatkan terlalu banyak qubit.

  • Toric code memiliki lokalitas geometris. Ini berarti tidak hanya generator stabilizer memiliki bobot rendah, tetapi juga memungkinkan untuk mengatur qubit secara spasial sehingga setiap pengukuran generator stabilizer hanya melibatkan qubit yang berdekatan. Pada prinsipnya, ini membuat pengukuran tersebut lebih mudah diimplementasikan dibanding jika melibatkan qubit yang berjauhan secara spasial.

  • Anggota keluarga toric code memiliki jarak yang semakin besar dan bisa menoleransi tingkat kesalahan yang cukup tinggi.

Deskripsi toric code​

Misalkan Lβ‰₯2L\geq 2 adalah bilangan bulat positif, dan pertimbangkan kisi LΓ—LL\times L dengan batas-batas yang disebut batas periodik. Sebagai contoh, gambar ini menggambarkan kisi LΓ—LL\times L untuk L=9.L=9.

Kisi 9-kali-9 dengan batas periodik

Perhatikan bahwa garis di sisi kanan dan di bagian bawah adalah garis putus-putus. Ini dimaksudkan untuk menunjukkan bahwa garis putus-putus di sebelah kanan adalah garis yang sama dengan garis di sisi kiri, dan demikian pula, garis putus-putus di bagian bawah adalah garis yang sama dengan yang ada di bagian atas.

Untuk mewujudkan konfigurasi seperti ini secara fisik memerlukan tiga dimensi. Khususnya, kita bisa membentuk kisi menjadi silinder dengan pertama mencocokkan sisi kiri dan kanan, kemudian menekuk silinder sehingga lingkaran di kedua ujungnya, yang tadinya merupakan tepi atas dan bawah kisi, bertemu. Atau kita bisa mencocokkan bagian atas dan bawah dulu kemudian sisinya; keduanya bisa dilakukan dan tidak masalah mana yang dipilih untuk keperluan diskusi ini.

Yang kita peroleh adalah sebuah torus β€” atau dengan kata lain, sebuah donat (meskipun membayangkannya sebagai ban dalam lebih tepat karena ini bukan benda padat: kisi tersebut telah menjadi hanya permukaan torus). Inilah asal nama "toric code".

Kisi 9-kali-9 yang dibentuk menjadi torus

Cara seseorang dapat "bergerak" pada torus seperti ini, di antara titik-titik yang berdekatan pada kisi, mungkin sudah familiar bagi mereka yang pernah bermain video game jadul, di mana bergerak melewati bagian atas layar menyebabkan kamu muncul di bagian bawah, dan begitu pula untuk tepi kiri dan kanan layar. Inilah cara kita akan memandang kisi dengan batas periodik ini, bukan berbicara secara spesifik tentang torus dalam ruang 3-dimensi.

Selanjutnya, qubit disusun pada tepi kisi ini, seperti yang digambarkan pada gambar berikut, di mana qubit ditunjukkan oleh lingkaran biru solid.

Qubit pada tepi kisi periodik 9-kali-9

Perhatikan bahwa qubit yang ditempatkan pada garis putus-putus tidak solid karena mereka sudah terwakili pada garis paling atas dan paling kiri di kisi. Secara total ada 2L22L^2 qubit: L2L^2 qubit pada garis horizontal dan L2L^2 qubit pada garis vertikal.

Untuk mendeskripsikan toric code itu sendiri, yang tersisa adalah mendeskripsikan generator stabilizer:

  • Untuk setiap ubin yang terbentuk oleh garis-garis di kisi terdapat satu generator stabilizer ZZ, diperoleh dengan men-tensor matriks ZZ pada empat qubit yang menyentuh ubin tersebut bersama matriks identitas pada semua qubit lainnya.

  • Untuk setiap simpul yang terbentuk oleh garis-garis di kisi terdapat satu generator stabilizer XX, diperoleh dengan men-tensor matriks XX pada empat qubit yang berdekatan dengan simpul tersebut bersama matriks identitas pada semua qubit lainnya.

Dalam kedua kasus kita mendapatkan operasi Pauli berbobot 4. Secara individual, generator stabilizer ini dapat digambarkan sebagai berikut.

Tipe generator stabilizer untuk toric code

Berikut adalah ilustrasi yang menunjukkan beberapa contoh generator stabilizer dalam konteks kisi itu sendiri. Perhatikan bahwa generator stabilizer yang melingkari batas periodik disertakan. Generator yang melingkari batas periodik ini tidak istimewa atau berbeda dengan cara apapun dari yang tidak melingkarinya.

Contoh generator stabilizer pada kisi

Generator stabilizer harus komut agar ini menjadi kode stabilizer yang valid. Seperti biasa, generator stabilizer ZZ semuanya komut satu sama lain, karena ZZ komut dengan dirinya sendiri dan identitas komut dengan segalanya, dan begitu pula untuk generator stabilizer XX. Generator stabilizer ZZ dan XX jelas komut ketika mereka bertindak secara nontrivial pada himpunan qubit yang tidak beririsan, seperti contoh yang ditunjukkan pada gambar sebelumnya. Kemungkinan yang tersisa adalah generator stabilizer ZZ dan generator stabilizer XX bertumpang tindih pada qubit tempat mereka bertindak secara nontrivial, dan kapanpun ini terjadi generator harus selalu bertumpang tindih pada dua qubit, seperti pada gambar berikutnya.

Generator stabilizer yang bertumpang tindih untuk toric code

Akibatnya, dua generator stabilizer seperti ini komut, sama seperti ZβŠ—ZZ\otimes Z dan XβŠ—XX\otimes X komut. Oleh karena itu semua generator stabilizer saling komut.

Kondisi kedua yang diperlukan pada generator stabilizer untuk kode stabilizer adalah bahwa mereka membentuk himpunan pembangkit minimal. Kondisi ini sebenarnya tidak dipenuhi oleh koleksi ini: jika kita mengalikan semua generator stabilizer ZZ bersama-sama, kita mendapatkan operasi identitas, dan begitu pula untuk generator stabilizer XX. Dengan demikian, setiap satu generator stabilizer ZZ dapat dinyatakan sebagai hasil kali semua yang lain, dan demikian pula, setiap satu generator stabilizer XX dapat dinyatakan sebagai hasil kali generator stabilizer XX yang tersisa. Namun, jika kita menghapus satu generator stabilizer ZZ dan satu generator stabilizer XX, kita memang mendapatkan himpunan pembangkit minimal.

Untuk memperjelas hal ini, kita memang peduli sama rata tentang semua generator stabilizer, dan dalam arti operasional yang ketat tidak perlu memilih satu generator stabilizer dari setiap jenis untuk dihapus. Tapi, demi menganalisis kode β€” dan menghitung generator khususnya β€” kita bisa membayangkan bahwa satu generator stabilizer dari setiap jenis telah dihapus, sehingga kita mendapatkan himpunan pembangkit minimal, dengan mengingat bahwa kita selalu bisa menyimpulkan hasil dari generator yang dihapus ini (anggap sebagai observabel) dari hasil semua observabel generator stabilizer lain dari jenis yang sama.

Ini menyisakan L2βˆ’1L^2 - 1 generator stabilizer dari setiap jenis, atau 2L2βˆ’22L^2 - 2 secara total, dalam himpunan pembangkit minimal (hipotetis). Mengingat ada 2L22L^2 qubit secara total, ini berarti toric code mengodekan 2L2βˆ’2(L2βˆ’1)=22L^2 - 2 (L^2 - 1) = 2 qubit.

Kondisi terakhir yang diperlukan dari generator stabilizer adalah bahwa setidaknya satu vektor keadaan kuantum tetap oleh semua generator stabilizer. Kita akan melihat bahwa ini memang demikian saat kita melanjutkan analisis kode, namun juga mungkin untuk menalar bahwa tidak ada cara untuk menghasilkan βˆ’1-1 kali identitas pada semua 2L22L^2 qubit dari generator stabilizer.

Mendeteksi kesalahan​

Toric code memiliki deskripsi yang sederhana dan elegan, tetapi properti koreksi kesalahan kuantumnya mungkin tidak jelas pada pandangan pertama. Ternyata, ini adalah kode yang luar biasa! Untuk memahami mengapa dan bagaimana cara kerjanya, mari kita mulai dengan mempertimbangkan kesalahan yang berbeda dan sindrom yang dihasilkannya.

Toric code adalah kode CSS, karena semua generator stabilizer kita adalah generator stabilizer ZZ atau XX. Ini berarti kesalahan XX dan kesalahan ZZ dapat dideteksi (dan mungkin dikoreksi) secara terpisah. Nyatanya, ada simetri sederhana antara generator stabilizer ZZ dan XX yang memungkinkan kita menganalisis kesalahan XX dan kesalahan ZZ pada dasarnya dengan cara yang sama. Jadi, kita akan fokus pada kesalahan XX, yang mungkin terdeteksi oleh generator stabilizer ZZ β€” tetapi seluruh diskusi berikut ini dapat diterjemahkan dari kesalahan XX ke kesalahan ZZ, yang analognya terdeteksi oleh generator stabilizer XX.

Diagram berikut menggambarkan efek kesalahan XX pada satu qubit. Di sini, asumsinya adalah bahwa 2L22L^2 qubit kita sebelumnya berada dalam keadaan yang terkandung dalam ruang kode toric code, menyebabkan semua pengukuran generator stabilizer menghasilkan +1.+1. Generator stabilizer ZZ mendeteksi kesalahan XX, dan terdapat satu generator stabilizer seperti itu untuk setiap ubin di gambar, jadi kita dapat menunjukkan hasil pengukuran dari generator stabilizer yang sesuai dengan warna ubin tersebut: hasil +1+1 ditunjukkan oleh ubin putih dan hasil βˆ’1-1 ditunjukkan oleh ubin abu-abu. Jika terjadi kesalahan bit-flip pada salah satu qubit, efeknya adalah pengukuran generator stabilizer yang sesuai dengan dua ubin yang menyentuh qubit yang terpengaruh sekarang menghasilkan βˆ’1.-1.

Efek kesalahan bit-flip tunggal pada toric code

Ini intuitif ketika kita mempertimbangkan generator stabilizer ZZ dan cara kerjanya. Pada intinya, setiap generator stabilizer ZZ mengukur paritas dari empat qubit yang menyentuh ubin yang sesuai (terhadap basis standar). Jadi, hasil +1+1 tidak menunjukkan bahwa tidak ada kesalahan XX yang terjadi pada empat qubit ini, melainkan menunjukkan bahwa jumlah genap kesalahan XX telah terjadi pada qubit-qubit ini, sedangkan hasil βˆ’1-1 menunjukkan bahwa jumlah ganjil kesalahan XX telah terjadi. Satu kesalahan XX oleh karena itu membalik paritas dari empat bit pada kedua ubin yang disentuhnya, menyebabkan pengukuran generator stabilizer menghasilkan βˆ’1.-1.

Selanjutnya mari kita perkenalkan beberapa kesalahan XX untuk melihat apa yang terjadi. Khususnya, kita akan mempertimbangkan rantai kesalahan XX yang berdekatan, di mana dua kesalahan XX berdekatan jika mereka mempengaruhi qubit yang menyentuh ubin yang sama.

Efek rantai kesalahan bit-flip pada toric code

Dua generator stabilizer ZZ di ujung rantai keduanya memberikan hasil βˆ’1-1 dalam kasus ini, karena jumlah ganjil kesalahan XX telah terjadi pada dua ubin yang sesuai tersebut. Semua generator stabilizer ZZ lainnya, di sisi lain, memberikan hasil +1,+1, termasuk yang menyentuh rantai tetapi tidak di ujungnya, karena jumlah genap kesalahan XX telah terjadi pada qubit yang menyentuh ubin yang sesuai.

Dengan demikian, selama kita memiliki rantai kesalahan XX yang memiliki titik ujung, toric code akan mendeteksi bahwa kesalahan telah terjadi, menghasilkan hasil pengukuran βˆ’1-1 untuk generator stabilizer ZZ yang sesuai dengan titik ujung rantai. Perhatikan bahwa rantai kesalahan yang sebenarnya tidak terungkap, hanya titik ujungnya! Ini tidak masalah β€” di subbagian berikutnya kita akan melihat bahwa kita tidak perlu tahu persis qubit mana yang terpengaruh oleh kesalahan XX untuk mengoreksinya. (Toric code adalah contoh kode yang sangat degeneratif, dalam arti umumnya tidak mengidentifikasi secara unik kesalahan yang dikoreksinya.)

Namun, mungkin saja rantai kesalahan XX yang berdekatan tidak memiliki titik ujung, yang berarti bahwa rantai kesalahan bisa membentuk lingkaran tertutup, seperti pada gambar berikut.

Lingkaran tertutup kesalahan bit-flip untuk toric code

Dalam kasus seperti itu, jumlah genap kesalahan XX telah terjadi pada setiap ubin, sehingga setiap pengukuran generator stabilizer menghasilkan hasil +1+1. Lingkaran tertutup dari kesalahan XX yang berdekatan oleh karena itu tidak terdeteksi oleh kode.

Ini mungkin terasa mengecewakan, karena kita hanya membutuhkan empat kesalahan XX untuk membentuk lingkaran tertutup (dan kita berharap sesuatu yang jauh lebih baik dari kode berjarak 4). Namun, lingkaran tertutup kesalahan XX seperti yang digambarkan pada gambar sebelumnya sebenarnya bukan kesalahan β€” karena ada di dalam stabilizer! Ingat bahwa, selain generator stabilizer ZZ, kita juga memiliki generator stabilizer XX untuk setiap simpul di kisi. Dan jika kita mengalikan generator stabilizer XX yang berdekatan bersama-sama, hasilnya adalah kita memperoleh lingkaran tertutup operasi XX. Sebagai contoh, lingkaran tertutup pada gambar sebelumnya dapat diperoleh dengan mengalikan generator stabilizer XX yang ditunjukkan pada gambar berikut.

Lingkaran tertutup kesalahan bit-flip yang dihasilkan oleh generator stabilizer X

Namun, ini bukan satu-satunya jenis lingkaran tertutup kesalahan XX yang bisa kita miliki β€” dan bukan berarti setiap lingkaran tertutup kesalahan XX termasuk dalam stabilizer. Khususnya, berbagai jenis lingkaran dapat dikategorikan sebagai berikut.

  1. Lingkaran tertutup kesalahan XX dengan jumlah genap kesalahan XX pada setiap garis horizontal dan setiap garis vertikal qubit. (Contoh yang ditunjukkan di atas termasuk dalam kategori ini.) Lingkaran dalam bentuk ini selalu terkandung dalam stabilizer, karena mereka dapat secara efektif diperkecil menjadi tidak ada dengan mengalikannya dengan generator stabilizer XX.

  2. Lingkaran tertutup kesalahan XX dengan jumlah ganjil kesalahan XX pada setidaknya satu garis horizontal atau setidaknya satu garis vertikal qubit. Lingkaran dalam bentuk ini tidak pernah terkandung dalam stabilizer dan oleh karena itu mewakili kesalahan nontrivial yang tidak terdeteksi oleh kode.

Contoh lingkaran tertutup kesalahan XX dalam kategori kedua ditunjukkan pada diagram berikut.

Lingkaran tertutup kesalahan bit-flip yang tidak ada dalam stabilizer

Rantai kesalahan seperti itu tidak terkandung dalam stabilizer karena setiap generator stabilizer XX menempatkan jumlah genap operasi XX pada setiap garis horizontal dan setiap garis vertikal qubit. Ini oleh karena itu merupakan contoh nyata dari kesalahan nontrivial yang gagal dideteksi oleh kode.

Kuncinya adalah bahwa satu-satunya cara untuk membentuk lingkaran jenis kedua adalah dengan mengelilingi torus, artinya baik mengelilingi lubang di tengah torus, melaluinya, atau keduanya. Secara intuitif, rantai kesalahan XX seperti ini tidak dapat diperkecil menjadi tidak ada dengan mengalikannya dengan generator stabilizer XX karena topologi torus menghalanginya. Toric code terkadang dikategorikan sebagai kode koreksi kesalahan kuantum topologis karena alasan ini. Panjang minimum lingkaran seperti itu adalah L,L, dan oleh karena itu inilah jarak toric code: setiap lingkaran tertutup kesalahan XX dengan panjang kurang dari LL harus masuk dalam kategori pertama, dan oleh karena itu terkandung dalam stabilizer; dan setiap rantai kesalahan XX dengan titik ujung terdeteksi oleh kode.

Mengingat bahwa toric code menggunakan 2L22L^2 qubit untuk mengodekan 22 qubit dan memiliki jarak L,L, maka ini adalah kode stabilizer [[2L2,2,L]][[2L^2,2,L]].

Mengoreksi kesalahan​

Kita telah membahas deteksi kesalahan untuk toric code, dan sekarang kita akan secara singkat membahas cara mengoreksi kesalahan. Toric code adalah kode CSS, sehingga kesalahan XX dan ZZ dapat dideteksi dan dikoreksi secara independen. Tetap berfokus pada generator stabilizer ZZ, yang mendeteksi kesalahan XX, mari kita pertimbangkan bagaimana rantai kesalahan XX dapat dikoreksi. (Kesalahan ZZ dikoreksi dengan cara yang simetris.)

Jika sindrom yang berbeda dari sindrom (+1,…,+1)(+1,\ldots,+1) muncul ketika generator stabilizer ZZ diukur, hasil βˆ’1-1 mengungkapkan titik ujung dari satu atau lebih rantai kesalahan XX. Kita dapat mencoba mengoreksi kesalahan ini dengan memasangkan hasil βˆ’1-1 dan membentuk rantai koreksi XX di antara mereka. Saat melakukan ini, masuk akal untuk memilih jalur terpendek di mana koreksi dilakukan.

Misalnya, pertimbangkan diagram berikut, yang menggambarkan sindrom dengan dua hasil βˆ’1-1, ditunjukkan oleh ubin abu-abu, yang disebabkan oleh rantai kesalahan XX yang diilustrasikan oleh garis dan lingkaran magenta. Seperti yang telah kita catat, rantai itu sendiri tidak terungkap oleh sindrom; hanya titik ujungnya yang terlihat.

Mengoreksi kesalahan X dengan jalur terpendek

Untuk mencoba mengoreksi rantai kesalahan ini, jalur terpendek antara hasil pengukuran βˆ’1-1 dipilih dan gate XX diterapkan sebagai koreksi pada qubit di sepanjang jalur ini (ditunjukkan dalam warna kuning pada gambar). Meskipun koreksi mungkin tidak cocok dengan rantai kesalahan yang sebenarnya, kesalahan dan koreksi bersama membentuk lingkaran tertutup operasi XX yang terkandung dalam stabilizer kode. Koreksi oleh karena itu berhasil dalam situasi ini, karena efek gabungan dari kesalahan dan koreksi adalah tidak melakukan apa-apa pada keadaan yang dikodekan.

Strategi ini tidak selalu berhasil. Misalnya, penjelasan berbeda untuk sindrom yang sama seperti pada gambar sebelumnya ditunjukkan pada gambar berikut.

Menyelesaikan kesalahan logis dengan koreksi

Kali ini, rantai koreksi yang sama seperti sebelumnya gagal mengoreksi rantai kesalahan ini, karena efek gabungan dari kesalahan dan koreksi adalah kita mendapatkan lingkaran tertutup operasi XX yang mengelilingi torus, dan oleh karena itu memiliki efek nontrivial pada ruang kode. Jadi, tidak ada jaminan bahwa strategi yang baru saja dijelaskan, memilih jalur terpendek koreksi XX antara dua hasil sindrom pengukuran βˆ’1-1, akan benar-benar mengoreksi kesalahan yang menyebabkan sindrom ini.

Mungkin lebih mungkin, tergantung pada model noise, adalah bahwa sindrom dengan lebih dari dua entri βˆ’1-1 diukur, seperti yang disarankan gambar berikut.

Beberapa rantai koreksi

Dalam kasus seperti itu, ada strategi koreksi yang berbeda yang diketahui. Satu strategi alami adalah mencoba memasangkan hasil pengukuran βˆ’1-1 dan melakukan koreksi sepanjang jalur terpendek yang menghubungkan pasangan-pasangan, seperti yang ditunjukkan dalam gambar dalam warna kuning. Khususnya, pencocokan sempurna bobot minimum antara hasil pengukuran βˆ’1-1 dapat dihitung, kemudian pasangan dihubungkan dengan jalur terpendek koreksi XX. Perhitungan pencocokan sempurna bobot minimum dapat dilakukan secara efisien dengan algoritma klasik yang dikenal sebagai algoritma blossom, yang ditemukan oleh Edmonds pada tahun 1960-an.

Pendekatan ini umumnya tidak optimal untuk model noise yang paling banyak dipelajari, tetapi berdasarkan simulasi numerik bekerja sangat baik dalam praktiknya di bawah tingkat noise sekitar 10%, dengan asumsi kesalahan Pauli independen di mana X,X, Y,Y, dan Z,Z, sama-sama mungkin terjadi. Meningkatkan LL tidak memiliki efek signifikan pada titik impas di mana kode mulai membantu, tetapi menyebabkan penurunan lebih cepat dalam probabilitas terjadinya kesalahan logis saat tingkat kesalahan turun di bawah titik impas.

Source: IBM Quantum docs β€” updated 10 Feb 2026
English version on doQumentation β€” updated 7 Mei 2026
This translation based on the English version of approx. 27 Mar 2026