주 콘텐츠로 건너뛰기

CSS 코드

고전 선형 코드

고전 오류 정정 코드는 1940년대에 처음 연구되었으며, 현재 다양한 코드가 알려져 있습니다. 가장 일반적으로 연구되고 사용되는 코드는 선형 코드라고 알려진 범주에 속합니다. "선형"이라는 단어가 이 맥락에서 정확히 무엇을 의미하는지는 잠시 후에 살펴보겠지만, 선형 코드가 무엇인지 지금 단계에서 아주 간단하게 표현하자면, 그것은 우연히 고전적인 성질을 지닌 안정자 코드라고 할 수 있습니다. CSS 코드는 본질적으로 고전 선형 코드의 으로, 이 두 코드를 결합하여 양자 오류 정정 코드를 만듭니다. 따라서 이후 논의를 위해 고전 선형 코드에 대한 몇 가지 기본 사항을 이해해야 합니다.

이번 논의 전체에서 Σ\Sigma를 이진 알파벳으로 사용합니다. 고전 선형 코드란 양의 정수 nn에 대해 길이 nn인 이진 문자열의 비어 있지 않은 집합 CΣn\mathcal{C}\subseteq\Sigma^n을 의미하며, 이는 하나의 기본 성질을 만족해야 합니다. 즉, uuvvC\mathcal{C}에 속하는 이진 문자열이면, 문자열 uvu\oplus vC\mathcal{C}에 속해야 합니다. 여기서 uvu\oplus v는 "양자 알고리즘의 기초" 강좌에서 여러 번 접했던 uuvv의 비트별 배타적 논리합(XOR)을 의미합니다.

본질적으로, 고전 오류 정정 코드를 선형이라고 부를 때, 우리는 길이 nn의 이진 문자열을 nn차원 벡터로 생각하며, 각 항목은 00 또는 11이고, 코드 자체가 선형 부분공간을 형성하도록 요구합니다. 그러나 실수 또는 복소수에 대한 일반적인 벡터 덧셈 대신, 배타적 논리합과 동일한 모듈로 22 덧셈을 사용합니다. 즉, 두 코드워드 uuvv, 다시 말해 uuvvC\mathcal{C}에 속하는 이진 문자열이면, 모듈로 22로 계산한 u+vu + v, 즉 uvu\oplus vC\mathcal{C}의 코드워드여야 합니다. 특히 이 조건은 u=vu = v인 경우에도 성립해야 합니다. 어떤 문자열과 자기 자신의 비트별 XOR은 항상 전부 00인 문자열이 되므로, C\mathcal{C}는 반드시 전부 00인 문자열 0n0^n을 포함해야 합니다.

예시: 3비트 반복 코드

3비트 반복 코드는 고전 선형 코드의 한 예입니다. 특히 C={000,111}\mathcal{C} = \{000,111\}이므로, 선형성 조건과 관련하여 uu에 대한 가능한 선택은 두 가지이고, vv에 대한 가능한 선택도 두 가지입니다. 네 가지 가능한 쌍을 모두 확인해 보면, 비트별 XOR을 취했을 때 항상 코드워드가 됨을 알 수 있습니다.

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]-해밍 코드

다음은 [7,4,3][7,4,3]-해밍 코드라고 불리는 고전 선형 코드의 또 다른 예입니다. 이것은 최초로 발견된 고전 오류 정정 코드 중 하나로, 길이 77인 다음 1616개의 이진 문자열로 구성됩니다. (경우에 따라 [7,4,3][7,4,3]-해밍 코드는 이 문자열들이 반전된 코드를 의미하기도 하지만, 여기서는 아래에 표시된 문자열을 포함하는 코드로 정의합니다.)

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}

이 문자열들의 선택 뒤에는 매우 단순한 논리가 있지만, 이는 본 강의의 부차적인 내용이므로 여기서 설명하지 않습니다. 지금은 이것이 고전 선형 코드임을 관찰하는 것으로 충분합니다. 이 문자열들 중 어떤 두 문자열을 XOR해도 항상 코드에 속하는 다른 문자열이 됩니다.

표기법 [7,4,3][7,4,3](단일 대괄호)은 이전 강의에서 언급된 안정자 코드의 이중 대괄호 표기법과 유사한 의미를 갖지만, 여기서는 고전 선형 코드를 나타냅니다. 특히, 코드워드는 77비트를 가지며, 코드워드가 16=2416 = 2^4개이므로 코드를 사용하여 44비트를 인코딩할 수 있습니다. 또한 이것은 거리 33 코드로, 서로 다른 두 코드워드는 적어도 33개의 위치에서 달라야 함을 의미합니다. 즉, 하나의 코드워드를 다른 코드워드로 바꾸려면 적어도 33개의 비트가 뒤집혀야 합니다. 이것이 거리 33 코드라는 사실은 최대 한 개의 비트 반전 오류를 정정할 수 있음을 의미합니다.

고전 선형 코드 설명 방법

방금 언급한 예시들은 고전 선형 코드의 매우 단순한 예이지만, [7,4,3][7,4,3]-해밍 코드조차 코드워드를 단순히 나열하면 다소 이해하기 어렵게 보입니다. 고전 선형 코드를 설명하는 더 좋고 효율적인 방법이 있으며, 다음 두 가지 방법이 그 예입니다.

  1. 생성원(Generators). 고전 선형 코드를 설명하는 한 가지 방법은 코드를 생성하는 코드워드의 최소 목록을 사용하는 것입니다. 즉, 이 코드워드들의 가능한 모든 부분집합을 취해 XOR하면 전체 코드를 얻을 수 있어야 합니다.

    더 자세히 설명하면, 문자열 u1,,umΣnu_1,\ldots,u_m\in\Sigma^n이 고전 선형 코드 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\},

    여기서 α=1\alpha = 1일 때 αu=u\alpha u = u이고 α=0\alpha = 0일 때 αu=0n\alpha u = 0^n입니다. 또한 이 목록이 최소라는 것은 그 중 하나의 문자열을 제거하면 더 작은 코드가 생성됨을 의미합니다. 이러한 설명을 생각하는 자연스러운 방법은 {u1,,um}\{u_1,\ldots,u_m\}의 모음이 C\mathcal{C}의 부분공간에 대한 기저를 형성한다고 보는 것입니다. 이때 문자열을 이진값 항목을 가진 벡터로 생각하며, 산술이 모듈로 22로 수행되는 벡터 공간에서 작업하고 있음을 명심해야 합니다.

  2. 패리티 검사(Parity checks). 고전 선형 코드를 설명하는 또 다른 자연스러운 방법은 패리티 검사를 이용하는 것입니다. 즉, 코드에 속하는 문자열이 정확히 이 패리티 검사 문자열들 각각과의 이진 내적00이 되는 문자열인 이진 문자열들의 최소 목록입니다. (비트별 XOR과 마찬가지로, 이진 내적은 "양자 알고리즘의 기초"에서 여러 번 등장했습니다.)

    즉, 문자열 v1,,vrΣnv_1,\ldots,v_r\in\Sigma^n이 고전 선형 코드 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\},

    이 문자열 집합이 최소라는 것은 하나를 제거하면 더 큰 코드가 된다는 것을 의미합니다. 이것을 패리티 검사 문자열이라고 부르는 이유는, uuvv와의 이진 내적이 00인 경우는 vv에서 11이 있는 위치에 해당하는 uu의 비트들이 짝수 패리티를 가질 때이기 때문입니다. 따라서 문자열 uu가 코드 C\mathcal{C}에 속하는지 확인하려면 uu의 특정 비트 부분집합의 패리티를 검사하는 것으로 충분합니다.

    여기서 중요한 점은, 이진 내적이 형식적인 의미에서 내적(inner product)이 아니라는 것입니다. 특히, 두 문자열의 이진 내적이 00이라는 것이 우리가 일반적으로 생각하는 직교성을 의미하지는 않습니다. 예를 들어, 문자열 1111과 자기 자신의 이진 내적은 00입니다. 따라서 고전 선형 코드의 패리티 검사 문자열이 그 코드 자체에 포함될 수도 있습니다.

이진 알파벳에 대한 고전 선형 코드는 항상 22의 거듭제곱만큼의 문자열을 포함합니다. 그리고 방금 설명한 두 가지 방식으로 설명되는 단일 고전 선형 코드에 대해서는 항상 n=m+rn = m + r이 성립합니다. 특히, 최소 생성원 mm개가 있으면 코드는 mm비트를 인코딩하며 코드워드는 2m2^m개입니다. 최소 패리티 검사 문자열 rr개가 있으면 코드워드는 2nr2^{n-r}개입니다. 따라서 각 생성원은 코드 공간의 크기를 두 배로 늘리고, 각 패리티 검사 문자열은 코드 공간의 크기를 절반으로 줄입니다.

예를 들어, 3비트 반복 코드는 선형 코드이므로 이 두 가지 방법으로 모두 설명할 수 있습니다. 특히, 생성원으로 사용할 수 있는 선택은 단 하나뿐입니다: 111111. 또는 두 개의 패리티 검사 문자열로 코드를 설명할 수도 있는데, 예를 들어 이전 논의에서 친숙하게 보아온 110110011011을 사용하거나, 110110101101, 또는 101101011011을 사용할 수도 있습니다. (생성원과 패리티 검사 문자열은 일반적으로 주어진 고전 선형 코드에 대해 유일하지 않습니다.)

두 번째 예로, [7,4,3][7,4,3]-해밍 코드를 고려해 봅시다. 다음은 사용 가능한 생성원 목록의 한 가지 선택입니다.

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

그리고 다음은 이 코드에 대한 패리티 검사 목록의 한 가지 선택입니다.

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

여기서 모든 패리티 검사 문자열이 코드 자체에 포함되어 있음을 확인할 수 있습니다.

고전 선형 코드에 대한 마지막 언급으로, 이를 안정자 형식주의와 연결하자면, 패리티 검사 문자열은 ZZ 및 항등 파울리 행렬만으로 구성된 안정자 생성원과 동등합니다. 예를 들어, 3비트 반복 코드의 패리티 검사 문자열 110110011011은 이전 강의의 파울리 관측값 논의와 일관되게 정확히 안정자 생성원 ZZIZ\otimes Z\otimes \mathbb{I}IZZ\mathbb{I}\otimes Z\otimes Z에 해당합니다.

CSS 코드의 정의

CSS 코드는 특정 고전 선형 코드의 을 결합하여 얻는 안정자 코드입니다. 임의의 두 고전 선형 코드에 대해 이것이 작동하는 것은 아닙니다. 두 코드는 특정 관계를 만족해야 합니다. 그럼에도 불구하고, 이 구성 방법은 75년 이상의 고전 코딩 이론에 기반하여 양자 오류 정정 코드에 대한 많은 가능성을 열어줍니다.

안정자 형식주의에서, ZZ와 항등 파울리 행렬만 포함하는 안정자 생성원은 패리티 검사와 동등합니다. 3비트 반복 코드에서 이미 살펴본 바와 같습니다. 또 다른 예로, [7,4,3][7,4,3]-해밍 코드의 다음 패리티 검사 문자열을 고려해 봅시다.

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

이 패리티 검사 문자열들은 다음과 같은 안정자 생성원에 해당합니다(텐서 곱 기호 없이 표기). 각 11ZZ로, 각 00I\mathbb{I}로 교체하여 얻습니다. 이것들은 7큐비트 스타인 코드의 여섯 개 안정자 생성원 중 세 개입니다.

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 안정자 생성원이라는 이름을 붙이겠습니다. 즉, 파울리 ZZ와 항등 텐서 인수만 갖는 안정자 생성원을 의미합니다. 따라서 ZZ 안정자 생성원에는 XXYY 파울리 행렬이 절대 나타나지 않습니다.

XX와 항등 파울리 행렬만 텐서 인수로 나타나는 안정자 생성원도 고려할 수 있습니다. 이러한 안정자 생성원은 ZZ 안정자 생성원과 유사하게 볼 수 있지만, 표준 기저 대신 {+,}\{\vert+\rangle,\vert-\rangle\} 기저에서 패리티 검사를 기술합니다. 이 형태의 안정자 생성원을 XX 안정자 생성원이라고 합니다. 즉, 이번에는 YY 또는 ZZ 파울리 행렬이 허용되지 않습니다.

예를 들어, 7큐비트 스타인 코드의 나머지 세 개 안정자 생성원을 고려해 봅시다.

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}

이것들은 ZZ 안정자 생성원과 동일한 [7,4,3][7,4,3]-해밍 코드의 패턴을 따르지만, 이번에는 11ZZ 대신 XX로 교체합니다. 이 세 개의 안정자 생성원만으로 얻어지는 코드에는 다음과 같이 표시된 16개의 상태가 포함됩니다. 이것들은 [7,4,3][7,4,3]-해밍 코드의 문자열에 해당하는 표준 기저 상태에 아다마르 연산을 적용하여 얻습니다. (물론, 이 코드의 코드 공간에는 이 상태들의 선형 결합도 포함됩니다.)

++++++++++++++++++++++++++++++++++++++++++++++++++++++++\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 코드를 매우 간단한 용어로 정의할 수 있습니다.

정의

CSS 코드는 XXZZ 안정자 생성원만을 사용하여 표현할 수 있는 안정자 코드입니다.

즉, CSS 코드는 파울리 YY 행렬이 나타나지 않는 안정자 생성원을 가지며, XXZZ동일한 안정자 생성원에 함께 나타나지 않는 안정자 코드입니다.

명확히 하자면, 이 정의에 따르면 CSS 코드는 XXZZ 안정자 생성원만을 선택하는 것이 가능한 코드입니다. 그러나 안정자 코드의 안정자 생성원을 선택하는 방법에는 자유도가 있음을 명심해야 합니다. 따라서 일반적으로 CSS 코드의 안정자 생성원에 대해, XX 또는 ZZ 안정자 생성원이 아닌 다른 선택도 있을 것입니다(그런 선택도 적어도 하나는 존재함).

다음은 ZZ 안정자 생성원과 XX 안정자 생성원을 모두 포함하는 CSS 코드의 매우 간단한 예입니다.

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

첫 번째 안정자 생성원이 ZZ 안정자 생성원이고 두 번째가 XX 안정자 생성원이므로, 이것이 CSS 코드임은 명확합니다. 물론, CSS 코드도 유효한 안정자 코드여야 합니다. 즉, 안정자 생성원들이 서로 교환 가능(commute)해야 하고, 최소 생성 집합을 이루어야 하며, 적어도 하나의 양자 상태 벡터를 고정해야 합니다. 이 코드에 대해 이러한 요건들은 간단히 확인할 수 있습니다. 이전 강의에서 언급했듯이, 이 코드의 코드 공간은 ϕ+\vert\phi^+\rangle 벨 상태로 생성되는 일차원 공간입니다. 두 안정자 생성원이 이 상태를 고정한다는 사실은, 이비트(e-bit)의 다음 두 가지 표현과 이 안정자 생성원들을 {0,1}\{\vert 0\rangle, \vert 1\rangle\}{+,}\{\vert +\rangle, \vert -\rangle\} 기저에서의 패리티 검사로 해석함으로써 명확해집니다.

ϕ+=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큐비트 스타인 코드는 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}

여기에는 세 개의 ZZ 안정자 생성원과 세 개의 XX 안정자 생성원이 있으며, 이것이 유효한 안정자 코드임은 이미 검증했습니다.

그리고 9큐비트 쇼어 코드도 또 다른 예입니다.

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 안정자 생성원과 단 두 개의 XX 안정자 생성원이 있습니다. 두 유형의 생성원 사이에 균형이나 대칭이 있을 필요는 없습니다(비록 종종 그런 경우가 있지만).

다시 한번 강조하지만, CSS 코드는 유효한 안정자 코드여야 하며, 특히 각 ZZ 안정자 생성원은 각 XX 안정자 생성원과 교환 가능해야 합니다. 따라서 모든 XXZZ 안정자 생성원의 모음이 유효한 CSS 코드를 정의하는 것은 아닙니다.

오류 감지 및 수정

오류 감지 및 수정과 관련하여, CSS 코드는 일반적으로 9-큐비트 Shor 코드와 유사한 특성을 지닙니다. 즉, XX 오류와 ZZ 오류를 완전히 독립적으로 감지하고 수정할 수 있습니다. ZZ 안정자 생성원은 비트 플립을 방지하는 코드를 나타내고, XX 안정자 생성원은 위상 플립을 독립적으로 방지하는 코드를 나타냅니다. 이것이 가능한 이유는 ZZ 안정자 생성원이 ZZ 오류 및 수정으로 적용되는 ZZ 연산과 반드시 교환 가능하기 때문에 두 경우 모두에 완전히 무관하며, XX 안정자 생성원, 오류, 수정의 경우도 마찬가지입니다.

예로서 7-큐비트 Steane 코드를 살펴보겠습니다.

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 코드와 위상 플립 오류를 위한 [7,4,3][7,4,3]-Hamming 코드로 구성되어 있습니다. XX 안정자 생성원과 ZZ 안정자 생성원이 교환 가능하다는 사실은 어떤 면에서는 행운이라 할 수 있는데, 교환 가능하지 않았다면 유효한 안정자 코드가 되지 못했을 것입니다. 하지만 실제로는 이와 유사한 방식으로 사용될 때 유효한 안정자 코드를 생성하는 고전 선형 코드의 사례가 많이 알려져 있습니다.

일반적으로, CSS 코드에서 ZZ 안정자 생성원이 최대 jj개의 비트 플립 오류를 수정할 수 있고, XX 안정자 생성원이 최대 kk개의 위상 플립 오류를 수정할 수 있다고 가정합시다. 예를 들어, [7,4,3][7,4,3]-Hamming 코드가 하나의 비트 플립을 수정할 수 있으므로 Steane 코드의 경우 j=1j = 1, k=1k = 1입니다. 그러면 오류의 이산화에 의해, 이 CSS 코드는 jjkk최솟값만큼의 수의 큐비트에 발생하는 임의의 오류를 수정할 수 있습니다. 이는 신드롬을 측정할 때, 이 수의 큐비트에 발생한 임의의 오류가 확률적으로 XX 오류, ZZ 오류 또는 두 오류의 조합 중 하나로 붕괴되기 때문이며, 그런 다음 XX 오류와 ZZ 오류가 독립적으로 감지되고 수정됩니다.

요약하면, 두 고전 선형 코드(또는 하나의 고전 선형 코드의 두 복사본)가 호환 가능하여, 즉 교환 가능한 XX 안정자 생성원과 ZZ 안정자 생성원을 정의한다면, 두 코드를 결합하여 얻은 CSS 코드는 앞서 설명한 의미에서 두 코드의 오류 수정 특성을 그대로 물려받습니다.

단, 이에 따른 비용이 있다는 점에 주목해야 합니다. 두 고전 코드로 인코딩할 수 있는 비트 수만큼 큐비트를 인코딩할 수는 없습니다. 이는 CSS 코드의 안정자 생성원 총 수가 두 고전 선형 코드의 패리티 검사 수의 이고, 각 안정자 생성원은 코드 공간의 차원을 절반으로 줄이기 때문입니다. 예를 들어, [7,4,3][7,4,3]-Hamming 코드는 이 코드에 대한 패리티 검사 문자열이 세 개뿐이므로 네 개의 고전 비트를 인코딩할 수 있지만, 7-큐비트 Steane 코드는 안정자 생성원이 여섯 개이므로 하나의 큐비트만 인코딩합니다.

CSS 코드의 코드 공간

CSS 코드에 대한 이 논의에서 마지막으로 살펴볼 것은 이 코드들의 코드 공간입니다. 이를 통해 두 고전 선형 코드가 호환 가능하여, 즉 CSS 코드를 형성하기 위해 결합될 수 있기 위해 두 코드 사이에 어떤 관계가 성립해야 하는지를 더 자세히 살펴볼 수 있습니다.

nn 큐비트에 대한 임의의 CSS 코드를 고려하고, z1,,zsΣnz_1, \ldots, z_s \in \Sigma^n을 이 코드의 ZZ 안정자 생성원에 대응하는 nn-비트 패리티 검사 문자열이라 합시다. 이는 오직 ZZ 안정자 생성원만으로 설명되는 고전 선형 코드, 즉 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\}

말로 표현하면, 고전 선형 코드 CZ\mathcal{C}_Z는 패리티 검사 문자열 z1,,zsz_1, \ldots, z_s 각각과의 이진 내적이 모두 0인 모든 문자열을 포함합니다.

이와 유사하게, x1,,xtΣnx_1,\ldots,x_t\in\Sigma^n을 코드의 XX 안정자 생성원에 대응하는 nn-비트 패리티 검사 문자열이라 합시다. 따라서 XX 안정자 생성원에 대응하는 고전 선형 코드는 다음 형태를 취합니다.

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 안정자 생성원만으로는 이 코드와 유사한 코드를 나타내지만, 표준 기저 대신 {+,}\{\vert {+}\rangle,\vert {-}\rangle\} 기저에서의 코드를 나타냅니다.

이제 동일한 문자열 선택 z1,,zsz_1,\ldots,z_sx1,,xtx_1,\ldots,x_t로부터 파생되지만, 이 문자열들을 패리티 검사 문자열이 아닌 생성원으로 취하는 두 개의 새로운 고전 선형 코드를 도입합니다. 특히 다음 두 코드를 얻습니다.

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}_ZCZ\mathcal{C}_Z의 쌍대 코드이고, DX\mathcal{D}_XCX\mathcal{C}_X의 쌍대 코드입니다. 이 시점에서 쌍대 코드가 왜 관련이 있는지 명확하지 않을 수 있지만, 다음 단락에서 설명하는 두 가지 이유를 포함하여 여러 이유로 매우 관련이 있음이 밝혀집니다.

첫째, 두 고전 선형 코드 CZ\mathcal{C}_ZCX\mathcal{C}_X가 CSS 코드를 형성하기 위해 쌍으로 결합될 수 있다는 의미에서 호환 가능하기 위해 성립해야 하는 조건을 쌍대 코드를 이용하여 간단히 기술할 수 있습니다. 구체적으로, DZCX\mathcal{D}_Z\subseteq\mathcal{C}_X이거나, 동등하게 DXCZ\mathcal{D}_X\subseteq\mathcal{C}_Z이어야 합니다. 말로 표현하면, 쌍대 코드 DZ\mathcal{D}_ZZZ 안정자 생성원에 대응하는 문자열을 포함하며, 이들이 CX\mathcal{C}_X에 포함된다는 것은 이 문자열들과 XX 안정자 생성원에 대응하는 문자열들의 이진 내적이 모두 0임과 동치입니다. 이는 다시 각 ZZ 안정자 생성원이 각 XX 안정자 생성원과 교환 가능함과 동치입니다. 또는, XX 안정자 생성원과 ZZ 안정자 생성원의 역할을 바꾸고 DXCZ\mathcal{D}_X\subseteq\mathcal{C}_Z의 포함 관계에서 시작하더라도 동일한 결론에 도달할 수 있습니다.

둘째, 쌍대 코드를 이용하면 주어진 CSS 코드의 코드 공간을 쉽게 기술할 수 있습니다. 특히, 코드 공간은 다음 형태의 벡터들로 생성됩니다.

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$)}

말로 표현하면, 이 벡터들은 XX 안정자 생성원에 대응하는 코드의 쌍대 코드 DX\mathcal{D}_X의 문자열에 대한 균일 중첩으로, ZZ 안정자 생성원에 대응하는 코드 CZ\mathcal{C}_Z의 문자열에 의해 이동(다시 말해, 비트 단위 XOR)된 것입니다. 분명히 하자면, 이동에 대한 서로 다른 선택 — 이 표현에서 문자열 uu로 표현됨 — 이 동일한 벡터를 만들 수 있습니다. 따라서 이 상태들이 모두 다르지는 않지만, 집합적으로 전체 코드 공간을 생성합니다.

이러한 벡터들이 코드 공간에 속하고 또한 코드 공간을 생성하는 이유에 대한 직관적인 설명이 있습니다. 임의의 nn-비트 문자열 uu에 대해 nn-큐비트 표준 기저 상태 u\vert u\rangle를 고려하고, 이 상태를 코드 공간에 투영한다고 가정합니다. 즉, Π\Pi를 CSS 코드의 코드 공간으로의 투영이라 할 때, 벡터 Πu\Pi\vert u\rangle를 고려합니다. 두 가지 경우가 있습니다.

  • 경우 1: uCZ.u\in\mathcal{C}_Z. 이는 CSS 코드의 각 ZZ 안정자 생성원이 u\vert u\rangle에 대해 항등적으로 작용함을 의미합니다. 반면에 XX 안정자 생성원은 각각 u\vert u\rangle의 일부 비트를 단순히 뒤집습니다. 특히, DX\mathcal{D}_X의 각 생성원 vv에 대해, vv에 대응하는 XX 안정자 생성원은 u\vert u\rangleuv\vert u\oplus v\rangle로 변환합니다. 투영 Π\Pi를 안정자의 원소에 대한 평균으로 특성화함으로써 (앞선 강의에서 살펴본 바와 같이) 다음 공식을 얻습니다.

    Π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: uCZ.u\notin\mathcal{C}_Z. 이는 ZZ 안정자 생성원에 대응하는 패리티 검사 중 적어도 하나가 실패함을 의미하며, 즉 u\vert u\rangleZZ 안정자 생성원 중 적어도 하나의 1-1 고유벡터여야 합니다. CSS 코드의 코드 공간은 안정자 생성원의 +1+1 고유 공간들의 교집합입니다. 따라서 ZZ 안정자 생성원 중 적어도 하나의 1-1 고유벡터로서 u\vert u\rangle는 코드 공간에 직교합니다.

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

이제 모든 nn-비트 문자열 uu에 걸쳐 범위를 취하고, Πu=0\Pi\vert u\rangle = 0인 것들을 버리고, 나머지를 정규화하면 앞서 기술된 벡터들을 얻으며, 이는 그것들이 코드 공간을 생성함을 보여줍니다.

또한 XX 안정자 생성원과 ZZ 안정자 생성원 사이의 대칭성을 이용하여 코드 공간을 유사하지만 다른 방식으로 기술할 수 있습니다. 특히, 다음 형태의 벡터들로 생성되는 공간입니다.

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$)}

본질적으로, XXZZ가 나타나는 각 경우에 서로 교환되었지만 — 표준 기저도 {+,}\{\vert+\rangle,\vert-\rangle\} 기저로 교환해야 하므로 Hadamard 연산이 포함됩니다.

예로서 7-큐비트 Steane 코드를 고려해 봅시다. XX 안정자 생성원과 ZZ 안정자 생성원 모두에 대한 패리티 검사 문자열이 동일합니다. 1111000,1111000, 1100110,1100110, 1010101.1010101. 따라서 코드 CX\mathcal{C}_XCZ\mathcal{C}_Z는 동일하며, 둘 다 [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\}

따라서 쌍대 코드 DX\mathcal{D}_XDZ\mathcal{D}_Z도 동일합니다. 생성원이 세 개이므로 여덟 개의 문자열을 얻습니다.

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

이 문자열들은 모두 [7,4,3][7,4,3]-Hamming 코드에 포함되어 있으므로 CSS 조건이 충족됩니다: DZCX\mathcal{D}_Z \subseteq \mathcal{C}_X, 또는 동등하게 DXCZ.\mathcal{D}_X \subseteq \mathcal{C}_Z.

DX\mathcal{D}_XCZ\mathcal{C}_Z의 모든 문자열 중 절반을 포함하므로, uCZu\in\mathcal{C}_Z를 선택함으로써 얻을 수 있는 서로 다른 벡터 uDX\vert u\oplus \mathcal{D}_X\rangle는 두 개뿐입니다. 이는 7-큐비트 Steane 코드가 2차원 코드 공간을 가지기 때문에 예상되는 결과입니다. 이 방식으로 얻은 두 상태를 사용하여 논리 상태 0\vert 0\rangle1\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}

늘 그렇듯이, 이 선택이 강제된 것은 아닙니다 — 코드 공간을 자유롭게 사용하여 원하는 방식으로 큐비트를 인코딩할 수 있습니다. 하지만 이 인코딩은 앞선 강의에서 다룬 7-큐비트 Steane 코드의 인코딩 Circuit 예제와 일치합니다.