ข้ามไปยังเนื้อหาหลัก

CSS Codes

Classical linear codes

โค้ดแก้ไขข้อผิดพลาดแบบคลาสสิกได้รับการศึกษาครั้งแรกในทศวรรษ 1940 และปัจจุบันรู้จักโค้ดจำนวนมาก โดยโค้ดที่ศึกษาและใช้กันมากที่สุดอยู่ในหมวดหมู่ที่เรียกว่า linear codes เราจะเห็นในอีกสักครู่ว่าคำว่า "linear" หมายถึงอะไรในบริบทนี้ แต่วิธีง่าย ๆ ในการอธิบาย linear codes ณ จุดนี้คือ พวกมันคือ stabilizer codes ที่บังเอิญเป็นแบบคลาสสิก CSS codes โดยพื้นฐานแล้วคือ คู่ ของ classical linear codes ที่รวมเข้าด้วยกันเพื่อสร้างโค้ดแก้ไขข้อผิดพลาดเชิงควอนตัม ดังนั้นเพื่อการอภิปรายต่อไปนี้ เราต้องเข้าใจพื้นฐานบางอย่างเกี่ยวกับ classical linear codes

ให้ Σ\Sigma เป็น binary alphabet สำหรับการอภิปรายทั้งหมดนี้ เมื่อเราอ้างถึง classical linear code เราหมายถึงชุดที่ไม่ว่าง CΣn\mathcal{C}\subseteq\Sigma^n ของ binary strings ที่มีความยาว nn สำหรับจำนวนเต็มบวกบางตัว nn ซึ่งต้องตอบสนองคุณสมบัติพื้นฐานเพียงหนึ่งอย่าง: ถ้า uu และ vv เป็น binary strings ใน C\mathcal{C} แล้ว string uvu\oplus v ก็อยู่ใน C\mathcal{C} ด้วย ที่นี่ uvu\oplus v หมายถึง bitwise exclusive-OR ของ uu และ vv ดังที่เราพบหลายครั้งใน คอร์ส "Fundamentals of quantum algorithms"

โดยพื้นฐาน เมื่อเราอ้างถึง classical error correcting code ว่าเป็น linear เราคิดถึง binary strings ที่มีความยาว nn ในฐานะ vectors nn มิติ โดยที่ entries เป็น 00 หรือ 11 และต้องการให้โค้ดเองเป็น linear subspace แทนที่จะเป็น vector addition ธรรมดาบนจำนวนจริงหรือจำนวนเชิงซ้อน เราใช้การบวก modulo 22 ซึ่งก็คือ exclusive-OR กล่าวคือ ถ้ามี codewords สองตัว uu และ vv หมายความว่า uu และ vv เป็น binary strings ใน C\mathcal{C} แล้ว u+vu + v modulo 2 ซึ่งก็คือ uvu\oplus v ต้องเป็น codeword ใน C\mathcal{C} ด้วย สังเกตโดยเฉพาะว่า implication นี้ต้องเป็นจริงแม้ u=vu = v สิ่งนี้หมายความว่า C\mathcal{C} ต้องรวม all-zero string 0n0^n เพราะ bitwise exclusive-OR ของ string ใด ๆ กับตัวมันเองคือ all-zero string

ตัวอย่าง: 3-bit repetition code

3-bit repetition code เป็นตัวอย่างของ classical linear code โดยเฉพาะ เรามี C={000,111}\mathcal{C} = \{000,111\} ดังนั้นเทียบกับเงื่อนไข linearity มีเพียงสองทางเลือกสำหรับ uu และสองทางเลือกสำหรับ vv เป็นเรื่องง่ายที่จะตรวจสอบสี่คู่ที่เป็นไปได้เพื่อดูว่าเราได้ codeword เสมอเมื่อนำ bitwise exclusive-OR:

000000=000,000111=111,111000=111,111111=000.000 \oplus 000 = 000, \quad 000 \oplus 111 = 111, \quad 111 \oplus 000 = 111, \quad 111 \oplus 111 = 000.

ตัวอย่าง: [7,4,3][7,4,3]-Hamming code

นี่คืออีกตัวอย่างของ classical linear code ที่เรียกว่า [7,4,3][7,4,3]-Hamming code มันเป็นหนึ่งใน classical error correcting codes แรก ๆ ที่เคยค้นพบ และประกอบด้วย binary strings ความยาว 7 จำนวน 16 strings เหล่านี้ (บางครั้ง [7,4,3][7,4,3]-Hamming code เข้าใจว่าหมายถึงโค้ดที่มี strings เหล่านี้กลับทิศ แต่เราจะถือว่ามันเป็นโค้ดที่มี strings ที่แสดงที่นี่)

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}

มีตรรกะง่าย ๆ เบื้องหลังการเลือก strings เหล่านี้ แต่เป็นเรื่องรองจากบท และจะไม่อธิบายที่นี่ สำหรับตอนนี้ เพียงแค่สังเกตว่านี่คือ classical linear code: การ XOR strings สองตัวใด ๆ เข้าด้วยกันจะให้ string อื่นในโค้ดเสมอ

สัญกรณ์ [7,4,3][7,4,3] (ในวงเล็บเหลี่ยมเดี่ยว) หมายความคล้ายกับสัญกรณ์วงเล็บเหลี่ยมคู่สำหรับ stabilizer codes ที่กล่าวถึงในบทก่อนหน้า แต่ที่นี่สำหรับ classical linear codes โดยเฉพาะ codewords มี 77 bits เราสามารถ encode 44 bits โดยใช้โค้ด (เพราะมี 16=2416 = 2^4 codewords) และบังเอิญเป็น distance 33 code หมายความว่า codewords ที่ต่างกันสองอันต้องต่างกันในอย่างน้อย 33 ตำแหน่ง ดังนั้นต้อง flip อย่างน้อย 33 bits เพื่อเปลี่ยน codeword หนึ่งเป็นอีกอัน ข้อเท็จจริงที่ว่านี่คือ distance 33 code หมายความว่าสามารถแก้ไข bit-flip error ได้สูงสุดหนึ่งอย่าง

การอธิบาย classical linear codes

ตัวอย่างที่กล่าวถึงเพิ่งเป็นตัวอย่างง่าย ๆ ของ classical linear codes แต่แม้แต่ [7,4,3][7,4,3]-Hamming code ก็ดูลึกลับบ้างเมื่อ codewords ถูกระบุไว้ง่าย ๆ มีวิธีที่ดีกว่าและมีประสิทธิภาพมากกว่าในการอธิบาย classical linear codes รวมถึงสองวิธีต่อไปนี้

  1. Generators วิธีหนึ่งในการอธิบาย classical linear code คือด้วยรายการ codewords ขั้นต่ำที่ generates โค้ด หมายความว่าโดยการนำ subsets ทั้งหมดที่เป็นไปได้ของ codewords เหล่านี้และ XOR เข้าด้วยกัน เราได้โค้ดทั้งหมด

    โดยละเอียดยิ่งขึ้น strings u1,,umΣnu_1,\ldots,u_m\in\Sigma^n generates classical linear code C\mathcal{C} ถ้า

    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\},

    โดยเข้าใจว่า αu=u\alpha u = u เมื่อ α=1\alpha = 1 และ αu=0n\alpha u = 0^n เมื่อ α=0\alpha = 0 และเราบอกว่ารายการนี้ minimal ถ้าการลบ string หนึ่งออกสร้างโค้ดที่เล็กลง วิธีธรรมชาติในการคิดถึงคำอธิบายดังกล่าวคือ ชุด {u1,,um}\{u_1,\ldots,u_m\} เป็น basis ของ C\mathcal{C} ในฐานะ subspace โดยที่เราคิดถึง strings ในฐานะ vectors ที่มี entries เป็น binary โดยจำไว้ว่าเราทำงานใน vector space ที่คณิตศาสตร์ทำ modulo 22

  2. Parity checks อีกวิธีธรรมชาติในการอธิบาย classical linear code คือด้วย parity checks — หมายความว่ารายการ binary strings ขั้นต่ำที่ strings ในโค้ดคือตัวที่ binary dot product กับทุก parity check string เป็นศูนย์ (คล้ายกับ bitwise exclusive-OR binary dot product ปรากฏหลายครั้งใน "Fundamentals of quantum algorithms")

    กล่าวคือ strings v1,,vrΣnv_1,\ldots,v_r\in\Sigma^n เป็น parity check strings สำหรับ classical linear code C\mathcal{C} ถ้า

    C={uΣn:uv1==uvr=0},\mathcal{C} = \bigl\{ u\in \Sigma^n\,:\, u\cdot v_1 = \cdots = u \cdot v_r = 0 \bigr\},

    และชุดของ strings นี้ minimal ถ้าการลบหนึ่งออกให้โค้ดที่ใหญ่ขึ้น เรียกว่า parity check strings เพราะ uu มี binary dot product เท่ากับศูนย์กับ vv ถ้าและเฉพาะถ้า bits ของ uu ในตำแหน่งที่ vv มี 1 มี parity คู่ ดังนั้น เพื่อดูว่า string uu อยู่ใน code C\mathcal{C} หรือไม่ ก็เพียงพอที่จะตรวจสอบ parity ของ subsets บางอย่างของ bits ของ uu

    สิ่งสำคัญที่ต้องสังเกตที่นี่คือ binary dot product ไม่ใช่ inner product ในความหมายเป็นทางการ โดยเฉพาะ เมื่อ strings สองตัวมี binary dot product เท่ากับศูนย์ ไม่ได้หมายความว่าพวกมัน orthogonal ในทิศทางที่เรามักคิดถึง orthogonality ตัวอย่างเช่น binary dot product ของ string 1111 กับตัวมันเองเป็นศูนย์ ดังนั้นเป็นไปได้ที่ parity check string สำหรับ classical linear code อยู่ในโค้ดเอง

Classical linear codes บน binary alphabet มักรวม strings จำนวนหนึ่งที่เป็น power ของ 22 — และสำหรับ classical linear code เดี่ยวที่อธิบายด้วยสองวิธีที่เพิ่งอธิบาย มักเป็นจริงว่า n=m+rn = m + r โดยเฉพาะ ถ้ามี generators ขั้นต่ำ mm ตัว โค้ดจะ encode mm bits และจะมี 2m2^m codewords และถ้ามี parity check strings ขั้นต่ำ rr ตัว จะมี 2nr2^{n-r} codewords ดังนั้น generator แต่ละตัวทำให้ code space เป็นสองเท่า ขณะที่ parity check string แต่ละตัวทำให้ครึ่งหนึ่ง

ตัวอย่างเช่น 3-bit repetition code เป็น linear code ดังนั้นสามารถอธิบายได้ทั้งสองวิธีนี้ โดยเฉพาะ มีเพียงหนึ่งทางเลือกสำหรับ generator ที่ใช้ได้: 111111 เราสามารถอธิบายโค้ดด้วย parity check strings สองตัวแทน เช่น 110110 และ 011011 — ซึ่งน่าจะดูคุ้นเคยจากการอภิปรายก่อนหน้าของโค้ดนี้ — หรือเราอาจนำ parity check strings เป็น 110110 และ 101101 หรือ 101101 และ 011011 แทนก็ได้ (Generators และ parity check strings โดยทั่วไปไม่ unique สำหรับ classical linear code ที่กำหนด)

สำหรับตัวอย่างที่สอง พิจารณา [7,4,3][7,4,3]-Hamming code นี่คือทางเลือกหนึ่งสำหรับรายการ generators ที่ใช้ได้

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

และนี่คือทางเลือกสำหรับรายการ parity checks สำหรับโค้ดนี้

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

ที่นี่ นอกจากนี้ เราเห็นว่า ทั้งหมด ของ parity check strings ของเรานั้นอยู่ในโค้ดเอง

ข้อสังเกตสุดท้ายเกี่ยวกับ classical linear codes ซึ่งเชื่อมโยงพวกมันกับ stabilizer formalism คือ parity check strings เทียบเท่ากับ stabilizer generators ที่ประกอบด้วยเฉพาะ ZZ และ identity Pauli matrices ตัวอย่างเช่น parity check strings 110110 และ 011011 สำหรับ 3-bit repetition code สอดคล้องกับ stabilizer generators ZZIZ\otimes Z\otimes \mathbb{I} และ IZZ\mathbb{I}\otimes Z\otimes Z พอดี ซึ่งสอดคล้องกับการอภิปรายของ Pauli observables จากบทก่อนหน้า

นิยามของ CSS codes

CSS codes คือ stabilizer codes ที่ได้จากการรวม คู่ ของ classical linear codes บางอย่างเข้าด้วยกัน สิ่งนี้ใช้ไม่ได้กับ classical linear codes สองตัวใด ๆ — โค้ดสองตัวต้องมีความสัมพันธ์บางอย่าง อย่างไรก็ตาม construction นี้เปิดความเป็นไปได้มากมายสำหรับโค้ดแก้ไขข้อผิดพลาดเชิงควอนตัม อาศัยส่วนหนึ่งจาก classical coding theory กว่า 75 ปี

ใน stabilizer formalism stabilizer generators ที่มีเฉพาะ ZZ และ identity Pauli matrices เทียบเท่ากับ parity checks ดังที่เราเพิ่งสังเกตสำหรับ 3-bit repetition code สำหรับตัวอย่างอื่น พิจารณา parity check strings ต่อไปนี้สำหรับ [7,4,3][7,4,3]-Hamming code

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

parity check strings เหล่านี้สอดคล้องกับ stabilizer generators ต่อไปนี้ (เขียนโดยไม่มีสัญลักษณ์ tensor product) ซึ่งเราได้โดยแทน 11 ด้วย ZZ และ 00 ด้วย I\mathbb{I} นี่คือสามในหก stabilizer generators สำหรับ 7-qubit Steane code

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}

เราให้ชื่อ ZZ stabilizer generators กับ stabilizer generators แบบนี้ หมายความว่ามีเฉพาะ Pauli ZZ และ identity tensor factors — ดังนั้น XX และ YY Pauli matrices ไม่เกิดขึ้นใน ZZ stabilizer generators

เราสามารถพิจารณา stabilizer generators ที่มีเฉพาะ XX และ identity Pauli matrices เป็น tensor factors ด้วย Stabilizer generators แบบนี้มองได้ว่าคล้ายกับ ZZ-stabilizer generators ยกเว้นว่าอธิบาย parity checks ใน {+,}\{\vert+\rangle,\vert-\rangle\} basis แทน standard basis Stabilizer generators ของรูปแบบนี้เรียกว่า XX stabilizer generators — ดังนั้นไม่อนุญาตให้มี YY หรือ ZZ Pauli matrices

ตัวอย่างเช่น พิจารณา stabilizer generators สามตัวที่เหลือจาก 7-qubit Steane code

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}

พวกมันทำตามรูปแบบเดียวกันจาก [7,4,3][7,4,3]-Hamming code กับ ZZ-stabilizer generators ยกเว้นคราวนี้แทน XX สำหรับ 11 แทนที่จะเป็น ZZ สิ่งที่เราได้จาก stabilizer generators สามตัวนี้เท่านั้นคือโค้ดที่รวม 16 states ที่แสดงที่นี่ ซึ่งเราได้โดยนำ Hadamard operations ไปใช้กับ standard basis states ที่สอดคล้องกับ strings ใน [7,4,3][7,4,3]-Hamming code (แน่นอน code space สำหรับโค้ดนี้ยังรวม linear combinations ของ states เหล่านี้)

++++++++++++++++++++++++++++++++++++++++++++++++++++++++\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}

ตอนนี้เราสามารถนิยาม CSS codes ด้วยคำพูดง่าย ๆ

นิยาม

CSS code คือ stabilizer code ที่สามารถแสดงได้โดยใช้เฉพาะ XX และ ZZ stabilizer generators

กล่าวคือ CSS codes คือ stabilizer codes ที่เรามี stabilizer generators ที่ไม่มี Pauli YY matrices และ XX และ ZZ ไม่ปรากฏใน stabilizer generator เดียวกัน

เพื่อให้ชัดเจน ตามนิยามนี้ CSS code คือโค้ดที่ เป็นไปได้ ที่จะเลือกแค่ XX และ ZZ stabilizer generators — แต่เราต้องจำไว้ว่ามีอิสระในการเลือก stabilizer generators สำหรับ stabilizer codes ดังนั้น โดยทั่วไปจะมีทางเลือกต่าง ๆ สำหรับ stabilizer generators ของ CSS code ที่บังเอิญไม่เป็น XX หรือ ZZ stabilizer generators (นอกเหนือจากอย่างน้อยหนึ่งทางเลือกที่เป็น)

นี่คือตัวอย่างง่าย ๆ มากของ CSS code ที่รวมทั้ง ZZ stabilizer generator และ XX stabilizer generator:

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

ชัดเจนว่านี่คือ CSS code เพราะ stabilizer generator แรกเป็น ZZ stabilizer generator และตัวที่สองเป็น XX stabilizer generator แน่นอน CSS code ต้องเป็น valid stabilizer code ด้วย — หมายความว่า stabilizer generators ต้อง commute กัน เป็น minimal generating set และ fix quantum state vector อย่างน้อยหนึ่งตัว ข้อกำหนดเหล่านี้ง่ายต่อการสังเกตสำหรับโค้ดนี้ ดังที่เราสังเกตในบทก่อนหน้า code space สำหรับโค้ดนี้คือ one-dimensional space ที่ span ด้วย ϕ+\vert\phi^+\rangle Bell state ข้อเท็จจริงที่ทั้งสอง stabilizer generators fix state นี้เห็นได้ชัดจากการพิจารณาสอง expressions ต่อไปนี้ของ e-bit พร้อมกับการตีความ stabilizer generators เหล่านี้เป็น parity checks ใน {0,1}\{\vert 0\rangle, \vert 1\rangle\} และ {+,}\{\vert +\rangle, \vert -\rangle\} bases

ϕ+=00+112=+++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}}

7-qubit Steane code เป็นอีกตัวอย่างของ CSS code

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}

ที่นี่เรามี ZZ stabilizer generators สามตัวและ XX stabilizer generators สามตัว และเราได้ตรวจสอบแล้วว่านี่คือ valid stabilizer code

และ 9-qubit Shor code เป็นอีกตัวอย่าง

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}

คราวนี้เรามี ZZ stabilizer generators หกตัวและ XX stabilizer generators เพียงสองตัว ไม่เป็นไร ไม่จำเป็นต้องมีความสมดุลหรือสมมาตรระหว่างสองประเภทของ generators (แม้ว่าบ่อยครั้งจะมี)

อีกครั้ง สิ่งสำคัญคือ CSS codes ต้องเป็น valid stabilizer codes และโดยเฉพาะ ZZ stabilizer generator แต่ละตัวต้อง commute กับ XX stabilizer generator แต่ละตัว ดังนั้น ไม่ใช่ทุกชุดของ XX และ ZZ stabilizer generators ที่กำหนด valid CSS code

การตรวจจับและแก้ไขข้อผิดพลาด

เกี่ยวกับการตรวจจับและแก้ไขข้อผิดพลาด CSS codes โดยทั่วไปมีลักษณะคล้ายกับ 9-qubit Shor code กล่าวคือ XX และ ZZ errors สามารถตรวจจับและแก้ไขได้อย่างอิสระโดยสมบูรณ์ โดยที่ ZZ stabilizer generators อธิบายโค้ดที่ป้องกัน bit flips และ XX stabilizer generators อธิบายโค้ดที่ป้องกัน phase flips อย่างอิสระ สิ่งนี้ทำงานได้เพราะ ZZ stabilizer generators commute กับ ZZ errors อย่างจำเป็น รวมถึง ZZ operations ที่นำไปใช้เป็น corrections ดังนั้นพวกมันมองไม่เห็นทั้งสองอย่างโดยสมบูรณ์ และเช่นเดียวกันสำหรับ XX stabilizer generators, errors และ corrections

เป็นตัวอย่าง มาพิจารณา 7-qubit Steane code

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}

แนวคิดพื้นฐานสำหรับโค้ดนี้ชัดเจนแล้วในตอนนี้: มันเป็น [7,4,3][7,4,3]-Hamming code สำหรับ bit-flip errors และ [7,4,3][7,4,3]-Hamming code สำหรับ phase-flip errors ข้อเท็จจริงที่ XX และ ZZ stabilizer generators commute กันอาจเป็นความโชคดี เพราะนี่จะไม่เป็น valid stabilizer code หากไม่ได้เป็นเช่นนั้น แต่อันที่จริง มีตัวอย่างที่รู้จักมากมายของ classical linear codes ที่ให้ valid stabilizer code เมื่อใช้ในลักษณะที่คล้ายกัน

โดยทั่วไป สมมติว่ามี CSS code ที่ ZZ stabilizer generators อนุญาตให้แก้ไข bit-flip errors สูงสุด jj อย่าง และ XX stabilizer generators อนุญาตให้แก้ไข phase-flip errors สูงสุด kk อย่าง ตัวอย่างเช่น j=1j = 1 และ k=1k = 1 สำหรับ Steane code เนื่องจาก [7,4,3][7,4,3]-Hamming code สามารถแก้ไข bit flip หนึ่งอย่างได้ จากนั้นตามมาว่า จาก discretization of errors CSS code นี้สามารถแก้ไข ข้อผิดพลาดใด ๆ บน qubits จำนวนหนึ่งสูงสุดถึง minimum ของ jj และ kk เพราะเมื่อวัด syndrome ข้อผิดพลาดใด ๆ บน qubit จำนวนนั้นจะ collapse อย่าง probabilistic เป็น combination บางอย่างของ XX errors, ZZ errors หรือทั้งสอง — แล้ว XX errors และ ZZ errors จะถูกตรวจจับและแก้ไขอย่างอิสระ

สรุปได้ว่า ถ้ามี classical linear codes สองตัว (หรือสำเนาสองตัวของ classical linear code เดียวกัน) ที่เข้ากันได้ ในแง่ที่กำหนด XX และ ZZ stabilizer generators ที่ commute กัน CSS code ที่ได้จากการรวมพวกมันจะรับทอดคุณสมบัติการแก้ไขข้อผิดพลาดของโค้ดทั้งสองนั้น ในแง่ที่เพิ่งอธิบาย

สังเกตว่ามีราคาที่ต้องจ่ายด้วย กล่าวคือเราไม่สามารถ encode qubits ได้มากเท่ากับที่เราสามารถ encode bits ด้วย classical codes สองตัว เพราะจำนวนรวมของ stabilizer generators สำหรับ CSS code คือ ผลรวม ของจำนวน parity checks สำหรับ classical linear codes สองตัว และ stabilizer generator แต่ละตัวลด dimension ของ code space ลงครึ่งหนึ่ง ตัวอย่างเช่น [7,4,3][7,4,3]-Hamming code อนุญาตให้ encode classical bits สี่อย่าง เพราะมีเพียง parity check strings สามตัวสำหรับโค้ดนี้ ในขณะที่ 7-qubit Steane code encode เพียงหนึ่ง qubit เพราะมี stabilizer generators หกตัว

Code spaces ของ CSS codes

สิ่งสุดท้ายที่เราจะทำในการอภิปราย CSS codes นี้คือพิจารณา code spaces ของโค้ดเหล่านี้ สิ่งนี้จะให้โอกาสตรวจสอบความสัมพันธ์ที่ต้องมีระหว่าง classical linear codes สองตัวเพื่อให้เข้ากันได้ ในแง่ที่สามารถรวมเข้าด้วยกันเพื่อเป็น CSS code

พิจารณา CSS code ใด ๆ บน nn qubits และให้ z1,,zsΣnz_1, \ldots, z_s \in \Sigma^n เป็น nn-bit parity check strings ที่สอดคล้องกับ ZZ stabilizer generators ของโค้ดนี้ หมายความว่า classical linear code ที่อธิบายด้วยเฉพาะ ZZ stabilizer generators ซึ่งเราจะตั้งชื่อว่า CZ\mathcal{C}_Z มีรูปแบบต่อไปนี้

CZ={uΣn:uz1==uzs=0}\mathcal{C}_Z = \bigl\{ u \in \Sigma^n \,:\, u \cdot z_1 = \cdots = u \cdot z_s = 0 \bigr\}

พูดเป็นคำพูด classical linear code CZ\mathcal{C}_Z มีทุก string ที่ binary dot product กับทุก parity check strings z1,,zsz_1, \ldots, z_s เป็นศูนย์

ในทิศทางเดียวกัน ให้นำ x1,,xtΣnx_1,\ldots,x_t\in\Sigma^n เป็น nn-bit parity check strings ที่สอดคล้องกับ XX stabilizer generators ของโค้ดของเรา ดังนั้น classical linear code ที่สอดคล้องกับ XX stabilizer generators มีรูปแบบนี้

CX={uΣn:ux1==uxt=0}\mathcal{C}_X = \bigl\{ u \in \Sigma^n \,:\, u \cdot x_1 = \cdots = u \cdot x_t = 0 \bigr\}

XX stabilizer generators เพียงอย่างเดียวจึงอธิบายโค้ดที่คล้ายกับโค้ดนี้ แต่ใน {+,}\{\vert {+}\rangle,\vert {-}\rangle\} basis แทน standard basis

ตอนนี้เราจะแนะนำ classical linear codes ใหม่สองตัวที่ได้มาจากทางเลือกเดียวกันของ strings z1,,zsz_1,\ldots,z_s และ x1,,xtx_1,\ldots,x_t แต่เราถือว่า strings เหล่านี้เป็น generators แทนที่จะเป็น parity check strings โดยเฉพาะ เราได้โค้ดสองตัวนี้

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}

สิ่งเหล่านี้เรียกว่า dual codes ของโค้ดที่นิยามก่อนหน้า: DZ\mathcal{D}_Z คือ dual code ของ CZ\mathcal{C}_Z และ DX\mathcal{D}_X คือ dual code ของ CX\mathcal{C}_X อาจไม่ชัดเจนในจุดนี้ว่า dual codes เหล่านี้เกี่ยวข้องอย่างไร แต่มันเกี่ยวข้องอย่างมากด้วยหลายเหตุผล รวมถึงสองเหตุผลที่อธิบายในย่อหน้าต่อไปนี้

ประการแรก เงื่อนไขที่ต้องมีสำหรับ classical linear codes CZ\mathcal{C}_Z และ CX\mathcal{C}_X สองตัวเพื่อให้เข้ากันได้ ในแง่ที่สามารถจับคู่กันเพื่อเป็น CSS code สามารถอธิบายได้ในคำพูดง่าย ๆ โดยอ้างถึง dual codes โดยเฉพาะ ต้องเป็นว่า DZCX\mathcal{D}_Z\subseteq\mathcal{C}_X หรือเทียบเท่าคือ DXCZ\mathcal{D}_X\subseteq\mathcal{C}_Z พูดเป็นคำพูด dual code DZ\mathcal{D}_Z รวม strings ที่สอดคล้องกับ ZZ stabilizer generators และการที่พวกมันอยู่ใน CX\mathcal{C}_X เทียบเท่ากับ binary dot product ของแต่ละ string เหล่านี้กับตัวที่สอดคล้องกับ XX stabilizer generators เป็นศูนย์ สิ่งนั้น ในทางกลับกัน เทียบเท่ากับ ZZ stabilizer generator แต่ละตัว commute กับ XX stabilizer generator แต่ละตัว หรือโดยสลับบทบาทของ XX และ ZZ stabilizer generators และเริ่มจากการบรรจุ DXCZ\mathcal{D}_X\subseteq\mathcal{C}_Z เราสามารถสรุปผลเดียวกันได้

ประการที่สอง โดยอ้างถึง dual codes เราสามารถอธิบาย code spaces ของ CSS code ที่กำหนดได้ง่าย โดยเฉพาะ code space ถูก span ด้วย vectors ของรูปแบบต่อไปนี้

uDX=12tvDXuv(for all uCZ)\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$)}

พูดเป็นคำพูด vectors เหล่านี้คือ uniform superpositions บน strings ใน dual code DX\mathcal{D}_X ของโค้ดที่สอดคล้องกับ XX stabilizer generators ที่ถูก shift ด้วย (กล่าวคือ bitwise XORed กับ) strings ใน code CZ\mathcal{C}_Z ที่สอดคล้องกับ ZZ stabilizer generators เพื่อให้ชัดเจน ทางเลือกต่าง ๆ สำหรับ shift — แทนด้วย string uu ใน expression นี้ — อาจให้ vector เดียวกัน ดังนั้น states เหล่านี้ไม่ได้แตกต่างกันทั้งหมด แต่รวมกันแล้ว span code space ทั้งหมด

นี่คือคำอธิบายเชิงสัญชาตญาณว่าทำไม vectors ดังกล่าวถึงทั้งอยู่ใน code space และ span มัน พิจารณา nn-qubit standard basis state u\vert u\rangle สำหรับ nn-bit string uu ใด ๆ และสมมติว่าเรา project state นี้ลงบน code space กล่าวคือ ให้ Π\Pi แทน projection ลงบน code space ของ CSS code ของเรา พิจารณา vector Πu\Pi\vert u\rangle มีสองกรณี:

  • กรณีที่ 1: uCZu\in\mathcal{C}_Z สิ่งนี้หมายความว่า ZZ stabilizer generator แต่ละตัวของ CSS code ของเราทำงาน trivially บน u\vert u\rangle ในทางกลับกัน XX stabilizer generators แต่ละตัว flip bits บางส่วนของ u\vert u\rangle โดยเฉพาะ สำหรับ generator vv ของ DX\mathcal{D}_X แต่ละตัว XX stabilizer generator ที่สอดคล้องกับ vv แปลง u\vert u\rangle เป็น uv\vert u\oplus v\rangle โดยระบุ projection Π\Pi เป็น ค่าเฉลี่ย บน elements ของ stabilizer (ดังที่เราเห็นในบทก่อนหน้า) เราได้สูตรนี้:

    Πu=12tvDXuv=12tuDX.\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.
  • กรณีที่ 2: uCZu\notin\mathcal{C}_Z สิ่งนี้หมายความว่า parity checks อย่างน้อยหนึ่งอันที่สอดคล้องกับ ZZ stabilizer generators ล้มเหลว ซึ่งก็คือ u\vert u\rangle ต้องเป็น 1-1 eigenvector ของ ZZ stabilizer generators อย่างน้อยหนึ่งตัว code space ของ CSS code คือ intersection ของ +1+1 eigenspaces ของ stabilizer generators ดังนั้น ในฐานะ 1-1 eigenvector ของ ZZ stabilizer generators อย่างน้อยหนึ่งตัว u\vert u\rangle จึง orthogonal กับ code space:

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

และตอนนี้ เมื่อเราวนซ้ำบน nn-bit strings uu ทั้งหมด ทิ้งตัวที่ Πu=0\Pi\vert u\rangle = 0 และ normalize ตัวที่เหลือ เราได้ vectors ที่อธิบายก่อนหน้า ซึ่งแสดงว่าพวกมัน span code space

เรายังสามารถใช้ความสมมาตรระหว่าง XX และ ZZ stabilizer generators เพื่ออธิบาย code space ในทิศทางที่คล้ายกันแต่แตกต่าง โดยเฉพาะ มันคือ space ที่ span ด้วย vectors ที่มีรูปแบบต่อไปนี้

HnuDZ=12svDZHnuv(for uCX)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$)}

โดยพื้นฐาน XX และ ZZ ถูกสลับในทุก instance ที่ปรากฏ — แต่เราต้องสลับ standard basis สำหรับ {+,}\{\vert+\rangle,\vert-\rangle\} basis ด้วย ซึ่งเป็นเหตุผลที่ Hadamard operations รวมอยู่

เป็นตัวอย่าง มาพิจารณา 7-qubit Steane code parity check strings สำหรับทั้ง XX และ ZZ stabilizer generators เหมือนกัน: 1111000,1111000, 1100110,1100110, และ 10101011010101 ดังนั้น codes CX\mathcal{C}_X และ CZ\mathcal{C}_Z เหมือนกัน ทั้งสองเท่ากับ [7,4,3][7,4,3]-Hamming code

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\}

ดังนั้น dual codes DX\mathcal{D}_X และ DZ\mathcal{D}_Z ก็เหมือนกันด้วย เรามี generators สามตัว ดังนั้นเราได้ strings แปดตัว

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

strings เหล่านี้อยู่ใน [7,4,3][7,4,3]-Hamming code ทั้งหมด ดังนั้นเงื่อนไข CSS จึงตอบสนอง: DZCX\mathcal{D}_Z \subseteq \mathcal{C}_X หรือเทียบเท่าคือ DXCZ\mathcal{D}_X \subseteq \mathcal{C}_Z

เนื่องจาก DX\mathcal{D}_X มีครึ่งหนึ่งของ strings ทั้งหมดใน CZ\mathcal{C}_Z จึงมีเพียง vectors uDX\vert u\oplus \mathcal{D}_X\rangle สองตัวที่แตกต่างที่ได้จากการเลือก uCZu\in\mathcal{C}_Z สิ่งนี้คาดหวังได้ เพราะ 7-qubit Steane code มี code space สองมิติ เราสามารถใช้สอง states ที่เราได้ในลักษณะนี้เพื่อ encode logical state 0\vert 0\rangle และ 1\vert 1\rangle ดังนี้

00000000+0011110+0101101+0110011+1001011+1010101+1100110+1111000810000111+0011001+0101010+0110100+1001100+1010010+1100001+11111118\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}

ตามปกติ ทางเลือกนี้ไม่ได้บังคับ เราเป็นอิสระในการใช้ code space เพื่อ encode qubits อย่างไรก็ได้ตามที่เลือก อย่างไรก็ตาม encoding นี้สอดคล้องกับตัวอย่างของ encoding circuit สำหรับ 7-qubit Steane code ในบทก่อนหน้า

Source: IBM Quantum docs — updated 15 ม.ค. 2569
English version on doQumentation — updated 7 พ.ค. 2569
This translation based on the English version of approx. 26 มี.ค. 2569