CSS Codes
Classical linear codes
โค้ดแก้ไขข้อผิดพลาดแบบคลาสสิกได้รับการศึกษาครั้งแรกในทศวรรษ 1940 และปัจจุบันรู้จักโค้ดจำนวนมาก โดยโค้ดที่ศึกษาและใช้กันมากที่สุดอยู่ในหมวดหมู่ที่เรียกว่า linear codes เราจะเห็นในอีกสักครู่ว่าคำว่า "linear" หมายถึงอะไรในบริบทนี้ แต่วิธีง่าย ๆ ในการอธิบาย linear codes ณ จุดนี้คือ พวกมันคือ stabilizer codes ที่บังเอิญเป็นแบบคลาสสิก CSS codes โดยพื้นฐานแล้วคือ คู่ ของ classical linear codes ที่รวมเข้าด้วยกันเพื่อสร้างโค้ดแก้ไขข้อผิดพลาดเชิงควอนตัม ดังนั้นเพื่อการอภิปรายต่อไปนี้ เราต้องเข้าใจพื้นฐานบางอย่างเกี่ยวกับ classical linear codes
ให้ เป็น binary alphabet สำหรับการอภิปรายทั้งหมดนี้ เมื่อเราอ้างถึง classical linear code เราหมายถึงชุดที่ไม่ว่าง ของ binary strings ที่มีความยาว สำหรับจำนวนเต็มบวกบางตัว ซึ่งต้องตอบสนองคุณสมบัติพื้นฐานเพียงหนึ่งอย่าง: ถ้า และ เป็น binary strings ใน แล้ว string ก็อยู่ใน ด้วย ที่นี่ หมายถึง bitwise exclusive-OR ของ และ ดังที่เราพบหลายครั้งใน คอร์ส "Fundamentals of quantum algorithms"
โดยพื้นฐาน เมื่อเราอ้างถึง classical error correcting code ว่าเป็น linear เราคิดถึง binary strings ที่มีความยาว ในฐานะ vectors มิติ โดยที่ entries เป็น หรือ และต้องการให้โค้ดเองเป็น linear subspace แทนที่จะเป็น vector addition ธรรมดาบนจำนวนจริงหรือจำนวนเชิงซ้อน เราใช้การบวก modulo ซึ่งก็คือ exclusive-OR กล่าวคือ ถ้ามี codewords สองตัว และ หมายความว่า และ เป็น binary strings ใน แล้ว modulo 2 ซึ่งก็คือ ต้องเป็น codeword ใน ด้วย สังเกตโดยเฉพาะว่า implication นี้ต้องเป็นจริงแม้ สิ่งนี้หมายความว่า ต้องรวม all-zero string เพราะ bitwise exclusive-OR ของ string ใด ๆ กับตัวมันเองคือ all-zero string
ตัวอย่าง: 3-bit repetition code
3-bit repetition code เป็นตัวอย่างของ classical linear code โดยเฉพาะ เรามี ดังนั้นเทียบกับเงื่อนไข linearity มีเพียงสองทางเลือกสำหรับ และสองทางเลือกสำหรับ เป็นเรื่องง่ายที่จะตรวจสอบสี่คู่ที่เป็นไปได้เพื่อดูว่าเราได้ codeword เสมอเมื่อนำ bitwise exclusive-OR:
ตัวอย่าง: -Hamming code
นี่คืออีกตัวอย่างของ classical linear code ที่เรียกว่า -Hamming code มันเป็นหนึ่งใน classical error correcting codes แรก ๆ ที่เคยค้นพบ และประกอบด้วย binary strings ความยาว 7 จำนวน 16 strings เหล่านี้ (บางครั้ง -Hamming code เข้าใจว่าหมายถึงโค้ดที่มี strings เหล่านี้กลับทิศ แต่เราจะถือว่ามันเป็นโค้ดที่มี strings ที่แสดงที่นี่)
มีตรรกะง่าย ๆ เบื้องหลังการเลือก strings เหล่านี้ แต่เป็นเรื่องรองจากบท และจะไม่อธิบายที่นี่ สำหรับตอนนี้ เพียงแค่สังเกตว่านี่คือ classical linear code: การ XOR strings สองตัวใด ๆ เข้าด้วยกันจะให้ string อื่นในโค้ดเสมอ
สัญกรณ์ (ในวงเล็บเหลี่ยมเดี่ยว) หมายความคล้ายกับสัญกรณ์วงเล็บเหลี่ยมคู่สำหรับ stabilizer codes ที่กล่าวถึงในบทก่อนหน้า แต่ที่นี่สำหรับ classical linear codes โดยเฉพาะ codewords มี bits เราสามารถ encode bits โดยใช้โค้ด (เพราะมี codewords) และบังเอิญเป็น distance code หมายความว่า codewords ที่ต่างกันสองอันต้องต่างกันในอย่างน้อย ตำแหน่ง ดังนั้นต้อง flip อย่างน้อย bits เพื่อเปลี่ยน codeword หนึ่งเป็นอีกอัน ข้อเท็จจริงที่ว่านี่คือ distance code หมายความว่าสามารถแก้ไข bit-flip error ได้สูงสุดหนึ่งอย่าง
การอธิบาย classical linear codes
ตัวอย่างที่กล่าวถึงเพิ่งเป็นตัวอย่างง่าย ๆ ของ classical linear codes แต่แม้แต่ -Hamming code ก็ดูลึกลับบ้างเมื่อ codewords ถูกระบุไว้ง่าย ๆ มีวิธีที่ดีกว่าและมีประสิทธิภาพมากกว่าในการอธิบาย classical linear codes รวมถึงสองวิธีต่อไปนี้
-
Generators วิธีหนึ่งในการอธิบาย classical linear code คือด้วยรายการ codewords ขั้นต่ำที่ generates โค้ด หมายความว่าโดยการนำ subsets ทั้งหมดที่เป็นไปได้ของ codewords เหล่านี้และ XOR เข้าด้วยกัน เราได้โค้ดทั้งหมด
โดยละเอียดยิ่งขึ้น strings generates classical linear code ถ้า
โดยเข้าใจว่า เมื่อ และ เมื่อ และเราบอกว่ารายการนี้ minimal ถ้าการลบ string หนึ่งออกสร้างโค้ดที่เล็กลง วิธีธรรมชาติในการคิดถึงคำอธิบายดังกล่าวคือ ชุด เป็น basis ของ ในฐานะ subspace โดยที่เราคิดถึง strings ในฐานะ vectors ที่มี entries เป็น binary โดยจำไว้ว่าเราทำงานใน vector space ที่คณิตศาสตร์ทำ modulo
-
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 เป็น parity check strings สำหรับ classical linear code ถ้า
และชุดของ strings นี้ minimal ถ้าการลบหนึ่งออกให้โค้ดที่ใหญ่ขึ้น เรียกว่า parity check strings เพราะ มี binary dot product เท่ากับศูนย์กับ ถ้าและเฉพาะถ้า bits ของ ในตำแหน่งที่ มี 1 มี parity คู่ ดังนั้น เพื่อดูว่า string อยู่ใน code หรือไม่ ก็เพียงพอที่จะตรวจสอบ parity ของ subsets บางอย่างของ bits ของ
สิ่งสำคัญที่ต้องสังเกตที่นี่คือ binary dot product ไม่ใช่ inner product ในความหมายเป็นทางการ โดยเฉพาะ เมื่อ strings สองตัวมี binary dot product เท่ากับศูนย์ ไม่ได้หมายความว่าพวกมัน orthogonal ในทิศทางที่เรามักคิดถึง orthogonality ตัวอย่างเช่น binary dot product ของ string กับตัวมันเองเป็นศูนย์ ดังนั้นเป็นไปได้ที่ parity check string สำหรับ classical linear code อยู่ในโค้ดเอง
Classical linear codes บน binary alphabet มักรวม strings จำนวนหนึ่งที่เป็น power ของ — และสำหรับ classical linear code เดี่ยวที่อธิบายด้วยสองวิธีที่เพิ่งอธิบาย มักเป็นจริงว่า โดยเฉพาะ ถ้ามี generators ขั้นต่ำ ตัว โค้ดจะ encode bits และจะมี codewords และถ้ามี parity check strings ขั้นต่ำ ตัว จะมี codewords ดังนั้น generator แต่ละตัวทำให้ code space เป็นสองเท่า ขณะที่ parity check string แต่ละตัวทำให้ครึ่งหนึ่ง
ตัวอย่างเช่น 3-bit repetition code เป็น linear code ดังนั้นสามารถอธิบายได้ทั้งสองวิธีนี้ โดยเฉพาะ มีเพียงหนึ่งทางเลือกสำหรับ generator ที่ใช้ได้: เราสามารถอธิบายโค้ดด้วย parity check strings สองตัวแทน เช่น และ — ซึ่งน่าจะดูคุ้นเคยจากการอภิปรายก่อนหน้าของโค้ดนี้ — หรือเราอาจนำ parity check strings เป็น และ หรือ และ แทนก็ได้ (Generators และ parity check strings โดยทั่วไปไม่ unique สำหรับ classical linear code ที่กำหนด)
สำหรับตัวอย่างที่สอง พิจารณา -Hamming code นี่คือทางเลือกหนึ่งสำหรับรายการ generators ที่ใช้ได้
และนี่คือทางเลือกสำหรับรายการ parity checks สำหรับโค้ดนี้
ที่นี่ นอกจากนี้ เราเห็นว่า ทั้งหมด ของ parity check strings ของเรานั้นอยู่ในโค้ดเอง
ข้อสังเกตสุดท้ายเกี่ยวกับ classical linear codes ซึ่งเชื่อมโยงพวกมันกับ stabilizer formalism คือ parity check strings เทียบเท่ากับ stabilizer generators ที่ประกอบด้วยเฉพาะ และ identity Pauli matrices ตัวอย่างเช่น parity check strings และ สำหรับ 3-bit repetition code สอดคล้องกับ stabilizer generators และ พอดี ซึ่งสอดคล้องกับการอภิปรายของ Pauli observables จากบทก่อนหน้า
นิยามของ CSS codes
CSS codes คือ stabilizer codes ที่ได้จากการรวม คู่ ของ classical linear codes บางอย่างเข้าด้วยกัน สิ่งนี้ใช้ไม่ได้กับ classical linear codes สองตัวใด ๆ — โค้ดสองตัวต้องมีความสัมพันธ์บางอย่าง อย่างไรก็ตาม construction นี้เปิดความเป็นไปได้มากมายสำหรับโค้ดแก้ไขข้อผิดพลาดเชิงควอนตัม อาศัยส่วนหนึ่งจาก classical coding theory กว่า 75 ปี
ใน stabilizer formalism stabilizer generators ที่มีเฉพาะ และ identity Pauli matrices เทียบเท่ากับ parity checks ดังที่เราเพิ่งสังเกตสำหรับ 3-bit repetition code สำหรับตัวอย่างอื่น พิจารณา parity check strings ต่อไปนี้สำหรับ -Hamming code
parity check strings เหล่านี้สอดคล้องกับ stabilizer generators ต่อไปนี้ (เขียนโดยไม่มีสัญลักษณ์ tensor product) ซึ่งเราได้โดยแทน ด้วย และ ด้วย นี่คือสามในหก stabilizer generators สำหรับ 7-qubit Steane code
เราให้ชื่อ stabilizer generators กับ stabilizer generators แบบนี้ หมายความว่ามีเฉพาะ Pauli และ identity tensor factors — ดังนั้น และ Pauli matrices ไม่เกิดขึ้นใน stabilizer generators
เราสามารถพิจารณา stabilizer generators ที่มีเฉพาะ และ identity Pauli matrices เป็น tensor factors ด้วย Stabilizer generators แบบนี้มองได้ว่าคล้ายกับ -stabilizer generators ยกเว้นว่าอธิบาย parity checks ใน basis แทน standard basis Stabilizer generators ของรูปแบบนี้เรียกว่า stabilizer generators — ดังนั้นไม่อนุญาตให้มี หรือ Pauli matrices
ตัวอย่างเช่น พิจารณา stabilizer generators สามตัวที่เหลือจาก 7-qubit Steane code
พวกมันทำตามรูปแบบเดียวกันจาก -Hamming code กับ -stabilizer generators ยกเว้นคราวนี้แทน สำหรับ แทนที่จะเป็น สิ่งที่เราได้จาก stabilizer generators สามตัวนี้เท่านั้นคือโค้ดที่รวม 16 states ที่แสดงที่นี่ ซึ่งเราได้โดยนำ Hadamard operations ไปใช้กับ standard basis states ที่สอดคล้องกับ strings ใน -Hamming code (แน่นอน code space สำหรับโค้ดนี้ยังรวม linear combinations ของ states เหล่านี้)
ตอนนี้เราสามารถนิยาม CSS codes ด้วยคำพูดง่าย ๆ
กล่าวคือ CSS codes คือ stabilizer codes ที่เรามี stabilizer generators ที่ไม่มี Pauli matrices และ และ ไม่ปรากฏใน stabilizer generator เดียวกัน
เพื่อให้ชัดเจน ตามนิยามนี้ CSS code คือโค้ดที่ เป็นไปได้ ที่จะเลือกแค่ และ stabilizer generators — แต่เราต้องจำไว้ว่ามีอิสระในการเลือก stabilizer generators สำหรับ stabilizer codes ดังนั้น โดยทั่วไปจะมีทางเลือกต่าง ๆ สำหรับ stabilizer generators ของ CSS code ที่บังเอิญไม่เป็น หรือ stabilizer generators (นอกเหนือจากอย่างน้อยหนึ่งทางเลือกที่เป็น)
นี่คือตัวอย่างง่าย ๆ มากของ CSS code ที่รวมทั้ง stabilizer generator และ stabilizer generator:
ชัดเจนว่านี่คือ CSS code เพราะ stabilizer generator แรกเป็น stabilizer generator และตัวที่สองเป็น stabilizer generator แน่นอน CSS code ต้องเป็น valid stabilizer code ด้วย — หมายความว่า stabilizer generators ต้อง commute กัน เป็น minimal generating set และ fix quantum state vector อย่างน้อยหนึ่งตัว ข้อกำหนดเหล่านี้ง่ายต่อการสังเกตสำหรับโค้ดนี้ ดังที่เราสังเกตในบทก่อนหน้า code space สำหรับโค้ดนี้คือ one-dimensional space ที่ span ด้วย Bell state ข้อเท็จจริงที่ทั้งสอง stabilizer generators fix state นี้เห็นได้ชัดจากการพิจารณาสอง expressions ต่อไปนี้ของ e-bit พร้อมกับการตีความ stabilizer generators เหล่านี้เป็น parity checks ใน และ bases
7-qubit Steane code เป็นอีกตัวอย่างของ CSS code
ที่นี่เรามี stabilizer generators สามตัวและ stabilizer generators สามตัว และเราได้ตรวจสอบแล้วว่านี่คือ valid stabilizer code
และ 9-qubit Shor code เป็นอีกตัวอย่าง
คราวนี้เรามี stabilizer generators หกตัวและ stabilizer generators เพียงสองตัว ไม่เป็นไร ไม่จำเป็นต้องมีความสมดุลหรือสมมาตรระหว่างสองประเภทของ generators (แม้ว่าบ่อยครั้งจะมี)
อีกครั้ง สิ่งสำคัญคือ CSS codes ต้องเป็น valid stabilizer codes และโดยเฉพาะ stabilizer generator แต่ละตัวต้อง commute กับ stabilizer generator แต่ละตัว ดังนั้น ไม่ใช่ทุกชุดของ และ stabilizer generators ที่กำหนด valid CSS code
การตรวจจับและแก้ไขข้อผิดพลาด
เกี่ยวกับการตรวจจับและแก้ไขข้อผิดพลาด CSS codes โดยทั่วไปมีลักษณะคล้ายกับ 9-qubit Shor code กล่าวคือ และ errors สามารถตรวจจับและแก้ไขได้อย่างอิสระโดยสมบูรณ์ โดยที่ stabilizer generators อธิบายโค้ดที่ป้องกัน bit flips และ stabilizer generators อธิบายโค้ดที่ป้องกัน phase flips อย่างอิสระ สิ่งนี้ทำงานได้เพราะ stabilizer generators commute กับ errors อย่างจำเป็น รวมถึง operations ที่นำไปใช้เป็น corrections ดังนั้นพวกมันมองไม่เห็นทั้งสองอย่างโดยสมบูรณ์ และเช่นเดียวกันสำหรับ stabilizer generators, errors และ corrections
เป็นตัวอย่าง มาพิจารณา 7-qubit Steane code
แนวคิดพื้นฐานสำหรับโค้ดนี้ชัดเจนแล้วในตอนนี้: มันเป็น -Hamming code สำหรับ bit-flip errors และ -Hamming code สำหรับ phase-flip errors ข้อเท็จจริงที่ และ stabilizer generators commute กันอาจเป็นความโชคดี เพราะนี่จะไม่เป็น valid stabilizer code หากไม่ได้เป็นเช่นนั้น แต่อันที่จริง มีตัวอย่างที่รู้จักมากมายของ classical linear codes ที่ให้ valid stabilizer code เมื่อใช้ในลักษณะที่คล้ายกัน
โดยทั่วไป สมมติว่ามี CSS code ที่ stabilizer generators อนุญาตให้แก้ไข bit-flip errors สูงสุด อย่าง และ stabilizer generators อนุญาตให้แก้ไข phase-flip errors สูงสุด อย่าง ตัวอย่างเช่น และ สำหรับ Steane code เนื่องจาก -Hamming code สามารถแก้ไข bit flip หนึ่งอย่างได้ จากนั้นตามมาว่า จาก discretization of errors CSS code นี้สามารถแก้ไข ข้อผิดพลาดใด ๆ บน qubits จำนวนหนึ่งสูงสุดถึง minimum ของ และ เพราะเมื่อวัด syndrome ข้อผิดพลาดใด ๆ บน qubit จำนวนนั้นจะ collapse อย่าง probabilistic เป็น combination บางอย่างของ errors, errors หรือทั้งสอง — แล้ว errors และ errors จะถูกตรวจจับและแก้ไขอย่างอิสระ
สรุปได้ว่า ถ้ามี classical linear codes สองตัว (หรือสำเนาสองตัวของ classical linear code เดียวกัน) ที่เข้ากันได้ ในแง่ที่กำหนด และ 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 ลงครึ่งหนึ่ง ตัวอย่างเช่น -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 ใด ๆ บน qubits และให้ เป็น -bit parity check strings ที่สอดคล้องกับ stabilizer generators ของโค้ดนี้ หมายความว่า classical linear code ที่อธิบายด้วยเฉพาะ stabilizer generators ซึ่งเราจะตั้งชื่อว่า มีรูปแบบต่อไปนี้
พูดเป็นคำพูด classical linear code มีทุก string ที่ binary dot product กับทุก parity check strings เป็นศูนย์
ในทิศทางเดียวกัน ให้นำ เป็น -bit parity check strings ที่สอดคล้องกับ stabilizer generators ของโค้ดของเรา ดังนั้น classical linear code ที่สอดคล้องกับ stabilizer generators มีรูปแบบนี้
stabilizer generators เพียงอย่างเดียวจึงอธิบายโค้ดที่คล้ายกับโค้ดนี้ แต่ใน basis แทน standard basis
ตอนนี้เราจะแนะนำ classical linear codes ใหม่สองตัวที่ได้มาจากทางเลือกเดียวกันของ strings และ แต่เราถือว่า strings เหล่านี้เป็น generators แทนที่จะเป็น parity check strings โดยเฉพาะ เราได้โค้ดสองตัวนี้
สิ่งเหล่านี้เรียกว่า dual codes ของโค้ดที่นิยามก่อนหน้า: คือ dual code ของ และ คือ dual code ของ อาจไม่ชัดเจนในจุดนี้ว่า dual codes เหล่านี้เกี่ยวข้องอย่างไร แต่มันเกี่ยวข้องอย่างมากด้วยหลายเหตุผล รวมถึงสองเหตุผลที่อธิบายในย่อหน้าต่อไปนี้
ประการแรก เงื่อนไขที่ต้องมีสำหรับ classical linear codes และ สองตัวเพื่อให้เข้ากันได้ ในแง่ที่สามารถจับคู่กันเพื่อเป็น CSS code สามารถอธิบายได้ในคำพูดง่าย ๆ โดยอ้างถึง dual codes โดยเฉพาะ ต้องเป็นว่า หรือเทียบเท่าคือ พูดเป็นคำพูด dual code รวม strings ที่สอดคล้องกับ stabilizer generators และการที่พวกมันอยู่ใน เทียบเท่ากับ binary dot product ของแต่ละ string เหล่านี้กับตัวที่สอดคล้องกับ stabilizer generators เป็นศูนย์ สิ่งนั้น ในทางกลับกัน เทียบเท่ากับ stabilizer generator แต่ละตัว commute กับ stabilizer generator แต่ละตัว หรือโดยสลับบทบาทของ และ stabilizer generators และเริ่มจากการบรรจุ เราสามารถสรุปผลเดียวกันได้
ประการที่สอง โดยอ้างถึง dual codes เราสามารถอธิบาย code spaces ของ CSS code ที่กำหนดได้ง่าย โดยเฉพาะ code space ถูก span ด้วย vectors ของรูปแบบต่อไปนี้
พูดเป็นคำพูด vectors เหล่านี้คือ uniform superpositions บน strings ใน dual code ของโค้ดที่สอดคล้องกับ stabilizer generators ที่ถูก shift ด้วย (กล่าวคือ bitwise XORed กับ) strings ใน code ที่สอดคล้องกับ stabilizer generators เพื่อให้ชัดเจน ทางเลือกต่าง ๆ สำหรับ shift — แทนด้วย string ใน expression นี้ — อาจให้ vector เดียวกัน ดังนั้น states เหล่านี้ไม่ได้แตกต่างกันทั้งหมด แต่รวมกันแล้ว span code space ทั้งหมด
นี่คือคำอธิบายเชิงสัญชาตญาณว่าทำไม vectors ดังกล่าวถึงทั้งอยู่ใน code space และ span มัน พิจารณา -qubit standard basis state สำหรับ -bit string ใด ๆ และสมมติว่าเรา project state นี้ลงบน code space กล่าวคือ ให้ แทน projection ลงบน code space ของ CSS code ของเรา พิจารณา vector มีสองกรณี:
-
กรณีที่ 1: สิ่งนี้หมายความว่า stabilizer generator แต่ละตัวของ CSS code ของเราทำงาน trivially บน ในทางกลับกัน stabilizer generators แต่ละตัว flip bits บางส่วนของ โดยเฉพาะ สำหรับ generator ของ แต่ละตัว stabilizer generator ที่สอดคล้องกับ แปลง เป็น โดยระบุ projection เป็น ค่าเฉลี่ย บน elements ของ stabilizer (ดังที่เราเห็นในบทก่อนหน้า) เราได้สูตรนี้:
-
กรณีที่ 2: สิ่งนี้หมายความว่า parity checks อย่างน้อยหนึ่งอันที่สอดคล้องกับ stabilizer generators ล้มเหลว ซึ่งก็คือ ต้องเป็น eigenvector ของ stabilizer generators อย่างน้อยหนึ่งตัว code space ของ CSS code คือ intersection ของ eigenspaces ของ stabilizer generators ดังนั้น ในฐานะ eigenvector ของ stabilizer generators อย่างน้อยหนึ่งตัว จึง orthogonal กับ code space:
และตอนนี้ เมื่อเราวนซ้ำบน -bit strings ทั้งหมด ทิ้งตัวที่ และ normalize ตัวที่เหลือ เราได้ vectors ที่อธิบายก่อนหน้า ซึ่งแสดงว่าพวกมัน span code space
เรายังสามารถใช้ความสมมาตรระหว่าง และ stabilizer generators เพื่ออธิบาย code space ในทิศทางที่คล้ายกันแต่แตกต่าง โดยเฉพาะ มันคือ space ที่ span ด้วย vectors ที่มีรูปแบบต่อไปนี้
โดยพื้นฐาน และ ถูกสลับในทุก instance ที่ปรากฏ — แต่เราต้องสลับ standard basis สำหรับ basis ด้วย ซึ่งเป็นเหตุผลที่ Hadamard operations รวมอยู่
เป็นตัวอย่าง มาพิจารณา 7-qubit Steane code parity check strings สำหรับทั้ง และ stabilizer generators เหมือนกัน: และ ดังนั้น codes และ เหมือนกัน ทั้งสองเท่ากับ -Hamming code
ดังนั้น dual codes และ ก็เหมือนกันด้วย เรามี generators สามตัว ดังนั้นเราได้ strings แปดตัว
strings เหล่านี้อยู่ใน -Hamming code ทั้งหมด ดังนั้นเงื่อนไข CSS จึงตอบสนอง: หรือเทียบเท่าคือ
เนื่องจาก มีครึ่งหนึ่งของ strings ทั้งหมดใน จึงมีเพียง vectors สองตัวที่แตกต่างที่ได้จากการเลือก สิ่งนี้คาดหวังได้ เพราะ 7-qubit Steane code มี code space สองมิติ เราสามารถใช้สอง states ที่เราได้ในลักษณะนี้เพื่อ encode logical state และ ดังนี้
ตามปกติ ทางเลือกนี้ไม่ได้บังคับ เราเป็นอิสระในการใช้ code space เพื่อ encode qubits อย่างไรก็ได้ตามที่เลือก อย่างไรก็ตาม encoding นี้สอดคล้องกับตัวอย่างของ encoding circuit สำหรับ 7-qubit Steane code ในบทก่อนหน้า