Lewati ke konten utama

Kode CSS

Kode linear klasik​

Kode koreksi kesalahan klasik pertama kali dipelajari pada tahun 1940-an, dan sekarang sudah banyak kode yang diketahui, di mana kode yang paling umum dipelajari dan digunakan masuk ke dalam kategori yang disebut kode linear. Kita akan melihat arti kata "linear" dalam konteks ini sebentar lagi, tapi cara sederhana untuk menjelaskan kode linear saat ini adalah bahwa mereka adalah kode stabilizer yang kebetulan bersifat klasik. Kode CSS pada dasarnya adalah pasangan kode linear klasik yang digabungkan untuk membentuk kode koreksi kesalahan kuantum. Jadi, demi pembahasan berikut ini, kita perlu memahami beberapa hal dasar tentang kode linear klasik.

Misalkan Ξ£\Sigma adalah alfabet biner untuk seluruh pembahasan ini. Ketika kita menyebut kode linear klasik, yang kita maksud adalah himpunan non-kosong CβŠ†Ξ£n\mathcal{C}\subseteq\Sigma^n dari string biner dengan panjang n,n, untuk suatu bilangan bulat positif n,n, yang harus memenuhi satu sifat dasar: jika uu dan vv adalah string biner dalam C,\mathcal{C}, maka string uβŠ•vu\oplus v juga ada dalam C.\mathcal{C}. Di sini, uβŠ•vu\oplus v mengacu pada exclusive-OR bitwise dari uu dan v,v, seperti yang kita temui berkali-kali dalam kursus "Fundamentals of quantum algorithms".

Pada intinya, ketika kita menyebut kode koreksi kesalahan klasik sebagai linear, kita memikirkan string biner dengan panjang nn sebagai vektor berdimensi n,n, di mana entri-entrinya adalah 00 atau 1,1, dan mengharuskan kode itu sendiri membentuk subruang linear. Namun, alih-alih penjumlahan vektor biasa atas bilangan real atau kompleks, kita menggunakan penjumlahan modulo 2,2, yang merupakan exclusive-OR. Artinya, jika kita punya dua codeword uu dan v,v, yang berarti uu dan vv adalah string biner dalam C,\mathcal{C}, maka u+vu + v modulo 2, yaitu uβŠ•v,u\oplus v, juga harus menjadi codeword dalam C.\mathcal{C}. Perhatikan, khususnya, bahwa implikasi ini harus benar bahkan jika u=v.u = v. Ini berarti C\mathcal{C} harus menyertakan string all-zero 0n,0^n, karena exclusive-OR bitwise dari string apapun dengan dirinya sendiri adalah string all-zero.

Contoh: kode repetisi 3-bit​

Kode repetisi 3-bit adalah contoh kode linear klasik. Secara khusus, kita punya C={000,111},\mathcal{C} = \{000,111\}, jadi, berkaitan dengan kondisi linearitas, hanya ada dua pilihan untuk uu dan dua pilihan untuk v.v. Mudah untuk menelusuri keempat pasangan yang mungkin dan melihat bahwa kita selalu mendapatkan codeword ketika mengambil exclusive-OR bitwise:

000βŠ•000=000,000βŠ•111=111,111βŠ•000=111,111βŠ•111=000.000 \oplus 000 = 000, \quad 000 \oplus 111 = 111, \quad 111 \oplus 000 = 111, \quad 111 \oplus 111 = 000.

Contoh: kode [7,4,3][7,4,3]-Hamming​

Ini adalah contoh lain dari kode linear klasik yang disebut kode [7,4,3][7,4,3]-Hamming. Ini adalah salah satu kode koreksi kesalahan klasik pertama yang pernah ditemukan, dan terdiri dari 16 string biner dengan panjang 7. (Terkadang kode [7,4,3][7,4,3]-Hamming dipahami sebagai kode dengan string-string ini dibalik, tapi kita akan menggunakannya sebagai kode yang memuat string-string yang ditampilkan di sini.)

0000000110000110100100110011011010010101011100110000011111110000011001010101010010111001100010110100111101111111\begin{array}{cccc} 0000000 & 1100001 & 1010010 & 0110011\\[1mm] 0110100 & 1010101 & 1100110 & 0000111\\[1mm] 1111000 & 0011001 & 0101010 & 1001011\\[1mm] 1001100 & 0101101 & 0011110 & 1111111 \end{array}

Ada logika yang sangat sederhana di balik pemilihan string-string ini, tapi itu adalah hal sekunder dari pelajaran dan tidak akan dijelaskan di sini. Untuk sekarang, cukup untuk mengamati bahwa ini adalah kode linear klasik: meng-XOR dua string manapun dari string-string ini akan selalu menghasilkan string lain yang ada dalam kode.

Notasi [7,4,3][7,4,3] (dalam tanda kurung siku tunggal) memiliki arti yang analog dengan notasi tanda kurung siku ganda untuk kode stabilizer yang disebutkan dalam pelajaran sebelumnya, tapi di sini untuk kode linear klasik. Secara khusus, codeword memiliki 77 bit, kita bisa mengenkode 44 bit menggunakan kode (karena ada 16=2416 = 2^4 codeword), dan kebetulan ini adalah kode jarak 3,3, yang berarti dua codeword yang berbeda harus berbeda setidaknya di 33 posisi β€” jadi setidaknya 33 bit harus dibalik untuk mengubah satu codeword menjadi codeword lain. Fakta bahwa ini adalah kode jarak 33 berarti kode ini bisa mengoreksi hingga satu kesalahan bit-flip.

Mendeskripsikan kode linear klasik​

Contoh-contoh yang baru saja disebutkan adalah contoh sangat sederhana dari kode linear klasik, tapi bahkan kode [7,4,3][7,4,3]-Hamming terlihat agak misterius ketika codeword-nya hanya didaftarkan. Ada cara yang lebih baik dan lebih efisien untuk mendeskripsikan kode linear klasik, termasuk dua cara berikut.

  1. Generator. Satu cara untuk mendeskripsikan kode linear klasik adalah dengan daftar minimal codeword yang menghasilkan kode tersebut, artinya dengan mengambil semua subset yang mungkin dari codeword-codeword ini dan meng-XOR mereka bersama, kita mendapatkan seluruh kode.

    Lebih rinci, string u1,…,um∈Σnu_1,\ldots,u_m\in\Sigma^n menghasilkan kode linear klasik C\mathcal{C} jika

    C={Ξ±1u1βŠ•β‹―βŠ•Ξ±mum : α1,…,Ξ±m∈{0,1}},\mathcal{C} = \bigl\{\alpha_1 u_1 \oplus \cdots \oplus \alpha_m u_m\,:\,\alpha_1,\ldots,\alpha_m\in\{0,1\}\bigr\},

    dengan pengertian bahwa Ξ±u=u\alpha u = u ketika Ξ±=1\alpha = 1 dan Ξ±u=0n\alpha u = 0^n ketika Ξ±=0,\alpha = 0, dan kita katakan bahwa daftar ini minimal jika menghapus salah satu string menghasilkan kode yang lebih kecil. Cara alami untuk memikirkan deskripsi seperti itu adalah bahwa koleksi {u1,…,um}\{u_1,\ldots,u_m\} membentuk sebuah basis untuk C\mathcal{C} sebagai subruang, di mana kita memikirkan string sebagai vektor dengan entri bernilai biner, mengingat bahwa kita bekerja dalam ruang vektor di mana aritmatika dilakukan modulo 2.2.

  2. Parity check. Cara alami lainnya untuk mendeskripsikan kode linear klasik adalah dengan parity check β€” yaitu daftar minimal string biner di mana string-string dalam kode adalah persis yang memiliki dot product biner dengan setiap string parity check ini bernilai nol. (Mirip dengan exclusive-OR bitwise, dot product biner muncul beberapa kali dalam "Fundamentals of quantum algorithms".)

    Artinya, string v1,…,vr∈Σnv_1,\ldots,v_r\in\Sigma^n adalah string parity check untuk kode linear klasik C\mathcal{C} jika

    C={u∈Σn : uβ‹…v1=β‹―=uβ‹…vr=0},\mathcal{C} = \bigl\{ u\in \Sigma^n\,:\, u\cdot v_1 = \cdots = u \cdot v_r = 0 \bigr\},

    dan himpunan string ini minimal jika menghapus satu menghasilkan kode yang lebih besar. Ini disebut string parity check karena uu memiliki dot product biner sama dengan nol dengan vv jika dan hanya jika bit-bit uu di posisi di mana vv memiliki angka 1 memiliki paritas genap. Jadi, untuk menentukan apakah string uu ada dalam kode C,\mathcal{C}, cukup untuk memeriksa paritas subset tertentu dari bit-bit u.u.

    Hal penting yang perlu diperhatikan di sini adalah bahwa dot product biner bukanlah inner product dalam pengertian formal. Secara khusus, ketika dua string memiliki dot product biner sama dengan nol, itu tidak berarti bahwa mereka ortogonal dengan cara biasa kita memikirkan ortogonalitas. Misalnya, dot product biner dari string 1111 dengan dirinya sendiri adalah nol β€” jadi mungkin saja string parity check untuk kode linear klasik ada di dalam kode itu sendiri.

Kode linear klasik atas alfabet biner selalu menyertakan sejumlah string yang merupakan pangkat 22 β€” dan untuk kode linear klasik tunggal yang dideskripsikan dalam dua cara berbeda yang baru saja dijelaskan, akan selalu berlaku bahwa n=m+r.n = m + r. Secara khusus, jika kita memiliki himpunan minimal mm generator, maka kode mengenkode mm bit dan kita pasti akan memiliki 2m2^m codeword; dan jika kita memiliki himpunan minimal rr string parity check, maka kita akan memiliki 2nβˆ’r2^{n-r} codeword. Jadi, setiap generator menggandakan ukuran ruang kode sementara setiap string parity check mengurangi separuh ukuran ruang kode.

Misalnya, kode repetisi 3-bit adalah kode linear, jadi bisa dideskripsikan dalam kedua cara ini. Secara khusus, hanya ada satu pilihan generator yang berfungsi: 111.111. Kita bisa secara alternatif mendeskripsikan kode dengan dua string parity check, seperti 110110 dan 011011 β€” yang sudah familiar dari pembahasan kode ini sebelumnya β€” atau kita bisa menggunakan string parity check 110110 dan 101,101, atau 101101 dan 011.011. (Generator dan string parity check umumnya tidak unik untuk kode linear klasik tertentu.)

Untuk contoh kedua, pertimbangkan kode [7,4,3][7,4,3]-Hamming. Berikut adalah satu pilihan untuk daftar generator yang berfungsi.

1111000011010010100101100001\begin{array}{c} 1111000\\[1mm] 0110100\\[1mm] 1010010\\[1mm] 1100001 \end{array}

Dan berikut adalah pilihan untuk daftar parity check untuk kode ini.

111100011001101010101\begin{array}{c} 1111000\\[1mm] 1100110\\[1mm] 1010101 \end{array}

Di sini, omong-omong, kita melihat bahwa semua string parity check kita sendiri ada dalam kode.

Satu catatan terakhir tentang kode linear klasik, yang menghubungkannya dengan formalisme stabilizer, adalah bahwa string parity check setara dengan generator stabilizer yang hanya terdiri dari matriks Pauli ZZ dan identitas. Misalnya, string parity check 110110 dan 011011 untuk kode repetisi 3-bit secara tepat bersesuaian dengan generator stabilizer ZβŠ—ZβŠ—IZ\otimes Z\otimes \mathbb{I} dan IβŠ—ZβŠ—Z,\mathbb{I}\otimes Z\otimes Z, yang konsisten dengan pembahasan Pauli observable dari pelajaran sebelumnya.

Definisi kode CSS​

Kode CSS adalah kode stabilizer yang diperoleh dengan menggabungkan pasangan tertentu dari kode linear klasik. Ini tidak bekerja untuk dua kode linear klasik yang sembarang β€” dua kode tersebut harus memiliki hubungan tertentu. Meski begitu, konstruksi ini membuka banyak kemungkinan untuk kode koreksi kesalahan kuantum, yang sebagian didasarkan pada lebih dari 75 tahun teori kode klasik.

Dalam formalisme stabilizer, generator stabilizer yang hanya mengandung matriks Pauli ZZ dan identitas setara dengan parity check, seperti yang baru saja kita amati untuk kode repetisi 3-bit. Untuk contoh lain, pertimbangkan string parity check berikut untuk kode [7,4,3][7,4,3]-Hamming.

111100011001101010101\begin{array}{c} 1111000\\[1mm] 1100110\\[1mm] 1010101 \end{array}

String parity check ini bersesuaian dengan generator stabilizer berikut (ditulis tanpa simbol tensor product), yang kita peroleh dengan mengganti setiap 11 dengan ZZ dan setiap 00 dengan I.\mathbb{I}. Ini adalah tiga dari enam generator stabilizer untuk kode Steane 7-qubit.

ZZZZIIIZZIIZZIZIZIZIZ\begin{array}{ccccccc} Z & Z & Z & Z & \mathbb{I} & \mathbb{I} & \mathbb{I} \\[1mm] Z & Z & \mathbb{I} & \mathbb{I} & Z & Z & \mathbb{I} \\[1mm] Z & \mathbb{I} & Z & \mathbb{I} & Z & \mathbb{I} & Z \end{array}

Mari kita beri nama generator stabilizer ZZ untuk generator stabilizer seperti ini, artinya generator yang hanya memiliki faktor tensor Pauli ZZ dan identitas β€” jadi matriks Pauli XX dan YY tidak pernah muncul dalam generator stabilizer ZZ.

Kita juga bisa mempertimbangkan generator stabilizer di mana hanya matriks Pauli XX dan identitas yang muncul sebagai faktor tensor. Generator stabilizer seperti ini bisa dilihat sebagai analog dari generator stabilizer Z,Z, kecuali bahwa mereka mendeskripsikan parity check dalam basis {∣+⟩,βˆ£βˆ’βŸ©}\{\vert+\rangle,\vert-\rangle\} daripada basis standar. Generator stabilizer dalam bentuk ini disebut generator stabilizer XX β€” jadi tidak ada matriks Pauli YY atau ZZ yang diizinkan kali ini.

Misalnya, pertimbangkan tiga generator stabilizer yang tersisa dari kode Steane 7-qubit.

XXXXIIIXXIIXXIXIXIXIX\begin{array}{ccccccc} X & X & X & X & \mathbb{I} & \mathbb{I} & \mathbb{I} \\[1mm] X & X & \mathbb{I} & \mathbb{I} & X & X & \mathbb{I} \\[1mm] X & \mathbb{I} & X & \mathbb{I} & X & \mathbb{I} & X \end{array}

Mereka mengikuti pola yang persis sama dari kode [7,4,3][7,4,3]-Hamming seperti generator stabilizer Z,Z, kecuali kali ini kita mengganti XX untuk 11 daripada Z.Z. Yang kita peroleh hanya dari tiga generator stabilizer ini adalah kode yang mencakup 16 state yang ditampilkan di sini, yang kita dapatkan dengan menerapkan operasi Hadamard ke state basis standar yang bersesuaian dengan string dalam kode [7,4,3][7,4,3]-Hamming. (Tentu saja, ruang kode untuk kode ini juga mencakup kombinasi linear dari state-state ini.)

∣+++++++βŸ©βˆ£βˆ’βˆ’++++βˆ’βŸ©βˆ£βˆ’+βˆ’++βˆ’+⟩∣+βˆ’βˆ’++βˆ’βˆ’βŸ©βˆ£+βˆ’βˆ’+βˆ’++βŸ©βˆ£βˆ’+βˆ’+βˆ’+βˆ’βŸ©βˆ£βˆ’βˆ’++βˆ’βˆ’+⟩∣++++βˆ’βˆ’βˆ’βŸ©βˆ£βˆ’βˆ’βˆ’βˆ’+++⟩∣++βˆ’βˆ’++βˆ’βŸ©βˆ£+βˆ’+βˆ’+βˆ’+βŸ©βˆ£βˆ’++βˆ’+βˆ’βˆ’βŸ©βˆ£βˆ’++βˆ’βˆ’++⟩∣+βˆ’+βˆ’βˆ’+βˆ’βŸ©βˆ£++βˆ’βˆ’βˆ’βˆ’+βŸ©βˆ£βˆ’βˆ’βˆ’βˆ’βˆ’βˆ’βˆ’βŸ©\begin{array}{cccc} \vert {+++++++} \rangle \quad & \vert {--++++-} \rangle \quad & \vert {-+-++-+} \rangle \quad & \vert {+--++--} \rangle \\ \vert {+--+-++} \rangle \quad & \vert {-+-+-+-} \rangle \quad & \vert {--++--+} \rangle \quad & \vert {++++---} \rangle \\ \vert {----+++} \rangle \quad & \vert {++--++-} \rangle \quad & \vert {+-+-+-+} \rangle \quad & \vert {-++-+--} \rangle \\ \vert {-++--++} \rangle \quad & \vert {+-+--+-} \rangle \quad & \vert {++----+} \rangle \quad & \vert {-------} \rangle \end{array}

Kita sekarang bisa mendefinisikan kode CSS dalam istilah yang sangat sederhana.

Definisi

Kode CSS adalah kode stabilizer yang bisa diekspresikan hanya menggunakan generator stabilizer XX dan ZZ.

Artinya, kode CSS adalah kode stabilizer di mana kita memiliki generator stabilizer yang tidak ada matriks Pauli YY yang muncul, dan di mana XX dan ZZ tidak pernah muncul dalam generator stabilizer yang sama.

Untuk lebih jelasnya, berdasarkan definisi ini, kode CSS adalah kode di mana mungkin untuk memilih hanya generator stabilizer XX dan ZZ β€” tapi kita harus ingat bahwa ada kebebasan dalam cara kita memilih generator stabilizer untuk kode stabilizer. Jadi, umumnya akan ada pilihan berbeda untuk generator stabilizer kode CSS yang tidak kebetulan merupakan generator stabilizer XX atau ZZ (selain setidaknya satu pilihan yang memang demikian).

Berikut adalah contoh sangat sederhana dari kode CSS yang mencakup generator stabilizer ZZ dan generator stabilizer XX:

ZZXX\begin{array}{cc} Z & Z \\[1mm] X & X \end{array}

Jelas bahwa ini adalah kode CSS, karena generator stabilizer pertama adalah generator stabilizer ZZ dan yang kedua adalah generator stabilizer XX. Tentu saja, kode CSS juga harus merupakan kode stabilizer yang valid β€” artinya generator stabilizer harus komut, membentuk himpunan pembangkit minimal, dan menetapkan setidaknya satu vektor state kuantum. Persyaratan-persyaratan ini kebetulan mudah untuk diamati untuk kode ini. Seperti yang kita catat dalam pelajaran sebelumnya, ruang kode untuk kode ini adalah ruang satu dimensi yang direntang oleh Bell state βˆ£Ο•+⟩.\vert\phi^+\rangle. Fakta bahwa kedua generator stabilizer menetapkan state ini terlihat dengan mempertimbangkan dua ekspresi berikut dari sebuah e-bit, bersama dengan interpretasi generator stabilizer ini sebagai parity check dalam basis {∣0⟩,∣1⟩}\{\vert 0\rangle, \vert 1\rangle\} dan {∣+⟩,βˆ£βˆ’βŸ©}\{\vert +\rangle, \vert -\rangle\}.

βˆ£Ο•+⟩=∣0⟩∣0⟩+∣1⟩∣1⟩2=∣+⟩∣+⟩+βˆ£βˆ’βŸ©βˆ£βˆ’βŸ©2\vert\phi^+\rangle = \frac{\vert 0\rangle\vert 0\rangle + \vert 1\rangle\vert 1\rangle}{\sqrt{2}} = \frac{\vert +\rangle\vert +\rangle + \vert -\rangle\vert -\rangle}{\sqrt{2}}

Kode Steane 7-qubit adalah contoh lain dari kode CSS.

ZZZZIIIZZIIZZIZIZIZIZXXXXIIIXXIIXXIXIXIXIX\begin{array}{ccccccc} Z & Z & Z & Z & \mathbb{I} & \mathbb{I} & \mathbb{I} \\[1mm] Z & Z & \mathbb{I} & \mathbb{I} & Z & Z & \mathbb{I} \\[1mm] Z & \mathbb{I} & Z & \mathbb{I} & Z & \mathbb{I} & Z \\[1mm] X & X & X & X & \mathbb{I} & \mathbb{I} & \mathbb{I} \\[1mm] X & X & \mathbb{I} & \mathbb{I} & X & X & \mathbb{I} \\[1mm] X & \mathbb{I} & X & \mathbb{I} & X & \mathbb{I} & X \end{array}

Di sini kita memiliki tiga generator stabilizer ZZ dan tiga generator stabilizer X,X, dan kita sudah memverifikasi bahwa ini adalah kode stabilizer yang valid.

Dan kode Shor 9-qubit adalah contoh lainnya.

ZZIIIIIIIIZZIIIIIIIIIZZIIIIIIIIZZIIIIIIIIIZZIIIIIIIIZZXXXXXXIIIIIIXXXXXX\begin{array}{ccccccccc} Z & Z & \mathbb{I} & \mathbb{I} & \mathbb{I} & \mathbb{I} & \mathbb{I} & \mathbb{I} & \mathbb{I}\\[1mm] \mathbb{I} & Z & Z & \mathbb{I} & \mathbb{I} & \mathbb{I} & \mathbb{I} & \mathbb{I} & \mathbb{I}\\[1mm] \mathbb{I} & \mathbb{I} & \mathbb{I} & Z & Z & \mathbb{I} & \mathbb{I} & \mathbb{I} & \mathbb{I}\\[1mm] \mathbb{I} & \mathbb{I} & \mathbb{I} & \mathbb{I} & Z & Z & \mathbb{I} & \mathbb{I} & \mathbb{I}\\[1mm] \mathbb{I} & \mathbb{I} & \mathbb{I} & \mathbb{I} & \mathbb{I} & \mathbb{I} & Z & Z & \mathbb{I}\\[1mm] \mathbb{I} & \mathbb{I} & \mathbb{I} & \mathbb{I} & \mathbb{I} & \mathbb{I} & \mathbb{I} & Z & Z\\[1mm] X & X & X & X & X & X & \mathbb{I} & \mathbb{I} & \mathbb{I}\\[1mm] \mathbb{I} & \mathbb{I} & \mathbb{I}& X & X & X & X & X & X \end{array}

Kali ini kita memiliki enam generator stabilizer ZZ dan hanya dua generator stabilizer X.X. Tidak masalah, tidak perlu ada keseimbangan atau simetri antara dua jenis generator (meskipun seringkali ada).

Sekali lagi, sangat penting bahwa kode CSS adalah kode stabilizer yang valid, dan khususnya setiap generator stabilizer ZZ harus komut dengan setiap generator stabilizer X.X. Jadi, tidak setiap kumpulan generator stabilizer XX dan ZZ mendefinisikan kode CSS yang valid.

Deteksi dan koreksi kesalahan​

Berkaitan dengan deteksi dan koreksi kesalahan, kode CSS secara umum memiliki karakteristik yang mirip dengan kode Shor 9-qubit, yaitu kesalahan XX dan ZZ bisa dideteksi dan dikoreksi secara independen; generator stabilizer ZZ mendeskripsikan kode yang melindungi terhadap bit flip, dan generator stabilizer XX mendeskripsikan kode yang secara independen melindungi terhadap phase flip. Ini berhasil karena generator stabilizer ZZ harus komut dengan kesalahan Z,Z, serta operasi ZZ yang diterapkan sebagai koreksi, sehingga mereka sepenuhnya tidak peduli dengan keduanya, dan begitu juga untuk generator stabilizer X,X, kesalahan, dan koreksi.

Sebagai contoh, mari kita pertimbangkan kode Steane 7-qubit.

ZZZZIIIZZIIZZIZIZIZIZXXXXIIIXXIIXXIXIXIXIX\begin{array}{ccccccc} Z & Z & Z & Z & \mathbb{I} & \mathbb{I} & \mathbb{I} \\[1mm] Z & Z & \mathbb{I} & \mathbb{I} & Z & Z & \mathbb{I} \\[1mm] Z & \mathbb{I} & Z & \mathbb{I} & Z & \mathbb{I} & Z \\[1mm] X & X & X & X & \mathbb{I} & \mathbb{I} & \mathbb{I} \\[1mm] X & X & \mathbb{I} & \mathbb{I} & X & X & \mathbb{I} \\[1mm] X & \mathbb{I} & X & \mathbb{I} & X & \mathbb{I} & X \end{array}

Ide dasar untuk kode ini sekarang sudah jelas: ini adalah kode [7,4,3][7,4,3]-Hamming untuk kesalahan bit-flip dan kode [7,4,3][7,4,3]-Hamming untuk kesalahan phase-flip. Fakta bahwa generator stabilizer XX dan ZZ komut mungkin adalah keberuntungan, karena ini tidak akan menjadi kode stabilizer yang valid jika tidak demikian. Tapi ada, sebenarnya, banyak contoh kode linear klasik yang menghasilkan kode stabilizer yang valid ketika digunakan dengan cara yang serupa.

Secara umum, misalkan kita punya kode CSS di mana generator stabilizer ZZ memungkinkan koreksi hingga jj kesalahan bit-flip, dan generator stabilizer XX memungkinkan koreksi hingga kk kesalahan phase-flip. Misalnya, j=1j = 1 dan k=1k = 1 untuk kode Steane, mengingat bahwa kode [7,4,3][7,4,3]-Hamming bisa mengoreksi satu bit flip. Kemudian, berdasarkan diskritisasi kesalahan, kode CSS ini bisa mengoreksi kesalahan apapun pada sejumlah qubit hingga minimum dari jj dan k.k. Ini karena, ketika syndrome diukur, kesalahan sembarang pada jumlah qubit ini secara efektif kolaps secara probabilistik menjadi beberapa kombinasi kesalahan X,X, kesalahan Z,Z, atau keduanya β€” dan kemudian kesalahan XX dan kesalahan ZZ dideteksi dan dikoreksi secara independen.

Singkatnya, asalkan kita punya dua kode linear klasik (atau dua salinan dari satu kode linear klasik) yang kompatibel, dalam artian mereka mendefinisikan generator stabilizer XX dan ZZ yang komut, kode CSS yang kita peroleh dengan menggabungkannya mewarisi sifat koreksi kesalahan dari dua kode tersebut, dalam pengertian yang baru saja dijelaskan.

Perhatikan bahwa ada harga yang harus dibayar, yaitu kita tidak bisa mengenkode sebanyak qubit seperti yang bisa kita lakukan dengan bit menggunakan dua kode klasik. Ini karena jumlah total generator stabilizer untuk kode CSS adalah jumlah dari jumlah parity check untuk dua kode linear klasik, dan setiap generator stabilizer mengurangi separuh dimensi ruang kode. Misalnya, kode [7,4,3][7,4,3]-Hamming memungkinkan pengenkodean empat bit klasik, karena kita hanya punya tiga string parity check untuk kode ini, sedangkan kode Steane 7-qubit hanya mengenkode satu qubit, karena memiliki enam generator stabilizer.

Ruang kode dari kode CSS​

Hal terakhir yang akan kita lakukan dalam pembahasan kode CSS ini adalah mempertimbangkan ruang kode dari kode-kode ini. Ini akan memberi kita kesempatan untuk memeriksa lebih detail hubungan yang harus ada antara dua kode linear klasik agar kompatibel, dalam artian bisa digabungkan untuk membentuk kode CSS.

Pertimbangkan kode CSS apapun pada nn qubit, dan misalkan z1,…,zs∈Σnz_1, \ldots, z_s \in \Sigma^n adalah string parity check nn-bit yang bersesuaian dengan generator stabilizer ZZ dari kode ini. Ini berarti kode linear klasik yang dijelaskan hanya oleh generator stabilizer Z,Z, yang akan kita namai CZ,\mathcal{C}_Z, mengambil bentuk berikut.

CZ={u∈Σn : uβ‹…z1=β‹―=uβ‹…zs=0}\mathcal{C}_Z = \bigl\{ u \in \Sigma^n \,:\, u \cdot z_1 = \cdots = u \cdot z_s = 0 \bigr\}

Dengan kata lain, kode linear klasik CZ\mathcal{C}_Z memuat setiap string yang dot product binernya dengan setiap string parity check z1,…,zsz_1, \ldots, z_s adalah nol.

Dengan cara yang sama, mari kita ambil x1,…,xt∈Σnx_1,\ldots,x_t\in\Sigma^n sebagai string parity check nn-bit yang bersesuaian dengan generator stabilizer XX dari kode kita. Dengan demikian, kode linear klasik yang bersesuaian dengan generator stabilizer XX mengambil bentuk ini.

CX={u∈Σn : uβ‹…x1=β‹―=uβ‹…xt=0}\mathcal{C}_X = \bigl\{ u \in \Sigma^n \,:\, u \cdot x_1 = \cdots = u \cdot x_t = 0 \bigr\}

Generator stabilizer XX sendiri oleh karena itu mendeskripsikan kode yang mirip dengan kode ini, tapi dalam basis {∣+⟩,βˆ£βˆ’βŸ©}\{\vert {+}\rangle,\vert {-}\rangle\} daripada basis standar.

Sekarang kita akan memperkenalkan dua kode linear klasik baru yang diturunkan dari pilihan string yang sama, z1,…,zsz_1,\ldots,z_s dan x1,…,xt,x_1,\ldots,x_t, tapi di mana kita mengambil string-string ini sebagai generator daripada string parity check. Secara khusus, kita mendapatkan dua kode ini.

DZ={Ξ±1z1βŠ•β‹―βŠ•Ξ±szs : α1,…,Ξ±s∈{0,1}}DX={Ξ±1x1βŠ•β‹―βŠ•Ξ±txt : α1,…,Ξ±t∈{0,1}}\begin{aligned} \mathcal{D}_Z & = \bigl\{ \alpha_1 z_1 \oplus \cdots \oplus \alpha_s z_s \,:\, \alpha_1,\ldots,\alpha_s \in \{0,1\} \bigr\}\\[1mm] \mathcal{D}_X & = \bigl\{ \alpha_1 x_1 \oplus \cdots \oplus \alpha_t x_t \,:\, \alpha_1,\ldots,\alpha_t \in \{0,1\} \bigr\} \end{aligned}

Ini dikenal sebagai kode dual dari kode-kode yang didefinisikan sebelumnya: DZ\mathcal{D}_Z adalah kode dual dari CZ\mathcal{C}_Z dan DX\mathcal{D}_X adalah kode dual dari CX.\mathcal{C}_X. Mungkin belum jelas pada poin ini mengapa kode dual ini relevan, tapi ternyata sangat relevan karena beberapa alasan, termasuk dua alasan yang dijelaskan dalam paragraf berikut.

Pertama, kondisi yang harus dipenuhi agar dua kode linear klasik CZ\mathcal{C}_Z dan CX\mathcal{C}_X kompatibel, dalam artian bisa dipasangkan untuk membentuk kode CSS, bisa dideskripsikan dalam istilah sederhana dengan merujuk pada kode dual. Secara khusus, harus berlaku bahwa DZβŠ†CX,\mathcal{D}_Z\subseteq\mathcal{C}_X, atau ekuivalennya, bahwa DXβŠ†CZ.\mathcal{D}_X\subseteq\mathcal{C}_Z. Dengan kata lain, kode dual DZ\mathcal{D}_Z mencakup string yang bersesuaian dengan generator stabilizer Z,Z, dan ketercakupannya dalam CX\mathcal{C}_X setara dengan dot product biner dari setiap string ini dengan yang bersesuaian dengan generator stabilizer XX adalah nol. Itu, pada gilirannya, setara dengan setiap generator stabilizer ZZ komut dengan setiap generator stabilizer X.X. Atau, dengan membalikkan peran generator stabilizer XX dan ZZ dan mulai dari ketercakupan DXβŠ†CZ,\mathcal{D}_X\subseteq\mathcal{C}_Z, kita bisa mencapai kesimpulan yang sama.

Kedua, dengan merujuk pada kode dual, kita bisa dengan mudah mendeskripsikan ruang kode dari kode CSS tertentu. Secara khusus, ruang kode direntang oleh vektor dengan bentuk berikut.

∣uβŠ•DX⟩=12tβˆ‘v∈DX∣uβŠ•v⟩(forΒ allΒ u∈CZ)\vert u \oplus \mathcal{D}_X\rangle = \frac{1}{\sqrt{2^t}} \sum_{v\in\mathcal{D}_X} \vert u \oplus v\rangle \qquad \text{(for all $u\in\mathcal{C}_Z$)}

Dengan kata lain, vektor-vektor ini adalah superposisi uniform atas string dalam kode dual DX\mathcal{D}_X dari kode yang bersesuaian dengan generator stabilizer X,X, yang digeser oleh (dengan kata lain, di-XOR bitwise dengan) string dalam kode CZ\mathcal{C}_Z yang bersesuaian dengan generator stabilizer Z.Z. Untuk lebih jelasnya, pilihan berbeda untuk pergeseran β€” diwakili oleh string uu dalam ekspresi ini β€” bisa menghasilkan vektor yang sama. Jadi, state-state ini tidak semuanya berbeda, tapi secara kolektif mereka merentang seluruh ruang kode.

Berikut adalah penjelasan intuitif mengapa vektor-vektor tersebut berada di dalam ruang kode dan merentangnya. Pertimbangkan state basis standar nn-qubit ∣u⟩,\vert u\rangle, untuk string nn-bit sembarang u,u, dan misalkan kita memproyeksikan state ini ke ruang kode. Artinya, dengan membiarkan Π\Pi menunjukkan proyeksi ke ruang kode CSS kita, pertimbangkan vektor Π∣u⟩.\Pi\vert u\rangle. Ada dua kasus:

  • Kasus 1: u∈CZ.u\in\mathcal{C}_Z. Ini berarti setiap generator stabilizer ZZ dari kode CSS kita beraksi secara trivial pada ∣u⟩.\vert u\rangle. Generator stabilizer X,X, di sisi lain, masing-masing hanya membalik beberapa bit dari ∣u⟩.\vert u\rangle. Secara khusus, untuk setiap generator vv dari DX,\mathcal{D}_X, generator stabilizer XX yang bersesuaian dengan vv mengubah ∣u⟩\vert u\rangle menjadi ∣uβŠ•v⟩.\vert u\oplus v\rangle. Dengan mengkarakterisasi proyeksi Ξ \Pi sebagai rata-rata atas elemen-elemen stabilizer (seperti yang kita lihat dalam pelajaran sebelumnya), kita memperoleh formula ini:

    Π∣u⟩=12tβˆ‘v∈DX∣uβŠ•v⟩=12t∣uβŠ•DX⟩.\Pi \vert u \rangle = \frac{1}{2^t} \sum_{v\in\mathcal{D}_{X}} \vert u \oplus v\rangle = \frac{1}{\sqrt{2^t}} \vert u \oplus \mathcal{D}_X\rangle.
  • Kasus 2: uβˆ‰CZ.u\notin\mathcal{C}_Z. Ini berarti setidaknya satu parity check yang bersesuaian dengan generator stabilizer ZZ gagal, yang artinya ∣u⟩\vert u\rangle harus merupakan eigenvector βˆ’1-1 dari setidaknya satu generator stabilizer Z.Z. Ruang kode dari kode CSS adalah irisan dari eigenspace +1+1 dari generator stabilizer. Jadi, sebagai eigenvector βˆ’1-1 dari setidaknya satu generator stabilizer Z,Z, ∣u⟩\vert u\rangle oleh karena itu ortogonal terhadap ruang kode:

    Π∣u⟩=0.\Pi\vert u\rangle = 0.

Dan sekarang, saat kita merentang semua string nn-bit u,u, membuang yang membuat Π∣u⟩=0,\Pi\vert u\rangle = 0, dan menormalisasi sisanya, kita mendapatkan vektor-vektor yang dijelaskan sebelumnya, yang menunjukkan bahwa mereka merentang ruang kode.

Kita juga bisa menggunakan simetri antara generator stabilizer XX dan ZZ untuk mendeskripsikan ruang kode dengan cara yang serupa tapi berbeda. Secara khusus, ini adalah ruang yang direntang oleh vektor dengan bentuk berikut.

HβŠ—n∣uβŠ•DZ⟩=12sβˆ‘v∈DZHβŠ—n∣uβŠ•v⟩(forΒ u∈CX)H^{\otimes n} \vert u \oplus \mathcal{D}_Z\rangle = \frac{1}{\sqrt{2^s}} \sum_{v\in\mathcal{D}_Z} H^{\otimes n}\vert u \oplus v\rangle \qquad \text{(for $u\in\mathcal{C}_X$)}

Pada intinya, XX dan ZZ telah ditukar di setiap kemunculannya β€” tapi kita juga harus menukar basis standar dengan basis {∣+⟩,βˆ£βˆ’βŸ©},\{\vert+\rangle,\vert-\rangle\}, itulah mengapa operasi Hadamard disertakan.

Sebagai contoh, mari kita pertimbangkan kode Steane 7-qubit. String parity check untuk generator stabilizer XX maupun ZZ adalah sama: 1111000,1111000, 1100110,1100110, dan 1010101.1010101. Kode CX\mathcal{C}_X dan CZ\mathcal{C}_Z oleh karena itu sama; keduanya sama dengan kode [7,4,3][7,4,3]-Hamming.

CX=CZ={0000000,0000111,0011001,0011110,0101010,0101101,0110011,0110100,1001011,1001100,1010010,1010101,1100001,1100110,1111000,1111111}\mathcal{C}_X = \mathcal{C}_Z = \{0000000, 0000111, 0011001, 0011110, 0101010, 0101101, 0110011, 0110100, 1001011, 1001100, 1010010, 1010101, 1100001, 1100110, 1111000, 1111111\}

Kode dual DX\mathcal{D}_X dan DZ\mathcal{D}_Z oleh karena itu juga sama. Kita memiliki tiga generator, jadi kita mendapatkan delapan string.

DX=DZ={0000000,0011110,0101101,0110011,1001011,1010101,1100110,1111000}\mathcal{D}_X = \mathcal{D}_Z = \{0000000, 0011110, 0101101, 0110011, 1001011, 1010101, 1100110, 1111000\}

String-string ini semuanya terkandung dalam kode [7,4,3][7,4,3]-Hamming, sehingga kondisi CSS terpenuhi: DZβŠ†CX,\mathcal{D}_Z \subseteq \mathcal{C}_X, atau ekuivalennya, DXβŠ†CZ.\mathcal{D}_X \subseteq \mathcal{C}_Z.

Mengingat bahwa DX\mathcal{D}_X memuat setengah dari semua string dalam CZ,\mathcal{C}_Z, hanya ada dua vektor berbeda ∣uβŠ•DX⟩\vert u\oplus \mathcal{D}_X\rangle yang bisa diperoleh dengan memilih u∈CZ.u\in\mathcal{C}_Z. Ini diharapkan, karena kode Steane 7-qubit memiliki ruang kode dua dimensi. Kita bisa menggunakan dua state yang kita peroleh dengan cara ini untuk mengenkode state logis ∣0⟩\vert 0\rangle dan ∣1⟩\vert 1\rangle sebagai berikut.

∣0βŸ©β†¦βˆ£0000000⟩+∣0011110⟩+∣0101101⟩+∣0110011⟩+∣1001011⟩+∣1010101⟩+∣1100110⟩+∣1111000⟩8∣1βŸ©β†¦βˆ£0000111⟩+∣0011001⟩+∣0101010⟩+∣0110100⟩+∣1001100⟩+∣1010010⟩+∣1100001⟩+∣1111111⟩8\begin{aligned} \vert 0\rangle & \mapsto \frac{ \vert 0000000\rangle + \vert 0011110\rangle + \vert 0101101\rangle + \vert 0110011\rangle + \vert 1001011\rangle + \vert 1010101\rangle + \vert 1100110\rangle + \vert 1111000\rangle }{\sqrt{8}}\\[4mm] \vert 1\rangle & \mapsto \frac{ \vert 0000111\rangle + \vert 0011001\rangle + \vert 0101010\rangle + \vert 0110100\rangle + \vert 1001100\rangle + \vert 1010010\rangle + \vert 1100001\rangle + \vert 1111111\rangle }{\sqrt{8}} \end{aligned}

Seperti biasa, pilihan ini tidak diwajibkan β€” kita bebas menggunakan ruang kode untuk mengenkode qubit dengan cara apapun yang kita pilih. Namun, enkoding ini konsisten dengan contoh Circuit enkoding untuk kode Steane 7-qubit dalam pelajaran sebelumnya.

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