주 콘텐츠로 건너뛰기

스태빌라이저 코드

이제 스태빌라이저 코드를 일반적인 형태로 정의하겠습니다. 또한 상태를 인코딩하는 방법과 이 코드들을 사용하여 오류를 감지하고 수정하는 방법을 포함해 기본적인 성질과 동작 방식도 다룹니다.

스태빌라이저 코드의 정의

nn-Qubit 스태빌라이저 코드는 nn-Qubit 파울리 연산의 목록 P1,,PrP_1,\ldots,P_r로 명세됩니다. 이 연산들은 이 맥락에서 *스태빌라이저 생성원(stabilizer generators)*이라고 불리며, 다음 세 가지 조건을 만족해야 합니다.

  1. 스태빌라이저 생성원들은 모두 서로 *교환(commute)*합니다.

    PjPk=PkPj(for all j,k{1,,r})P_j P_k = P_k P_j \qquad \text{(for all $j,k\in\{1,\ldots,r\}$)}
  2. 스태빌라이저 생성원들은 *최소 생성 집합(minimal generating set)*을 이룹니다.

    PkP1,,Pk1,Pk+1,,Pr(for all k{1,,r})P_k \notin \langle P_1,\ldots,P_{k-1},P_{k+1},\ldots,P_r\rangle \qquad \text{(for all $k\in\{1,\ldots,r\}$)}
  3. 모든 스태빌라이저 생성원에 의해 고정되는 양자 상태 벡터가 적어도 하나 존재합니다.

    InP1,,Pr-\mathbb{I}^{\otimes n} \notin \langle P_1,\ldots, P_r\rangle

    (모든 스태빌라이저 생성원에 의해 고정되는 양자 상태 벡터 ψ\vert\psi\rangle가 존재한다는 것, 즉 P1ψ==Prψ=ψP_1 \vert\psi\rangle = \cdots = P_r \vert\psi\rangle = \vert\psi\rangleInP1,,Pr-\mathbb{I}^{\otimes n} \notin \langle P_1,\ldots, P_r\rangle와 동치라는 사실이 자명하지는 않지만, 실제로 그러하며 그 이유는 이 수업에서 조금 후에 살펴봅니다.)

이러한 목록 P1,,PrP_1,\ldots,P_r이 있다고 가정할 때, 이 스태빌라이저 생성원들에 의해 정의되는 *코드 공간(code space)*은 이 rr개의 스태빌라이저 생성원 모두에 의해 고정되는 모든 nn-Qubit 양자 상태 벡터를 포함하는 부분 공간 C\mathcal{C}입니다.

C={ψ:P1ψ==Prψ=ψ}\mathcal{C} = \bigl\{ \vert\psi\rangle \,:\, P_1 \vert\psi\rangle = \cdots = P_r \vert\psi\rangle = \vert\psi\rangle \bigr\}

이 부분 공간에 속하는 양자 상태 벡터가 바로 양자 상태의 *유효 인코딩(valid encodings)*으로 볼 수 있는 것들입니다. 실제 인코딩 과정은 나중에 다루겠습니다.

마지막으로, 스태빌라이저 생성원 P1,,PrP_1, \ldots, P_r에 의해 정의되는 코드의 *스태빌라이저(stabilizer)*는 이 연산들에 의해 생성되는 집합입니다:

P1,,Pr.\langle P_1,\ldots,P_r\rangle.

스태빌라이저 코드를 이해하는 자연스러운 방법은 스태빌라이저 생성원들을 관측량(observable)으로 보고, 이 관측량들에 대한 측정 결과를 집합적으로 오류 증후군(error syndrome)으로 해석하는 것입니다. 유효 인코딩은 고유값으로서의 측정 결과가 모두 +1+1임이 보장되는 nn-Qubit 양자 상태 벡터입니다. 적어도 하나의 1-1 측정 결과가 포함된 다른 증후군은 오류가 감지되었음을 나타냅니다.

몇 가지 예를 곧 살펴보겠지만, 먼저 스태빌라이저 생성원의 세 조건에 대해 간략히 언급하겠습니다.

첫 번째 조건은 스태빌라이저 생성원을 관측량으로 해석하는 관점에서 자연스러운 것으로, 측정을 수행하는 순서가 중요하지 않음을 의미합니다. 관측량들이 교환하므로 측정들도 교환합니다. 이는 스태빌라이저 코드가 작동하는 방식에 중요한 특정 대수적 제약을 자연스럽게 부과합니다.

두 번째 조건은 스태빌라이저 생성원들이 최소 생성 집합을 이루어야 함을 요구합니다. 즉, 그 중 어느 하나를 제거하면 더 작은 스태빌라이저가 됩니다. 엄밀히 말하면 이 조건은 운용적(operational) 의미에서 스태빌라이저 코드가 동작하는 방식에 반드시 필요한 것은 아닙니다. 다음 수업에서 보겠지만, 이 조건을 실제로 만족하지 않는 코드에 대한 스태빌라이저 생성원 집합을 생각하는 것이 의미 있을 때도 있습니다. 그러나 스태빌라이저 코드를 분석하고 그 성질을 설명하기 위해서는 이 조건을 전제합니다. 요약하면, 이 조건은 오류 증후군을 얻기 위해 측정하는 각 관측량이 가능한 오류에 관한 정보를 추가로 제공하며, 다른 스태빌라이저 생성원 측정에서 추론할 수 있는 중복적인 결과를 낳지 않음을 보장합니다.

세 번째 조건은 모든 스태빌라이저 생성원에 의해 고정되는 영이 아닌 벡터가 적어도 하나 있어야 함을 요구하며, 이는 In-\mathbb{I}^{\otimes n}이 스태빌라이저에 포함되지 않는 것과 동치입니다. 이 조건이 필요한 이유는 서로 교환하는 nn-Qubit 파울리 연산들의 최소 생성 집합을 선택하더라도, 그 연산 모두에 의해 고정되는 영이 아닌 벡터가 하나도 없는 경우가 실제로 가능하기 때문입니다. 유효 인코딩이 없는 "코드"는 관심 대상이 아니므로, 이 가능성을 정의의 일부로서 이 조건을 요구함으로써 배제합니다.

예시

다음은 작은 nn 값에 대한 스태빌라이저 코드의 몇 가지 예시입니다. nn이 훨씬 더 커질 수 있는 예시를 포함한 더 많은 예시는 다음 수업에서 살펴보겠습니다.

3-비트 반복 코드

3-비트 반복 코드는 스태빌라이저 코드의 예시로, 스태빌라이저 생성원은 ZZIZ \otimes Z \otimes \mathbb{I}IZZ\mathbb{I} \otimes Z \otimes Z입니다.

이 두 스태빌라이저 생성원이 요구 조건들을 만족하는지 쉽게 확인할 수 있습니다. 첫째, 두 스태빌라이저 생성원 ZZIZ \otimes Z \otimes \mathbb{I}IZZ\mathbb{I} \otimes Z \otimes Z는 서로 교환합니다.

(ZZI)(IZZ)=ZIZ=(IZZ)(ZZI)(Z \otimes Z \otimes \mathbb{I})(\mathbb{I} \otimes Z \otimes Z) = Z \otimes \mathbb{I} \otimes Z = (\mathbb{I} \otimes Z \otimes Z)(Z \otimes Z \otimes \mathbb{I})

둘째, 최소 생성 집합을 이룹니다(이 경우 다소 자명합니다).

ZZIIZZ={III,IZZ}IZZZZI={III,ZZI}\begin{aligned} Z \otimes Z \otimes \mathbb{I} \notin \langle\mathbb{I} \otimes Z \otimes Z\rangle & = \{\mathbb{I}\otimes\mathbb{I}\otimes\mathbb{I}, \mathbb{I} \otimes Z \otimes Z\}\\[1mm] \mathbb{I} \otimes Z \otimes Z \notin \langle Z \otimes Z \otimes \mathbb{I}\rangle & = \{\mathbb{I}\otimes\mathbb{I}\otimes\mathbb{I}, Z \otimes Z \otimes \mathbb{I}\} \end{aligned}

셋째, 000\vert 000\rangle111\vert 111\rangle, 그리고 이 벡터들의 임의의 선형 결합이 ZZIZ \otimes Z \otimes \mathbb{I}IZZ\mathbb{I} \otimes Z \otimes Z 모두에 의해 고정된다는 것을 이미 알고 있습니다. 또한 정의에서 동치 조건을 사용하여 이를 확인할 수도 있습니다.

IIIZZI,IZZ={III,ZZI,ZIZ,IZZ}-\mathbb{I}\otimes\mathbb{I}\otimes\mathbb{I}\notin \langle Z \otimes Z \otimes \mathbb{I}, \mathbb{I} \otimes Z \otimes Z\rangle = \{ \mathbb{I}\otimes\mathbb{I}\otimes\mathbb{I}, Z\otimes Z\otimes\mathbb{I}, Z\otimes\mathbb{I}\otimes Z, \mathbb{I}\otimes Z\otimes Z \}

이러한 조건들은 더 복잡한 스태빌라이저 코드에서는 확인하기가 훨씬 어려울 수 있습니다.

수정된 3-비트 반복 코드

이전 수업에서 비트-플립 오류 대신 위상-플립(phase-flip) 오류를 보호하도록 3-비트 반복 코드를 수정하는 것이 가능하다는 것을 보았습니다. 스태빌라이저 코드로서 이 새로운 코드는 쉽게 기술할 수 있습니다: 스태빌라이저 생성원은 XXIX \otimes X \otimes \mathbb{I}IXX\mathbb{I} \otimes X \otimes X입니다.

이 경우 스태빌라이저 생성원은 ZZZ\otimes Z 관측량이 아닌 XXX\otimes X 관측량을 나타내므로, 표준 기저가 아닌 플러스/마이너스 기저에서의 홀짝성 검사(parity check)에 해당합니다. 스태빌라이저 생성원에 대한 세 가지 요구 조건은 일반적인 3-비트 반복 코드와 유사한 방식으로 쉽게 확인됩니다.

9-Qubit Shor 코드

다음은 9-Qubit Shor 코드로, 이것도 스태빌라이저 코드이며 스태빌라이저 생성원으로 표현됩니다.

ZZIIIIIIIIZZIIIIIIIIIZZIIIIIIIIZZIIIIIIIIIZZIIIIIIIIZZXXXXXXIIIIIIXXXXXX\begin{gathered} Z \otimes Z \otimes \mathbb{I} \otimes \mathbb{I} \otimes \mathbb{I} \otimes \mathbb{I} \otimes \mathbb{I} \otimes \mathbb{I} \otimes \mathbb{I}\\[1mm] \mathbb{I} \otimes Z \otimes Z \otimes \mathbb{I} \otimes \mathbb{I} \otimes \mathbb{I} \otimes \mathbb{I} \otimes \mathbb{I} \otimes \mathbb{I}\\[1mm] \mathbb{I} \otimes \mathbb{I} \otimes \mathbb{I} \otimes Z \otimes Z \otimes \mathbb{I} \otimes \mathbb{I} \otimes \mathbb{I} \otimes \mathbb{I}\\[1mm] \mathbb{I} \otimes \mathbb{I} \otimes \mathbb{I} \otimes \mathbb{I} \otimes Z \otimes Z \otimes \mathbb{I} \otimes \mathbb{I} \otimes \mathbb{I}\\[1mm] \mathbb{I} \otimes \mathbb{I} \otimes \mathbb{I} \otimes \mathbb{I} \otimes \mathbb{I} \otimes \mathbb{I} \otimes Z \otimes Z \otimes \mathbb{I}\\[1mm] \mathbb{I} \otimes \mathbb{I} \otimes \mathbb{I} \otimes \mathbb{I} \otimes \mathbb{I} \otimes \mathbb{I} \otimes \mathbb{I} \otimes Z \otimes Z\\[1mm] X \otimes X \otimes X \otimes X \otimes X \otimes X \otimes \mathbb{I} \otimes \mathbb{I} \otimes \mathbb{I}\\[1mm] \mathbb{I} \otimes \mathbb{I} \otimes \mathbb{I}\otimes X \otimes X \otimes X \otimes X \otimes X \otimes X \end{gathered}

이 경우 세 Qubit씩 이루어진 세 블록 각각에 대한 3-비트 반복 코드의 복사본 세 개가 기본적으로 포함되어 있으며, 마지막 두 스태빌라이저 생성원은 이 코드에서 위상 플립을 감지하는 Circuit과 유사한 형태를 취합니다.

마지막 두 스태빌라이저 생성원을 다른 방식으로 생각하면, 위상 플립용 3-비트 반복 코드와 동일한 형태를 가지되 XX 대신 XXXX\otimes X\otimes X로 대체된 것으로 볼 수 있습니다. 이는 XXXX\otimes X\otimes X가 3-비트 반복 코드를 사용하여 인코딩된 논리적 Qubit에 대한 XX 연산에 해당한다는 사실과 일치합니다.

다른 예시로 넘어가기 전에, 스태빌라이저 코드를 스태빌라이저 생성원 목록으로 기술할 때 텐서 곱 기호를 종종 생략한다는 점을 언급해야 합니다. 이는 패턴을 더 쉽게 읽고 파악할 수 있도록 해주기 때문입니다. 예를 들어, 9-Qubit Shor 코드의 위와 동일한 스태빌라이저 생성원은 텐서 곱 기호를 명시적으로 쓰지 않으면 다음과 같이 나타납니다.

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}

7-Qubit Steane 코드

다음은 7-Qubit 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}

지금은 이것이 유효한 스태빌라이저 코드임을 간단히 확인해보겠습니다. 처음 세 스태빌라이저 생성원은 ZZ가 자기 자신과 교환하고 항등 연산은 모든 것과 교환하므로 서로 명백히 교환하며, 마지막 세 스태빌라이저 생성원도 마찬가지입니다. ZZ-스태빌라이저 생성원(처음 세 개 중 하나)과 XX-스태빌라이저 생성원(마지막 세 개 중 하나)을 취했을 때 두 생성원이 교환함을 확인하는 것이 남아 있으며, 9가지 가능한 쌍을 통해 이를 확인할 수 있습니다. 이 모든 경우에서 XXZZ 파울리 행렬은 항상 같은 위치에서 짝수 번 겹치므로, XXX\otimes XZZZ\otimes Z가 교환하는 것처럼 두 생성원은 교환합니다. 이것이 최소 생성 집합이고 비자명한 코드 공간을 정의한다는 사실도 여러분이 직접 생각해볼 주제로 남겨두겠습니다.

7-Qubit Steane 코드는 단일 Qubit을 인코딩하고 하나의 Qubit에 대한 임의의 오류 수정이 가능하다는 점에서 9-Qubit Shor 코드와 유사하지만, 9개가 아닌 7개의 Qubit만 필요합니다.

5-Qubit 코드

하나의 Qubit을 인코딩하고 하나의 Qubit에 대한 임의의 오류를 보호하는 데 필요한 최소 Qubit 수는 7개가 아닙니다. 다음은 단 5개의 Qubit만으로 이를 수행하는 스태빌라이저 코드입니다.

XZZXIIXZZXXIXZZZXIXZ\begin{array}{ccccc} X & Z & Z & X & \mathbb{I} \\[1mm] \mathbb{I} & X & Z & Z & X \\[1mm] X & \mathbb{I} & X & Z & Z \\[1mm] Z & X & \mathbb{I} & X & Z \\[1mm] \end{array}

이 코드는 일반적으로 5-Qubit 코드라고 불립니다. 이것은 임의의 단일 Qubit 오류 수정이 가능한 양자 오류 수정 코드에서 가장 적은 Qubit 수입니다.

1차원 스태빌라이저 코드

다음은 실제로 어떤 Qubit도 인코딩하지 않는 스태빌라이저 코드의 또 다른 예시입니다: 코드 공간이 1차원입니다. 하지만 정의에 의해 여전히 유효한 스태빌라이저 코드입니다.

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

구체적으로, 코드 공간은 e-비트 ϕ+\vert\phi^+\rangle에 의해 생성되는 1차원 공간입니다.

다음은 코드 공간이 GHZ 상태 (000+111)/2(\vert 000\rangle + \vert 111\rangle)/\sqrt{2}에 의해 생성되는 1차원 공간인 관련 스태빌라이저 코드의 예시입니다.

ZZIIZZXXX\begin{array}{cc} Z & Z & \mathbb{I} \\[1mm] \mathbb{I} & Z & Z \\[1mm] X & X & X \end{array}

코드 공간의 차원

nn-Qubit 안정화 코드가 nn-Qubit 안정화 생성자 P1,,PrP_1,\ldots,P_r로 기술된다고 가정해 봅시다. 이 코드에 대해 가장 먼저 떠오르는 질문은 "이 코드는 몇 개의 Qubit을 인코딩하는가?"일 것입니다.

이 질문에는 간단한 답이 있습니다. nn-Qubit 안정화 생성자 P1,,PrP_1, \ldots, P_r이 정의의 세 가지 요건(즉, 안정화 생성자들이 서로 교환 가능하고, 최소 생성 집합을 이루며, 코드 공간이 비어 있지 않음)을 만족한다고 가정하면, 이 안정화 코드의 코드 공간은 차원이 2nr2^{n-r}이어야 하므로, 이 코드를 사용하여 nrn-r개의 Qubit을 인코딩할 수 있습니다.

직관적으로 말하자면, 인코딩에 사용할 수 있는 Qubit이 nn개 있고, 각 안정화 생성자는 인코딩할 수 있는 Qubit 수를 하나씩 "빼앗아 간다"고 볼 수 있습니다. 이는 어떤 오류를 얼마나 많이 탐지하거나 수정할 수 있는지에 관한 것이 아니라, 코드 공간의 차원에 대한 설명일 뿐입니다.

예를 들어, 3-비트 반복 코드와 위상 뒤집기 오류를 위한 수정 버전 모두 n=3n=3 Qubit과 r=2r=2개의 안정화 생성자를 가지므로, 각각 1개의 Qubit을 인코딩할 수 있습니다. 또 다른 예로, 5-Qubit 코드를 생각해 보면: 5개의 Qubit과 4개의 안정화 생성자가 있으므로, 코드 공간의 차원은 2이며, 이는 이 코드로 하나의 Qubit을 인코딩할 수 있음을 의미합니다. 마지막 예로, 안정화 생성자가 XXX\otimes XZZZ\otimes Z인 코드는 1차원 코드 공간을 가지며, 상태 ϕ+\vert\phi^+\rangle로 생성되는데, 이는 n=2n=2 Qubit과 r=2r=2개의 안정화 생성자를 가진다는 것과 일치합니다.

이제 이 사실을 어떻게 증명할 수 있는지 살펴보겠습니다. 첫 번째 단계는, 안정화 생성자들이 교환 가능하고 모든 파울리 연산이 자기 자신의 역원이기 때문에, 안정화의 모든 원소는 다음과 같은 곱으로 표현할 수 있다는 것을 관찰하는 것입니다.

P1a1Prar,P_1^{a_1} \cdots P_r^{a_r},

여기서 a1,,ar{0,1}a_1,\ldots,a_r\in\{0,1\}입니다. 동등하게, 안정화의 각 원소는 안정화 생성자들의 일부 부분 집합을 곱하여 얻습니다. 실제로, {P1,,Pr}\{P_1,\ldots,P_r\}이 최소 생성 집합이라는 조건 때문에, 각 안정화 원소는 이 방식으로 유일하게 표현될 수 있습니다.

다음으로, 각 k{1,,r}k\in\{1,\ldots,r\}에 대해 Πk\Pi_kPkP_k+1+1-고유벡터 공간으로의 사영이라고 정의합니다. 이 사영들은 다음과 같이 항등 연산과 해당 파울리 연산을 평균 내어 얻을 수 있습니다.

Πk=In+Pk2\Pi_k = \frac{\mathbb{I}^{\otimes n} + P_k}{2}

코드 공간 C\mathcal{C}rr개의 안정화 생성자 P1,,PrP_1,\ldots,P_r 모두에 의해, 혹은 동등하게 rr개의 사영 Π1,,Πr\Pi_1,\ldots,\Pi_r 모두에 의해 고정되는 모든 벡터들의 부분 공간입니다.

안정화 생성자들이 서로 교환 가능하다는 것을 감안하면, 사영 Π1,,Πr\Pi_1,\ldots,\Pi_r도 교환 가능해야 합니다. 이를 통해 선형대수학의 사실을 활용할 수 있는데, 이 사영들의 은 각각의 사영에 해당하는 부분 공간들의 교집합으로의 사영이라는 것입니다. 즉, 곱 Π1Πr\Pi_1\cdots\Pi_r은 코드 공간 C\mathcal{C}로의 사영입니다.

이제 다음 식을 얻기 위해 이 사영들의 공식을 이용하여 곱 Π1Πr\Pi_1\cdots\Pi_r을 전개할 수 있습니다.

Π1Πr=(In+P12)(In+Pr2)=12ra1,,ar{0,1}P1a1Prar\Pi_1\cdots\Pi_r = \biggl(\frac{\mathbb{I}^{\otimes n} + P_1}{2}\biggr)\cdots\biggl(\frac{\mathbb{I}^{\otimes n} + P_r}{2}\biggr) = \frac{1}{2^r}\sum_{a_1,\ldots,a_r \in \{0,1\}} P_1^{a_1}\cdots P_r^{a_r}

즉, 안정화 코드의 코드 공간으로의 사영은 행렬로서 그 코드의 안정화에 있는 모든 원소들의 평균과 같습니다.

마지막으로, 임의의 부분 공간의 차원은 그 부분 공간으로의 사영의 트레이스와 같다는 사실을 이용하여 코드 공간의 차원을 계산할 수 있습니다. 따라서, 코드 공간 C\mathcal{C}의 차원은 다음 공식으로 주어집니다.

dim(C)=Tr(Π1Πr)=12ra1,,ar{0,1}Tr(P1a1Prar)\operatorname{dim}(\mathcal{C}) = \operatorname{Tr}(\Pi_1\cdots\Pi_r) = \frac{1}{2^r} \sum_{a_1,\ldots,a_r \in \{0,1\}} \operatorname{Tr}(P_1^{a_1}\cdots P_r^{a_r})

몇 가지 기본적인 사실을 이용하여 이 식을 계산할 수 있습니다.

  • P10Pr0=InP_1^0 \cdots P_r^0 = \mathbb{I}^{\otimes n}이므로

    Tr(P10Pr0)=2n.\operatorname{Tr}(P_1^{0}\cdots P_r^{0}) = 2^n.
  • (a1,,ar)(0,,0)(a_1,\ldots,a_r) \neq (0,\ldots,0)인 경우, 곱 P1a1PrarP_1^{a_1}\cdots P_r^{a_r}은 반드시 ±1\pm 1에 파울리 연산을 곱한 것이어야 합니다. 그런데 In\mathbb{I}^{\otimes n}을 얻을 수 없는데, 이는 집합 {P1,,Pr}\{P_1,\ldots,P_r\}의 최소성에 모순되기 때문입니다. 또한 In-\mathbb{I}^{\otimes n}도 얻을 수 없는데, 이는 안정화 생성자에 관한 세 번째 조건이 이를 금지하기 때문입니다. 따라서 항등 원소가 아닌 모든 파울리 연산의 트레이스는 0이므로,

    Tr(P1a1Prar)=0.\operatorname{Tr}(P_1^{a_1}\cdots P_r^{a_r}) = 0.

따라서 코드 공간의 차원은 주장한 대로 2nr2^{n-r}입니다.

dim(C)=12ra1,,ar{0,1}Tr(P1a1Prar)=12rTr(P10Pr0)=2nr.\begin{aligned} \operatorname{dim}(\mathcal{C}) & = \frac{1}{2^r} \sum_{a_1,\ldots,a_r \in \{0,1\}} \operatorname{Tr}(P_1^{a_1}\cdots P_r^{a_r}) \\ & = \frac{1}{2^r} \operatorname{Tr}(P_1^{0}\cdots P_r^{0}) \\ & = 2^{n-r}. \end{aligned}

여담으로, 이제 In-\mathbb{I}^{\otimes n}이 안정화에 포함되지 않는다는 가정이 코드 공간에 적어도 하나의 양자 상태 벡터가 포함되어야 함을 의미한다는 것을 알 수 있습니다. 방금 확인했듯이, 이 가정은 코드 공간의 차원이 2nr2^{n-r}임을 의미하며, 이는 0이 될 수 없습니다. 역방향 함의는 자명합니다. In-\mathbb{I}^{\otimes n}이 안정화에 포함되어 있다면, 이 연산에 의해 고정되는 0이 아닌 벡터가 없으므로 코드 공간에는 어떠한 양자 상태 벡터도 포함될 수 없습니다.

클리퍼드 연산과 인코딩

다음으로, 안정화 코드를 사용하여 Qubit을 인코딩하는 방법을 간략하게 설명할 것입니다. 그러기 위해서는 먼저 클리퍼드 연산을 소개해야 합니다.

클리퍼드 연산

클리퍼드 연산은 임의의 수의 Qubit에 대한 유니터리 연산으로, 제한된 게이트 집합으로 구성된 양자 Circuit을 통해 구현할 수 있습니다.

  • 아다마르 게이트
  • SS 게이트
  • CNOT 게이트

TT 게이트는 포함되지 않으며, 토폴리 게이트와 프레드킨 게이트도 마찬가지입니다. 이러한 게이트들이 목록에 포함되지 않을 뿐만 아니라, 실제로 여기에 나열된 게이트들만으로 그 게이트들을 구현하는 것은 불가능합니다. 이들은 클리퍼드 연산이 아닙니다. 반면, 파울리 연산은 아다마르 게이트와 SS 게이트의 조합으로 구현할 수 있으므로 클리퍼드 연산입니다.

이것은 클리퍼드 연산을 정의하는 간단한 방법이지만, 왜 이렇게 정의되는지 또는 이 특정 게이트 모음이 무엇이 특별한지는 설명하지 않습니다. 클리퍼드 연산이 이렇게 정의되는 진짜 이유는, 전역 위상 인수를 제외하면, 클리퍼드 연산은 켤레를 통해 파울리 연산을 항상 파울리 연산으로 변환하는 유니터리 연산과 정확히 일치하기 때문입니다. 더 정확하게 말하면, nn-Qubit 유니터리 연산 UU가 위상 인수까지 클리퍼드 연산과 동등하다는 것은, 모든 nn-Qubit 파울리 연산 PP에 대해 다음을 만족하는 것과 동치입니다.

UPU=±QU P U^{\dagger} = \pm Q

여기서 QQ는 어떤 nn-Qubit 파울리 연산입니다.

(UU가 유니터리이고 PPQQ가 파울리 연산일 때, α{+1,1}\alpha\notin\{+1,-1\}에 대해 UPU=αQU P U^{\dagger} = \alpha Q를 가질 수 없다는 점에 유의하세요. 이는 해당 방정식의 좌변이 유니터리이면서 에르미트 행렬이며, 우변도 유니터리이면서 에르미트가 되려면 α\alpha의 선택지가 +1+11-1뿐이라는 사실에서 비롯됩니다.)

UU가 아다마르 게이트, SS 게이트, 또는 CNOT 게이트일 때 방금 설명한 켤레 성질을 확인하는 것은 간단합니다. 특히, 아다마르 게이트의 경우 쉽게 확인할 수 있으며,

HXH=Z,HYH=Y,HZH=X,H X H^{\dagger} = Z, \qquad H Y H^{\dagger} = -Y, \qquad H Z H^{\dagger} = X,

SS 게이트의 경우도 마찬가지입니다.

SXS=Y,SYS=X,SZS=Z.S X S^{\dagger} = Y, \qquad S Y S^{\dagger} = -X, \qquad S Z S^{\dagger} = Z.

CNOT 게이트의 경우, 두 Qubit에 대한 15개의 비항등 파울리 연산을 확인해야 합니다. 물론 개별적으로 확인할 수 있지만, 이전 강의에서 (회로 형태로) 나열된 CNOT 게이트와 XXZZ 게이트의 관계, 그리고 파울리 행렬의 곱셈 규칙을 활용하면 동일한 결론에 더 빠르게 도달할 수 있습니다.

아다마르 게이트, SS 게이트, CNOT 게이트에 대해 이 켤레 성질이 성립한다는 것을 알면, 이 게이트들로 구성된 회로, 즉 모든 클리퍼드 연산에 대해서도 성립한다는 것을 즉시 결론지을 수 있습니다.

주어진 유니터리 연산 UU가 파울리 연산에 대한 켤레 성질을 만족하면 아다마르 게이트, SS 게이트, CNOT 게이트만을 사용하여 (전역 위상까지) 구현할 수 있어야 한다는 역방향 관계를 증명하는 것은 더 어렵습니다. 이 강의에서는 설명하지 않겠지만, 이는 사실입니다.

클리퍼드 연산은 양자 계산을 위한 범용이 아닙니다. 범용 양자 게이트 집합과 달리, 클리퍼드 연산만으로는 임의의 유니터리 연산을 원하는 정확도로 근사하는 것이 불가능합니다. 실제로, 주어진 nn 값에 대해, (위상 인수까지) nn-Qubit 클리퍼드 연산의 수는 유한합니다. 표준 기저 상태에 클리퍼드 연산을 수행하고 표준 기저 측정을 해도 고전 알고리즘의 범위 밖의 계산을 수행할 수 없습니다. 이러한 형태의 계산은 고전적으로 효율적으로 시뮬레이션할 수 있기 때문입니다. 이 사실은 고트만-닐 정리로 알려져 있습니다.

안정화 코드의 인코더

안정화 코드는 특정 차원의 코드 공간을 정의하며, 그 코드 공간을 어떻게 활용할지는 자유롭게 선택할 수 있습니다. 특정 방식으로 코드 공간에 Qubit을 인코딩해야 할 강제성은 없습니다. 그러나 원한다면 클리퍼드 연산을 인코더로 사용하는 것이 항상 가능합니다. 더 정확하게 말하면, mm개의 Qubit을 nn개의 Qubit으로 인코딩하는 안정화 코드에 대해, 임의의 mm-Qubit 양자 상태 벡터 ϕ\vert\phi\rangle에 대해 다음을 만족하는 nn-Qubit 클리퍼드 연산 UU가 존재합니다.

ψ=U(0nmϕ)\vert\psi\rangle = U \bigl(\vert 0^{n-m} \rangle \otimes \vert \phi\rangle\bigr)

이 수식에서 ψ\vert\psi\rangleϕ\vert\phi\rangle의 인코딩으로 해석할 수 있는 코드 공간 내의 양자 상태 벡터입니다.

이는 클리퍼드 연산이 임의의 유니터리 연산에 비해 상대적으로 단순하고, 고트만-닐 정리의 증명에서 발견되는 기술과 유사한 기술을 사용하여 구현을 최적화할 수 있는 방법이 있기 때문에 좋은 소식입니다. 따라서, 안정화 코드를 사용하여 상태를 인코딩하는 Circuit은 너무 클 필요가 없습니다. 특히, nn-Qubit 안정화 코드에 대한 인코딩은 O(n2/log(n))O(n^2/\log(n))개의 게이트가 필요한 클리퍼드 연산을 사용하여 항상 수행할 수 있습니다. 이는 nn Qubit에 대한 모든 클리퍼드 연산이 이 크기의 Circuit으로 구현될 수 있기 때문입니다.

예를 들어, 다음은 7-Qubit 스테인 코드의 인코더입니다. 이것은 실제로 클리퍼드 연산이며, 이 경우에는 SS 게이트조차 필요하지 않습니다.

7-Qubit 스테인 코드의 클리퍼드 인코더

오류 감지

nn-Qubit 스태빌라이저 코드가 스태빌라이저 생성원 P1,,PrP_1,\ldots, P_r로 기술되는 경우, 오류 감지는 다음과 같은 방식으로 작동합니다.

오류를 감지하기 위해 모든 스태빌라이저 생성원을 관측량으로 측정합니다. 스태빌라이저 생성원이 rr개이므로 측정 결과도 rr개이며, 각 결과는 +1+1 또는 1-1 중 하나입니다 (또는 +1+100, 1-111에 대응시키는 이진 값으로 나타낼 수도 있습니다). 이 rr개의 결과를 벡터 또는 문자열로 묶어 *신드롬(syndrome)*으로 해석합니다. 신드롬 (+1,,+1)(+1,\ldots,+1)은 오류가 감지되지 않았음을 나타내며, 신드롬 내에 1-1이 하나라도 존재하면 오류가 감지된 것입니다.

특히 EE가 가상의 오류를 나타내는 nn-Qubit 파울리 연산이라고 가정합시다. (오류로서 파울리 연산만 고려하는 이유는, 오류의 이산화가 임의의 스태빌라이저 코드에 대해서도 9-Qubit 쇼어 코드와 동일한 방식으로 작동하기 때문입니다.) EE가 오류로 감지되는지 여부는 다음 세 가지 경우에 따라 결정됩니다.

오류 감지 경우

  1. 연산 EE는 스태빌라이저의 한 원소에 비례합니다.

    E=±Q  for some  QP1,,PrE = \pm Q \; \text{for some}\; Q \in \langle P_1,\ldots,P_r\rangle

    이 경우, EE는 모든 스태빌라이저 생성원과 교환 가능하므로 신드롬 (+1,,+1)(+1,\ldots,+1)이 나타납니다. 즉, EE는 오류로 감지되지 않습니다.

  2. 연산 EE는 스태빌라이저의 원소에 비례하지 않지만, 그럼에도 모든 스태빌라이저 생성원과 교환 가능합니다.

    E±Q  for  QP1,,Pr,  but  EPk=PkE  for every  k{1,,r}E\neq \pm Q\; \text{for} \; Q \in \langle P_1,\ldots,P_r\rangle, \;\text{but}\; E P_k = P_k E \;\text{for every}\; k\in\{1,\ldots,r\}

    이는 코드 공간의 벡터를 어떤 비자명한 방식으로 변화시키는 오류입니다. 하지만 EE가 모든 스태빌라이저 생성원과 교환 가능하기 때문에 신드롬은 (+1,,+1)(+1,\ldots,+1)이 되어, EE는 코드에 의해 감지되지 않습니다.

  3. 연산 EE는 스태빌라이저 생성원 중 적어도 하나와 반교환 관계에 있습니다.

    PkE=EPk  for at least one  k{1,,r}P_k E = -E P_k \; \text{for at least one} \; k\in\{1,\ldots,r\}

    신드롬이 (+1,,+1)(+1,\ldots,+1)과 다르므로, 오류 EE는 코드에 의해 감지됩니다.

첫 번째 경우에서 오류 EE는 문제가 되지 않습니다. 이 연산은 코드 공간의 벡터에 대해 무관한 전역 위상을 주입할 수 있을 뿐, 실질적으로 아무런 변화도 일으키지 않기 때문입니다: 모든 인코딩된 상태 ψ\ket{\psi}에 대해 Eψ=±ψE \ket{\psi} = \pm\ket{\psi}가 성립합니다. 본질적으로 이것은 실제 오류가 아닙니다 — EE가 가질 수 있는 비자명한 작용은 코드 공간 외부에서만 발생합니다 — 따라서 EE가 오류로 감지되지 않는 것은 적절한 일입니다. 아무런 조치도 필요하지 않으니까요.

두 번째 경우는 직관적으로 나쁜 경우입니다. 오류가 스태빌라이저 생성원과 반교환 관계에 있을 때 신드롬에 1-1이 나타나 오류를 알리는데, 이 경우에는 그런 일이 발생하지 않습니다. 따라서 코드 공간의 벡터를 비자명한 방식으로 변화시키는 오류 EE가 코드에 의해 감지되지 않는 상황이 됩니다. 예를 들어, 3-비트 반복 코드의 경우 연산 E=XXXE = X\otimes X\otimes X가 이 범주에 해당합니다.

이러한 오류 EE가 코드 공간의 일부 벡터를 비자명한 방식으로 변화시켜야 한다는 사실은 다음과 같이 논증할 수 있습니다. EEP1,,PrP_1,\ldots,P_r과 교환 가능하지만 스태빌라이저 원소에 비례하지 않는다는 가정에서, EEP1,,PrP_1,\ldots,P_r에 추가하여 스태빌라이저 생성원으로 포함시키면 새로운 유효한 스태빌라이저 코드를 얻을 수 있습니다. 그런데 이 새로운 코드의 코드 공간은 원래 코드 공간의 절반 크기를 가지므로, EE의 원래 코드 공간에 대한 작용이 항등 연산에 비례할 수 없다는 결론을 내릴 수 있습니다.

세 번째 경우, 즉 오류 EE가 스태빌라이저 생성원 중 적어도 하나와 반교환 관계에 있는 경우, 신드롬에 적어도 하나의 1-1이 나타나 문제가 있음을 나타냅니다. 이미 논의했듯이, 신드롬이 EE를 고유하게 식별하지는 않으므로 각 신드롬에 대한 정정 연산을 선택해야 하며, 이것이 오류 EE를 정정할 수도 있고 그렇지 않을 수도 있습니다. 이 단계는 레슨의 마지막 부분에서 곧 다루겠습니다.

스태빌라이저 코드의 거리

용어 측면에서, 스태빌라이저 코드의 거리는 위의 두 번째 범주에 해당하는 파울리 연산 EE최소 가중치를 의미합니다 — 즉, 코드 공간을 비자명한 방식으로 변화시키지만 코드가 이를 감지하지 못하는 연산입니다. 스태빌라이저 코드가 [[n,m,d]][[n,m,d]] 스태빌라이저 코드라고 불릴 때, 이중 대괄호를 사용하는 이 표기는 다음을 의미합니다:

  1. 인코딩은 길이 nn의 Qubit으로 이루어지며,
  2. 코드는 mm Qubit의 인코딩을 허용하고,
  3. 코드의 거리는 dd입니다.

예시로 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}

이 코드의 거리는 3이며, 다음과 같이 논증할 수 있습니다.

먼저 가중치가 최대 2인 임의의 파울리 연산 EE를 고려하고, 이 연산이 여섯 개의 스태빌라이저 생성원 모두와 교환 가능하다고 가정합니다. 그러면 EE는 반드시 항등 연산이어야 하며, 이는 (언제나 그렇듯이) 스태빌라이저의 원소입니다. 이를 통해 코드의 거리가 2보다 엄격하게 크다는 것을 알 수 있습니다. 특히 EE가 다음의 형태를 취한다고 가정합니다:

E=PQIIIIIE = P \otimes Q \otimes \mathbb{I} \otimes \mathbb{I} \otimes \mathbb{I} \otimes \mathbb{I} \otimes \mathbb{I}

여기서 PPQQ는 비항등 파울리 행렬일 수 있습니다. 이것은 하나의 경우에 불과하며, EE의 텐서 인수들 중 비항등 파울리 행렬이 올 수 있는 다른 모든 위치에 대해서도 다음의 논증을 반복해야 하지만, 모든 가능한 위치에 대해 논증은 본질적으로 동일합니다.

연산 EE는 여섯 개의 스태빌라이저 생성원 모두와 교환 가능하므로, 특히 다음 두 생성원과도 교환 가능합니다:

ZIZIZIZXIXIXIX\begin{gathered} Z \otimes \mathbb{I} \otimes Z \otimes \mathbb{I} \otimes Z \otimes \mathbb{I} \otimes Z\\[1mm] X \otimes \mathbb{I} \otimes X \otimes \mathbb{I} \otimes X \otimes \mathbb{I} \otimes X \end{gathered}

오류 EE에서 텐서 인수 QQ는 이 두 스태빌라이저 생성원에서 항등 행렬과 위치가 맞습니다 (그래서 이 두 생성원이 선택된 것입니다). EE의 오른쪽 5개 위치에 항등 행렬이 있으므로, PPXXZZ 모두와 교환 가능해야 합니다. 그렇지 않으면 EE가 두 생성원 중 하나와 반교환 관계가 되기 때문입니다. 그런데 XXZZ 모두와 교환 가능한 파울리 행렬은 항등 행렬뿐이므로, P=IP = \mathbb{I}입니다.

이를 알고 나면, 왼쪽에서 두 번째 위치에 XXZZ를 갖는 두 개의 스태빌라이저 생성원을 선택하여 유사한 결론을 도출할 수 있습니다: Q=IQ = \mathbb{I}입니다. 따라서 EE는 항등 연산입니다.

즉, 가중치가 최대 2인 오류가 항등 연산이 아닌 이상 이 코드에서 감지되지 않을 방법은 없습니다 (항등 연산은 스태빌라이저에 속하므로 실제 오류가 아닙니다). 반면에, 여섯 개의 스태빌라이저 생성원 모두와 교환 가능하지만 스태빌라이저 원소에 비례하지 않는 가중치 3의 파울리 연산들이 존재합니다. 예를 들어 IIIIXXX\mathbb{I}\otimes\mathbb{I}\otimes\mathbb{I}\otimes\mathbb{I}\otimes X\otimes X\otimes XIIIIZZZ\mathbb{I}\otimes\mathbb{I}\otimes\mathbb{I}\otimes\mathbb{I}\otimes Z\otimes Z\otimes Z가 그런 경우입니다. 이로써 이 코드의 거리가 3임이 증명됩니다.

오류 정정

이 레슨의 마지막 주제는 스태빌라이저 코드의 오류 정정입니다. 이전과 마찬가지로 nn-Qubit 스태빌라이저 생성원 P1,,PrP_1, \ldots, P_r로 지정된 스태빌라이저 코드가 있다고 가정합니다.

nn-Qubit 파울리 연산들은, 이 코드를 사용해 인코딩된 상태에 영향을 미칠 수 있는 오류로서, 어떤 신드롬을 일으키는지에 따라 동일한 크기의 집합으로 분할됩니다. 신드롬의 종류는 2r2^r가지이고 파울리 연산은 4n4^n개이므로, 각 신드롬을 일으키는 파울리 연산은 4n/2r4^n/2^r개가 됩니다. 해당 신드롬에 대해서는 이 오류들 중 어느 것이라도 원인일 수 있습니다.

하지만 각 신드롬을 일으키는 4n/2r4^n/2^r개의 파울리 연산 중에는 동등하다고 봐야 하는 것들이 있습니다. 특히 두 파울리 연산의 곱이 스태빌라이저 원소에 비례한다면, 그 두 연산은 오류로서 사실상 동등합니다.

달리 말하면, 오류 EE를 정정하기 위해 정정 연산 CC를 적용할 때, 합성 연산 CECE가 스태빌라이저 원소에 비례하면 정정이 성공합니다. 스태빌라이저에 2r2^r개의 원소가 있으므로, 각 정정 연산 CC2r2^r개의 서로 다른 파울리 오류를 정정합니다. 이렇게 하면 각 가능한 신드롬과 일치하는 파울리 연산의 동치류가 4nr4^{n-r}개 남습니다.

이는 n=rn=r인 경우 (이때는 1차원의 자명한 코드 공간을 갖는 경우)를 제외하고는, 스태빌라이저 코드로 감지된 모든 오류를 정정하는 것은 불가능하다는 뜻입니다. 따라서 각 신드롬에 대해 하나의 정정 연산만을 선택하여, 해당 신드롬을 일으키는 동치류 중 하나만 정정하는 것을 목표로 해야 합니다.

각 신드롬에 대해 어떤 정정 연산을 수행할지 선택하는 자연스러운 전략은, 해당 신드롬을 일으키는 오류 중 가장 낮은 가중치를 가진 파울리 연산을 선택하는 것입니다. 실제로 주어진 신드롬과 일치하는 최저 가중치 오류가 여러 개일 수 있으며, 이 경우에는 그 중 하나를 선택하면 됩니다. 낮은 가중치의 파울리 연산일수록 측정된 신드롬에 대한 더 그럴듯한 설명이 된다는 생각에 기반합니다. 물론 일부 잡음 모델에서는 이것이 사실이 아닐 수 있으며, 선택된 잡음 모델을 기반으로 주어진 신드롬을 일으키는 가장 가능성 높은 오류를 계산하는 대안적인 전략도 있습니다. 하지만 이 레슨에서는 단순하게 최저 가중치 정정만 고려하겠습니다.

거리 dd의 스태빌라이저 코드에서, 측정된 신드롬과 일치하는 최저 가중치 파울리 연산을 정정 연산으로 선택하는 전략은 d/2d/2보다 엄격하게 작은 가중치, 즉 가중치가 최대 (d1)/2(d-1)/2인 오류를 항상 정정할 수 있습니다. 이를 통해 예를 들어 7-Qubit 스타인 코드가 임의의 가중치-1 파울리 오류를 정정할 수 있으며, 오류의 이산화에 의해 스타인 코드가 하나의 Qubit에 대한 임의의 오류를 정정할 수 있음을 알 수 있습니다.

이것이 어떻게 작동하는지 아래 다이어그램을 통해 살펴보겠습니다. 왼쪽 원은 신드롬 (+1,,+1)(+1,\ldots,+1)을 일으키는 모든 파울리 연산을 나타냅니다. 이는 오류가 발생하지 않아 아무 문제없음을 나타내는 신드롬입니다. 이 연산들 중에는 스태빌라이저의 원소 (또는 더 정확히는 스태빌라이저 원소에 비례하는 연산)도 있고, 코드 공간을 어떤 방식으로 변화시키지만 코드에 의해 감지되지 않는 비자명한 오류들도 있습니다. 거리의 정의에 따라 이 범주의 모든 파울리 연산은 가중치가 최소 dd이어야 하는데, 이는 dd가 이 연산들의 최소 가중치로 정의되기 때문입니다.

오른쪽 원은 서로 다른 신드롬 s(+1,,+1)s\neq(+1,\ldots,+1)을 일으키는 파울리 연산들을 나타내며, 가중치가 d/2d/2보다 엄격하게 작은 오류 EE를 포함합니다.

Lowest-weight error correction diagram

신드롬 ss에 대해 선택된 정정 연산 CC는 다이어그램의 오른쪽 원으로 표현된 집합에서 가장 낮은 가중치를 가진 파울리 연산입니다 (동점이면 그 중 하나를 선택합니다). 따라서 C=EC = E일 수도 있지만, 반드시 그럴 필요는 없습니다. 하지만 확실히 말할 수 있는 것은, CCEE의 가중치보다 클 수 없다는 점입니다. CC는 이 집합에서 최소 가중치를 가지기 때문입니다 — 따라서 CC의 가중치는 d/2d/2보다 엄격하게 작습니다.

이제 오류 EE가 발생한 후 얻은 상태에 정정 연산 CC를 적용할 때 어떤 일이 일어나는지 살펴보겠습니다. 원래 인코딩이 ψ\vert\psi\rangle였다고 가정하면, 적용 후 CEψCE\vert\psi\rangle가 남습니다. 목표는 CECE가 스태빌라이저의 원소에 비례함을 보이는 것으로, 이는 정정이 성공하여 (전역 위상을 제외하고) 원래 인코딩된 상태 ψ\vert\psi\rangle가 남는다는 것을 의미합니다.

첫째, EECC가 동일한 신드롬을 일으키므로, 합성 연산 CECE는 모든 스태빌라이저 생성원과 교환 가능해야 합니다. 특히 PkP_k가 스태빌라이저 생성원 중 임의의 하나라면, 다음이 성립해야 합니다:

PkE=αEPkandPkC=αCPkP_k E = \alpha E P_k \quad\text{and}\quad P_k C = \alpha C P_k

동일한 값 α{+1,1}\alpha\in\{+1,-1\}에 대해 이 식이 성립하는데, 이는 CCEE 모두가 생성하는 신드롬 sskk번째 항목이기 때문입니다. 따라서 다음이 성립합니다:

Pk(CE)=αCPkE=α2(CE)Pk=(CE)Pk,P_k (CE) = \alpha C P_k E = \alpha^2 (CE) P_k = (CE) P_k,

PkP_kCECE와 교환 가능합니다. 이로써 CECE는 신드롬 (+1,,+1)(+1,\ldots,+1)을 생성하므로 다이어그램의 왼쪽 원에 속함을 보였습니다.

둘째, 합성 연산 CECE의 가중치는 CCEE의 가중치의 합을 초과할 수 없으며 — 이는 파울리 연산의 곱에 대해 잠시 생각해보면 알 수 있습니다 — 따라서 CECE의 가중치는 dd보다 엄격하게 작습니다. 이는 CECE가 우리 코드의 스태빌라이저 원소에 비례한다는 것을 의미하며, 이것이 우리가 보이고자 했던 것입니다. 각 신드롬을 일으키는 오류 집합의 최저 가중치 대표를 정정 연산으로 선택함으로써, 코드의 거리의 절반보다 작은 가중치를 가진 임의의 파울리 오류를 정정할 수 있음이 보장됩니다.

하지만 한 가지 문제가 있습니다. 일반적인 스태빌라이저 코드에서 주어진 신드롬을 일으키는 최저 가중치 파울리 연산을 계산하는 것은 계산적으로 어려운 문제입니다. (실제로 이는 고전 코드의 경우에도 마찬가지인데, 이 맥락에서 고전 코드는 스태빌라이저 생성원 내의 텐서 인수로 I\mathbb{I}ZZ 행렬만 등장하는 스태빌라이저 코드로 생각할 수 있습니다.) 따라서 인코딩 단계와 달리, 이번에는 Clifford 연산이 도움이 되지 않습니다.

해결책은 좋은 정정 연산을 효율적으로 계산할 수 있는 특정 코드를 선택하는 것인데, 이를 위한 간단한 방법은 없습니다. 간단히 말해, 좋은 정정 연산을 효율적으로 계산할 수 있는 스태빌라이저 코드를 고안하는 것은 양자 코드 설계의 예술적인 부분입니다. 다음 레슨에서 이 예술성이 어떻게 발휘되는지 살펴볼 것입니다.