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 adalah alfabet biner untuk seluruh pembahasan ini. Ketika kita menyebut kode linear klasik, yang kita maksud adalah himpunan non-kosong dari string biner dengan panjang untuk suatu bilangan bulat positif yang harus memenuhi satu sifat dasar: jika dan adalah string biner dalam maka string juga ada dalam Di sini, mengacu pada exclusive-OR bitwise dari dan 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 sebagai vektor berdimensi di mana entri-entrinya adalah atau dan mengharuskan kode itu sendiri membentuk subruang linear. Namun, alih-alih penjumlahan vektor biasa atas bilangan real atau kompleks, kita menggunakan penjumlahan modulo yang merupakan exclusive-OR. Artinya, jika kita punya dua codeword dan yang berarti dan adalah string biner dalam maka modulo 2, yaitu juga harus menjadi codeword dalam Perhatikan, khususnya, bahwa implikasi ini harus benar bahkan jika Ini berarti harus menyertakan string all-zero 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 jadi, berkaitan dengan kondisi linearitas, hanya ada dua pilihan untuk dan dua pilihan untuk Mudah untuk menelusuri keempat pasangan yang mungkin dan melihat bahwa kita selalu mendapatkan codeword ketika mengambil exclusive-OR bitwise:
Contoh: kode -Hammingβ
Ini adalah contoh lain dari kode linear klasik yang disebut kode -Hamming. Ini adalah salah satu kode koreksi kesalahan klasik pertama yang pernah ditemukan, dan terdiri dari 16 string biner dengan panjang 7. (Terkadang kode -Hamming dipahami sebagai kode dengan string-string ini dibalik, tapi kita akan menggunakannya sebagai kode yang memuat string-string yang ditampilkan di sini.)
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 (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 bit, kita bisa mengenkode bit menggunakan kode (karena ada codeword), dan kebetulan ini adalah kode jarak yang berarti dua codeword yang berbeda harus berbeda setidaknya di posisi β jadi setidaknya bit harus dibalik untuk mengubah satu codeword menjadi codeword lain. Fakta bahwa ini adalah kode jarak 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 -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.
-
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 menghasilkan kode linear klasik jika
dengan pengertian bahwa ketika dan ketika 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 membentuk sebuah basis untuk 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
-
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 adalah string parity check untuk kode linear klasik jika
dan himpunan string ini minimal jika menghapus satu menghasilkan kode yang lebih besar. Ini disebut string parity check karena memiliki dot product biner sama dengan nol dengan jika dan hanya jika bit-bit di posisi di mana memiliki angka 1 memiliki paritas genap. Jadi, untuk menentukan apakah string ada dalam kode cukup untuk memeriksa paritas subset tertentu dari bit-bit
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 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 β dan untuk kode linear klasik tunggal yang dideskripsikan dalam dua cara berbeda yang baru saja dijelaskan, akan selalu berlaku bahwa Secara khusus, jika kita memiliki himpunan minimal generator, maka kode mengenkode bit dan kita pasti akan memiliki codeword; dan jika kita memiliki himpunan minimal string parity check, maka kita akan memiliki 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: Kita bisa secara alternatif mendeskripsikan kode dengan dua string parity check, seperti dan β yang sudah familiar dari pembahasan kode ini sebelumnya β atau kita bisa menggunakan string parity check dan atau dan (Generator dan string parity check umumnya tidak unik untuk kode linear klasik tertentu.)
Untuk contoh kedua, pertimbangkan kode -Hamming. Berikut adalah satu pilihan untuk daftar generator yang berfungsi.
Dan berikut adalah pilihan untuk daftar parity check untuk kode ini.
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 dan identitas. Misalnya, string parity check dan untuk kode repetisi 3-bit secara tepat bersesuaian dengan generator stabilizer dan 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 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 -Hamming.
String parity check ini bersesuaian dengan generator stabilizer berikut (ditulis tanpa simbol tensor product), yang kita peroleh dengan mengganti setiap dengan dan setiap dengan Ini adalah tiga dari enam generator stabilizer untuk kode Steane 7-qubit.
Mari kita beri nama generator stabilizer untuk generator stabilizer seperti ini, artinya generator yang hanya memiliki faktor tensor Pauli dan identitas β jadi matriks Pauli dan tidak pernah muncul dalam generator stabilizer .
Kita juga bisa mempertimbangkan generator stabilizer di mana hanya matriks Pauli dan identitas yang muncul sebagai faktor tensor. Generator stabilizer seperti ini bisa dilihat sebagai analog dari generator stabilizer kecuali bahwa mereka mendeskripsikan parity check dalam basis daripada basis standar. Generator stabilizer dalam bentuk ini disebut generator stabilizer β jadi tidak ada matriks Pauli atau yang diizinkan kali ini.
Misalnya, pertimbangkan tiga generator stabilizer yang tersisa dari kode Steane 7-qubit.
Mereka mengikuti pola yang persis sama dari kode -Hamming seperti generator stabilizer kecuali kali ini kita mengganti untuk daripada 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 -Hamming. (Tentu saja, ruang kode untuk kode ini juga mencakup kombinasi linear dari state-state ini.)
Kita sekarang bisa mendefinisikan kode CSS dalam istilah yang sangat sederhana.
Artinya, kode CSS adalah kode stabilizer di mana kita memiliki generator stabilizer yang tidak ada matriks Pauli yang muncul, dan di mana dan 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 dan β 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 atau (selain setidaknya satu pilihan yang memang demikian).
Berikut adalah contoh sangat sederhana dari kode CSS yang mencakup generator stabilizer dan generator stabilizer :
Jelas bahwa ini adalah kode CSS, karena generator stabilizer pertama adalah generator stabilizer dan yang kedua adalah generator stabilizer . 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 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 dan .
Kode Steane 7-qubit adalah contoh lain dari kode CSS.
Di sini kita memiliki tiga generator stabilizer dan tiga generator stabilizer dan kita sudah memverifikasi bahwa ini adalah kode stabilizer yang valid.
Dan kode Shor 9-qubit adalah contoh lainnya.
Kali ini kita memiliki enam generator stabilizer dan hanya dua generator stabilizer 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 harus komut dengan setiap generator stabilizer Jadi, tidak setiap kumpulan generator stabilizer dan 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 dan bisa dideteksi dan dikoreksi secara independen; generator stabilizer mendeskripsikan kode yang melindungi terhadap bit flip, dan generator stabilizer mendeskripsikan kode yang secara independen melindungi terhadap phase flip. Ini berhasil karena generator stabilizer harus komut dengan kesalahan serta operasi yang diterapkan sebagai koreksi, sehingga mereka sepenuhnya tidak peduli dengan keduanya, dan begitu juga untuk generator stabilizer kesalahan, dan koreksi.
Sebagai contoh, mari kita pertimbangkan kode Steane 7-qubit.
Ide dasar untuk kode ini sekarang sudah jelas: ini adalah kode -Hamming untuk kesalahan bit-flip dan kode -Hamming untuk kesalahan phase-flip. Fakta bahwa generator stabilizer dan 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 memungkinkan koreksi hingga kesalahan bit-flip, dan generator stabilizer memungkinkan koreksi hingga kesalahan phase-flip. Misalnya, dan untuk kode Steane, mengingat bahwa kode -Hamming bisa mengoreksi satu bit flip. Kemudian, berdasarkan diskritisasi kesalahan, kode CSS ini bisa mengoreksi kesalahan apapun pada sejumlah qubit hingga minimum dari dan Ini karena, ketika syndrome diukur, kesalahan sembarang pada jumlah qubit ini secara efektif kolaps secara probabilistik menjadi beberapa kombinasi kesalahan kesalahan atau keduanya β dan kemudian kesalahan dan kesalahan 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 dan 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 -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 qubit, dan misalkan adalah string parity check -bit yang bersesuaian dengan generator stabilizer dari kode ini. Ini berarti kode linear klasik yang dijelaskan hanya oleh generator stabilizer yang akan kita namai mengambil bentuk berikut.
Dengan kata lain, kode linear klasik memuat setiap string yang dot product binernya dengan setiap string parity check adalah nol.
Dengan cara yang sama, mari kita ambil sebagai string parity check -bit yang bersesuaian dengan generator stabilizer dari kode kita. Dengan demikian, kode linear klasik yang bersesuaian dengan generator stabilizer mengambil bentuk ini.
Generator stabilizer sendiri oleh karena itu mendeskripsikan kode yang mirip dengan kode ini, tapi dalam basis daripada basis standar.
Sekarang kita akan memperkenalkan dua kode linear klasik baru yang diturunkan dari pilihan string yang sama, dan tapi di mana kita mengambil string-string ini sebagai generator daripada string parity check. Secara khusus, kita mendapatkan dua kode ini.
Ini dikenal sebagai kode dual dari kode-kode yang didefinisikan sebelumnya: adalah kode dual dari dan adalah kode dual dari 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 dan kompatibel, dalam artian bisa dipasangkan untuk membentuk kode CSS, bisa dideskripsikan dalam istilah sederhana dengan merujuk pada kode dual. Secara khusus, harus berlaku bahwa atau ekuivalennya, bahwa Dengan kata lain, kode dual mencakup string yang bersesuaian dengan generator stabilizer dan ketercakupannya dalam setara dengan dot product biner dari setiap string ini dengan yang bersesuaian dengan generator stabilizer adalah nol. Itu, pada gilirannya, setara dengan setiap generator stabilizer komut dengan setiap generator stabilizer Atau, dengan membalikkan peran generator stabilizer dan dan mulai dari ketercakupan 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.
Dengan kata lain, vektor-vektor ini adalah superposisi uniform atas string dalam kode dual dari kode yang bersesuaian dengan generator stabilizer yang digeser oleh (dengan kata lain, di-XOR bitwise dengan) string dalam kode yang bersesuaian dengan generator stabilizer Untuk lebih jelasnya, pilihan berbeda untuk pergeseran β diwakili oleh string 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 -qubit untuk string -bit sembarang dan misalkan kita memproyeksikan state ini ke ruang kode. Artinya, dengan membiarkan menunjukkan proyeksi ke ruang kode CSS kita, pertimbangkan vektor Ada dua kasus:
-
Kasus 1: Ini berarti setiap generator stabilizer dari kode CSS kita beraksi secara trivial pada Generator stabilizer di sisi lain, masing-masing hanya membalik beberapa bit dari Secara khusus, untuk setiap generator dari generator stabilizer yang bersesuaian dengan mengubah menjadi Dengan mengkarakterisasi proyeksi sebagai rata-rata atas elemen-elemen stabilizer (seperti yang kita lihat dalam pelajaran sebelumnya), kita memperoleh formula ini:
-
Kasus 2: Ini berarti setidaknya satu parity check yang bersesuaian dengan generator stabilizer gagal, yang artinya harus merupakan eigenvector dari setidaknya satu generator stabilizer Ruang kode dari kode CSS adalah irisan dari eigenspace dari generator stabilizer. Jadi, sebagai eigenvector dari setidaknya satu generator stabilizer oleh karena itu ortogonal terhadap ruang kode:
Dan sekarang, saat kita merentang semua string -bit membuang yang membuat 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 dan untuk mendeskripsikan ruang kode dengan cara yang serupa tapi berbeda. Secara khusus, ini adalah ruang yang direntang oleh vektor dengan bentuk berikut.
Pada intinya, dan telah ditukar di setiap kemunculannya β tapi kita juga harus menukar basis standar dengan basis itulah mengapa operasi Hadamard disertakan.
Sebagai contoh, mari kita pertimbangkan kode Steane 7-qubit. String parity check untuk generator stabilizer maupun adalah sama: dan Kode dan oleh karena itu sama; keduanya sama dengan kode -Hamming.
Kode dual dan oleh karena itu juga sama. Kita memiliki tiga generator, jadi kita mendapatkan delapan string.
String-string ini semuanya terkandung dalam kode -Hamming, sehingga kondisi CSS terpenuhi: atau ekuivalennya,
Mengingat bahwa memuat setengah dari semua string dalam hanya ada dua vektor berbeda yang bisa diperoleh dengan memilih 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 dan sebagai berikut.
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.