고전 오류 정정 코드는 1940년대에 처음 연구되었으며, 현재 다양한 코드가 알려져 있습니다. 가장 일반적으로 연구되고 사용되는 코드는 선형 코드라고 알려진 범주에 속합니다.
"선형"이라는 단어가 이 맥락에서 정확히 무엇을 의미하는지는 잠시 후에 살펴보겠지만, 선형 코드가 무엇인지 지금 단계에서 아주 간단하게 표현하자면, 그것은 우연히 고전적인 성질을 지닌 안정자 코드라고 할 수 있습니다.
CSS 코드는 본질적으로 고전 선형 코드의 쌍으로, 이 두 코드를 결합하여 양자 오류 정정 코드를 만듭니다.
따라서 이후 논의를 위해 고전 선형 코드에 대한 몇 가지 기본 사항을 이해해야 합니다.
이번 논의 전체에서 Σ를 이진 알파벳으로 사용합니다.
고전 선형 코드란 양의 정수 n에 대해 길이 n인 이진 문자열의 비어 있지 않은 집합 C⊆Σn을 의미하며, 이는 하나의 기본 성질을 만족해야 합니다.
즉, u와 v가 C에 속하는 이진 문자열이면, 문자열 u⊕v도 C에 속해야 합니다.
여기서 u⊕v는 "양자 알고리즘의 기초" 강좌에서 여러 번 접했던 u와 v의 비트별 배타적 논리합(XOR)을 의미합니다.
본질적으로, 고전 오류 정정 코드를 선형이라고 부를 때, 우리는 길이 n의 이진 문자열을 n차원 벡터로 생각하며, 각 항목은 0 또는 1이고, 코드 자체가 선형 부분공간을 형성하도록 요구합니다.
그러나 실수 또는 복소수에 대한 일반적인 벡터 덧셈 대신, 배타적 논리합과 동일한 모듈로 2 덧셈을 사용합니다.
즉, 두 코드워드u와 v, 다시 말해 u와 v가 C에 속하는 이진 문자열이면, 모듈로 2로 계산한 u+v, 즉 u⊕v도 C의 코드워드여야 합니다.
특히 이 조건은 u=v인 경우에도 성립해야 합니다.
어떤 문자열과 자기 자신의 비트별 XOR은 항상 전부 0인 문자열이 되므로, C는 반드시 전부 0인 문자열 0n을 포함해야 합니다.
3비트 반복 코드는 고전 선형 코드의 한 예입니다.
특히 C={000,111}이므로, 선형성 조건과 관련하여 u에 대한 가능한 선택은 두 가지이고, v에 대한 가능한 선택도 두 가지입니다.
네 가지 가능한 쌍을 모두 확인해 보면, 비트별 XOR을 취했을 때 항상 코드워드가 됨을 알 수 있습니다.
다음은 [7,4,3]-해밍 코드라고 불리는 고전 선형 코드의 또 다른 예입니다.
이것은 최초로 발견된 고전 오류 정정 코드 중 하나로, 길이 7인 다음 16개의 이진 문자열로 구성됩니다.
(경우에 따라 [7,4,3]-해밍 코드는 이 문자열들이 반전된 코드를 의미하기도 하지만, 여기서는 아래에 표시된 문자열을 포함하는 코드로 정의합니다.)
이 문자열들의 선택 뒤에는 매우 단순한 논리가 있지만, 이는 본 강의의 부차적인 내용이므로 여기서 설명하지 않습니다.
지금은 이것이 고전 선형 코드임을 관찰하는 것으로 충분합니다. 이 문자열들 중 어떤 두 문자열을 XOR해도 항상 코드에 속하는 다른 문자열이 됩니다.
표기법 [7,4,3](단일 대괄호)은 이전 강의에서 언급된 안정자 코드의 이중 대괄호 표기법과 유사한 의미를 갖지만, 여기서는 고전 선형 코드를 나타냅니다.
특히, 코드워드는 7비트를 가지며, 코드워드가 16=24개이므로 코드를 사용하여 4비트를 인코딩할 수 있습니다. 또한 이것은 거리 3 코드로, 서로 다른 두 코드워드는 적어도 3개의 위치에서 달라야 함을 의미합니다. 즉, 하나의 코드워드를 다른 코드워드로 바꾸려면 적어도 3개의 비트가 뒤집혀야 합니다.
이것이 거리 3 코드라는 사실은 최대 한 개의 비트 반전 오류를 정정할 수 있음을 의미합니다.
방금 언급한 예시들은 고전 선형 코드의 매우 단순한 예이지만, [7,4,3]-해밍 코드조차 코드워드를 단순히 나열하면 다소 이해하기 어렵게 보입니다.
고전 선형 코드를 설명하는 더 좋고 효율적인 방법이 있으며, 다음 두 가지 방법이 그 예입니다.
생성원(Generators). 고전 선형 코드를 설명하는 한 가지 방법은 코드를 생성하는 코드워드의 최소 목록을 사용 하는 것입니다. 즉, 이 코드워드들의 가능한 모든 부분집합을 취해 XOR하면 전체 코드를 얻을 수 있어야 합니다.
더 자세히 설명하면, 문자열 u1,…,um∈Σn이 고전 선형 코드 C를 생성한다는 것은 다음을 의미합니다.
C={α1u1⊕⋯⊕αmum:α1,…,αm∈{0,1}},
여기서 α=1일 때 αu=u이고 α=0일 때 αu=0n입니다.
또한 이 목록이 최소라는 것은 그 중 하나의 문자열을 제거하면 더 작은 코드가 생성됨을 의미합니다.
이러한 설명을 생각하는 자연스러운 방법은 {u1,…,um}의 모음이 C의 부분공간에 대한 기저를 형성한다고 보는 것입니다. 이때 문자열을 이진값 항목을 가진 벡터로 생각하며, 산술이 모듈로 2로 수행되는 벡터 공간에서 작업하고 있음을 명심해야 합니다.
패리티 검사(Parity checks).
고전 선형 코드를 설명하는 또 다른 자연스러운 방법은 패리티 검사를 이용하는 것입니다. 즉, 코드에 속하는 문자열이 정확히 이 패리티 검사 문자열들 각각과의 이진 내적이 0이 되는 문자열인 이진 문자열들의 최소 목록입니다. (비트별 XOR과 마찬가지로, 이진 내적은 "양자 알고리즘의 기초"에서 여러 번 등장했습니다.)
즉, 문자열 v1,…,vr∈Σn이 고전 선형 코드 C의 패리티 검사 문자열이라는 것은 다음을 의미합니다.
C={u∈Σn:u⋅v1=⋯=u⋅vr=0},
이 문자열 집합이 최소라는 것은 하나를 제거하면 더 큰 코드가 된다는 것을 의미합니다.
이것을 패리티 검사 문자열이라고 부르는 이유는, u가 v와의 이진 내적이 0인 경우는 v에서 1이 있는 위치에 해당하는 u의 비트들이 짝수 패리티를 가질 때이기 때문입니다.
따라서 문자열 u가 코드 C에 속하는지 확인하려면 u의 특정 비트 부분집합의 패리티를 검사하는 것으로 충분합니다.
여기서 중요한 점은, 이진 내적이 형식적인 의미에서 내적(inner product)이 아니라는 것입니다. 특히, 두 문자열의 이진 내적이 0이라는 것이 우리가 일반적으로 생각하는 직교성을 의미하지는 않습니다. 예를 들어, 문자열 11과 자기 자신의 이진 내적은 0입니다. 따라서 고전 선형 코드의 패리티 검사 문자열이 그 코드 자체에 포함될 수도 있습니다.
이진 알파벳에 대한 고전 선형 코드는 항상 2의 거듭제곱만큼의 문자열을 포함합니다. 그리고 방금 설명한 두 가지 방식으로 설명되는 단일 고전 선형 코드에 대해서는 항상 n=m+r이 성립합니다.
특히, 최소 생성원 m개가 있으면 코드는 m비트를 인코딩하며 코드워드는 2m개입니다.
최소 패리티 검사 문자열 r개가 있으면 코드워드는 2n−r개입니다.
따라서 각 생성원은 코드 공간의 크기를 두 배로 늘리고, 각 패리티 검사 문자열은 코드 공간의 크기를 절반으로 줄입니다.
예를 들어, 3비트 반복 코드는 선형 코드이므로 이 두 가지 방법으로 모두 설명할 수 있습니다.
특히, 생성원으로 사용할 수 있는 선택은 단 하나뿐입니다: 111.
또는 두 개의 패리티 검사 문자열로 코드를 설명할 수도 있는데, 예를 들어 이전 논의에서 친숙하게 보아온 110과 011을 사용하거나, 110과 101, 또는 101과 011을 사용할 수도 있습니다. (생성원과 패리티 검사 문자열은 일반적으로 주어진 고전 선형 코드에 대해 유일하지 않습니다.)
두 번째 예로, [7,4,3]-해밍 코드를 고려해 봅시다.
다음은 사용 가능한 생성원 목록의 한 가지 선택입니다.
1111000011010010100101100001
그리고 다음은 이 코드에 대한 패리티 검사 목록의 한 가지 선택입니다.
111100011001101010101
여기서 모든 패리티 검사 문자열이 코드 자체에 포함되어 있음을 확인할 수 있습니다.
고전 선형 코드에 대한 마지막 언급으로, 이를 안정자 형식주의와 연결하자면, 패리티 검사 문자열은 Z 및 항등 파울리 행렬만으로 구성된 안정자 생성원과 동등합니다.
예를 들어, 3비트 반복 코드의 패리티 검사 문자열 110과 011은 이전 강의의 파울리 관측값 논의와 일관되게 정확히 안정자 생성원 Z⊗Z⊗I와 I⊗Z⊗Z에 해당합니다.
CSS 코드는 특정 고전 선형 코드의 쌍을 결합하여 얻는 안정자 코드입니다.
임의의 두 고전 선형 코드에 대해 이것이 작동하는 것은 아닙니다. 두 코드는 특정 관계를 만족해야 합니다.
그럼에도 불구하고, 이 구성 방법은 75년 이상의 고전 코딩 이론에 기반하여 양자 오류 정정 코드에 대한 많은 가능성을 열어줍니다.
안정자 형식주의에서, Z와 항등 파울리 행렬만 포함하는 안정자 생성원은 패리티 검사와 동등합니다. 3비트 반복 코드에서 이미 살펴본 바와 같습니다.
또 다른 예로, [7,4,3]-해밍 코드의 다음 패리티 검사 문자열을 고려해 봅시다.
111100011001101010101
이 패리티 검사 문자열들은 다음과 같은 안정자 생성원에 해당합니다(텐서 곱 기호 없이 표기). 각 1을 Z로, 각 0을 I로 교체하여 얻습니다.
이것들은 7큐비트 스타인 코드의 여섯 개 안정자 생성원 중 세 개입니다.
ZZZZZIZIZZIIIZZIZIIIZ
이러한 안정자 생성원에 Z 안정자 생성원이라는 이름을 붙이겠습니다. 즉, 파울리 Z와 항등 텐서 인수만 갖는 안정자 생성원을 의미합니다. 따라서 Z 안정자 생성원에는 X 및 Y 파울리 행렬이 절대 나타나지 않습니다.
X와 항등 파울리 행렬만 텐서 인수로 나타나는 안정자 생성원도 고려할 수 있습니다.
이러한 안정자 생성원은 Z 안정자 생성원과 유사하게 볼 수 있지만, 표준 기저 대신 {∣+⟩,∣−⟩} 기저에서 패리티 검사를 기술합니다.
이 형태의 안정자 생성원을 X 안정자 생성원이라고 합니다. 즉, 이번에는 Y 또는 Z 파울리 행렬이 허용되지 않습니다.
예를 들어, 7큐비트 스타인 코드의 나머지 세 개 안정자 생성원을 고려해 봅시다.
XXXXXIXIXXIIIXXIXIIIX
이것들은 Z 안정자 생성원과 동일한 [7,4,3]-해밍 코드의 패턴을 따르지만, 이번에는 1을 Z 대신 X로 교체합니다.
이 세 개의 안정자 생성원만으로 얻어지는 코드에는 다음과 같이 표시된 16개의 상태가 포함됩니다. 이것들은 [7,4,3]-해밍 코드의 문자열에 해당하는 표준 기저 상태에 아다마르 연산을 적용하여 얻습니다.
(물론, 이 코드의 코드 공간에는 이 상태들의 선형 결합도 포함됩니다.)
즉, CSS 코드는 파울리 Y 행렬이 나타나지 않는 안정자 생성원을 가지며, X와 Z가 동일한 안정자 생성원에 함께 나타나지 않는 안정자 코드입니다.
명확히 하자면, 이 정의에 따르면 CSS 코드는 X 및 Z 안정자 생성원만을 선택하는 것이 가능한 코드입니다. 그러나 안정자 코드의 안정자 생성원을 선택하는 방법에는 자유도가 있음을 명심해야 합니다.
따라서 일반적으로 CSS 코드의 안정자 생성원에 대해, X 또는 Z 안정자 생성원이 아닌 다른 선택도 있을 것입니다(그런 선택도 적어도 하나는 존재함).
다음은 Z 안정자 생성원과 X 안정자 생성원을 모두 포함하는 CSS 코드의 매우 간단한 예입니다.
ZXZX
첫 번째 안정자 생성원이 Z 안정자 생성원이고 두 번째가 X 안정자 생성원이므로, 이것이 CSS 코드임은 명확합니다.
물론, CSS 코드도 유효한 안정자 코드여야 합니다. 즉, 안정자 생성원들이 서로 교환 가능(commute)해야 하고, 최소 생성 집합을 이루어야 하며, 적어도 하나의 양자 상태 벡터를 고정해야 합니다.
이 코드에 대해 이러한 요건들은 간단히 확인할 수 있습니다.
이전 강의에서 언급했듯이, 이 코드의 코드 공간은 ∣ϕ+⟩ 벨 상태로 생성되는 일차원 공간입니다.
두 안정자 생성원이 이 상태를 고정한다는 사실은, 이비트(e-bit) 의 다음 두 가지 표현과 이 안정자 생성원들을 {∣0⟩,∣1⟩} 및 {∣+⟩,∣−⟩} 기저에서의 패리티 검사로 해석함으로써 명확해집니다.
∣ϕ+⟩=2∣0⟩∣0⟩+∣1⟩∣1⟩=2∣+⟩∣+⟩+∣−⟩∣−⟩
7큐비트 스타인 코드는 CSS 코드의 또 다른 예입니다.
ZZZXXXZZIXXIZIZXIXZIIXIIIZZIXXIZIIXIIIZIIX
여기에는 세 개의 Z 안정자 생성원과 세 개의 X 안정자 생성원이 있으며, 이것이 유효한 안정자 코드임은 이미 검증했습니다.
오류 감지 및 수정과 관련하여, CSS 코드는 일반적으로 9-큐비트 Shor 코드와 유사한 특성을 지닙니다. 즉, X 오류와 Z 오류를 완전히 독립적으로 감지하고 수정할 수 있습니다. Z 안정자 생성원은 비트 플립을 방지하는 코드를 나타내고, X 안정자 생성원은 위상 플립을 독립적으로 방지하는 코드를 나타냅니다.
이것이 가능한 이유는 Z 안정자 생성원이 Z 오류 및 수정으로 적용되는 Z 연산과 반드시 교환 가능하기 때문에 두 경우 모두에 완전히 무관하며, X 안정자 생성원, 오류, 수정의 경우도 마찬가지입니다.
예로서 7-큐비트 Steane 코드를 살펴보겠습니다.
ZZZXXXZZIXXIZIZXIXZIIXIIIZZIXXIZIIXIIIZIIX
이 코드의 기본 개념은 이제 명확합니다. 비트 플립 오류를 위한 [7,4,3]-Hamming 코드와 위상 플립 오류를 위한 [7,4,3]-Hamming 코드로 구성되어 있습니다.
X 안정자 생성원과 Z 안정자 생성원이 교환 가능하다는 사실은 어떤 면에서는 행운이라 할 수 있는데, 교환 가능하지 않았다면 유효한 안정자 코드가 되지 못했을 것입니다.
하지만 실제로는 이와 유사한 방식으로 사용될 때 유효한 안정자 코드를 생성하는 고전 선형 코드의 사례가 많이 알려져 있습니다.
일반적으로, CSS 코드에서 Z 안정자 생성원이 최대 j개의 비트 플립 오류를 수정할 수 있고, X 안정자 생성원이 최대 k개의 위상 플립 오류를 수정할 수 있다고 가정합시다.
예를 들어, [7,4,3]-Hamming 코드가 하나의 비트 플립을 수정할 수 있으므로 Steane 코드의 경우 j=1, k=1입니다.
그러면 오류의 이산화에 의해, 이 CSS 코드는 j와 k의 최솟값만큼의 수의 큐비트에 발생하는 임의의 오류를 수정할 수 있습니다.
이는 신드롬을 측정할 때, 이 수의 큐비트에 발생한 임의의 오류가 확률적으로 X 오류, Z 오류 또는 두 오류의 조합 중 하나로 붕괴되기 때문이며, 그런 다음 X 오류와 Z 오류가 독립적으로 감지되고 수정됩니다.
요약하면, 두 고전 선형 코드(또는 하나의 고전 선형 코드의 두 복사본)가 호환 가능하여, 즉 교환 가능한 X 안정자 생성원과 Z 안정자 생성원을 정의한다면, 두 코드를 결합하여 얻은 CSS 코드는 앞서 설명한 의미에서 두 코드의 오류 수정 특성을 그대로 물려받습니다.
단, 이에 따른 비용이 있다는 점에 주목해야 합니다. 두 고전 코드로 인코딩할 수 있는 비트 수만큼 큐비트를 인코딩할 수는 없습니다.
이는 CSS 코드의 안정자 생성원 총 수가 두 고전 선형 코드의 패리티 검사 수의 합이고, 각 안정자 생성원은 코드 공간의 차원을 절반으로 줄이기 때문입니다.
예를 들어, [7,4,3]-Hamming 코드는 이 코드에 대한 패리티 검사 문자열이 세 개뿐이므로 네 개의 고전 비트를 인코딩할 수 있지만, 7-큐비트 Steane 코드는 안정자 생성원이 여섯 개이므로 하나의 큐비트만 인코딩합니다.
이 코드들은 앞서 정의된 코드들의 *쌍대 코드(dual codes)*로 알려져 있습니다.
DZ는 CZ의 쌍대 코드이고, DX는 CX의 쌍대 코드입니다.
이 시점에서 쌍대 코드가 왜 관련이 있는지 명확하지 않을 수 있지만, 다음 단락에서 설명하는 두 가지 이유를 포함하여 여러 이유로 매우 관련이 있음이 밝혀집니다.
첫째, 두 고전 선형 코드 CZ와 CX가 CSS 코드를 형성하기 위해 쌍으로 결합될 수 있다는 의미에서 호환 가능하기 위해 성립해야 하는 조건을 쌍대 코드를 이용하여 간단히 기술할 수 있습니다.
구체적으로, DZ⊆CX이거나, 동등하게 DX⊆CZ이어야 합니다.
말로 표현하면, 쌍대 코드 DZ는 Z 안정자 생성원에 대응하는 문자열을 포함하며, 이들이 CX에 포함된다는 것은 이 문자열들과 X 안정자 생성원에 대응하는 문자열들의 이진 내적이 모두 0임과 동치입니다.
이는 다시 각 Z 안정자 생성원이 각 X 안정자 생성원과 교환 가능함과 동치입니다.
또는, X 안정자 생성원과 Z 안정자 생성원의 역할을 바꾸고 DX⊆CZ의 포함 관계에서 시작하더라도 동일한 결론에 도달할 수 있습니다.
둘째, 쌍대 코드를 이용하면 주어진 CSS 코드의 코드 공간을 쉽게 기술할 수 있습니다.
특히, 코드 공간은 다음 형태의 벡터들로 생성됩니다.
∣u⊕DX⟩=2t1v∈DX∑∣u⊕v⟩(for all u∈CZ)
말로 표현하면, 이 벡터들은 X 안정자 생성원에 대응하는 코드의 쌍대 코드 DX의 문자열에 대한 균일 중첩으로, Z 안정자 생성원에 대응하는 코드 CZ의 문자열에 의해 이동(다시 말해, 비트 단위 XOR)된 것입니다.
분명히 하자면, 이동에 대한 서로 다른 선택 — 이 표현에서 문자열 u로 표현됨 — 이 동일한 벡터를 만들 수 있습니다.
따라서 이 상태들이 모두 다르지는 않지만, 집합적으로 전체 코드 공간을 생성합니다.
이러한 벡터들이 코드 공간에 속하고 또한 코드 공간을 생성하는 이유에 대한 직관적인 설명이 있습니다.
임의의 n-비트 문자열 u에 대해 n-큐비트 표준 기저 상태 ∣u⟩를 고려하고, 이 상태를 코드 공간에 투영한다고 가정합니다.
즉, Π를 CSS 코드의 코드 공간으로의 투영이라 할 때, 벡터 Π∣u⟩를 고려합니다.
두 가지 경우가 있습니다.
경우 1: u∈CZ.
이는 CSS 코드의 각 Z 안정자 생성원이 ∣u⟩에 대해 항등적으로 작용함을 의미합니다.
반면에 X 안정자 생성원은 각각 ∣u⟩의 일부 비트를 단순히 뒤집습니다.
특히, DX의 각 생성원 v에 대해, v에 대응하는 X 안정자 생성원은 ∣u⟩를 ∣u⊕v⟩로 변환합니다.
투영 Π를 안정자의 원소에 대한 평균으로 특성화함으로써 (앞선 강의에서 살펴본 바와 같이) 다음 공식을 얻습니다.
Π∣u⟩=2t1v∈DX∑∣u⊕v⟩=2t1∣u⊕DX⟩.
경우 2: u∈/CZ. 이는 Z 안정자 생성원에 대응하는 패리티 검사 중 적어도 하나가 실패함을 의미하며, 즉 ∣u⟩는 Z 안정자 생성원 중 적어도 하나의 −1 고유벡터여야 합니다. CSS 코드의 코드 공간은 안정자 생성원의 +1 고유 공간들의 교집합입니다. 따라서 Z 안정자 생성 원 중 적어도 하나의 −1 고유벡터로서 ∣u⟩는 코드 공간에 직교합니다.
Π∣u⟩=0.
이제 모든 n-비트 문자열 u에 걸쳐 범위를 취하고, Π∣u⟩=0인 것들을 버리고, 나머지를 정규화하면 앞서 기술된 벡터들을 얻으며, 이는 그것들이 코드 공간을 생성함을 보여줍니다.
또한 X 안정자 생성원과 Z 안정자 생성원 사이의 대칭성을 이용하여 코드 공간을 유사하지만 다른 방식으로 기술할 수 있습니다.
특히, 다음 형태의 벡터들로 생성되는 공간입니다.
H⊗n∣u⊕DZ⟩=2s1v∈DZ∑H⊗n∣u⊕v⟩(for u∈CX)
본질적으로, X와 Z가 나타나는 각 경우에 서로 교환되었지만 — 표준 기저도 {∣+⟩,∣−⟩} 기저로 교환해야 하므로 Hadamard 연산이 포함됩니다.
예로서 7-큐비트 Steane 코드를 고려해 봅시다.
X 안정자 생성원과 Z 안정자 생성원 모두에 대한 패리티 검사 문자열이 동일합니다.
1111000,1100110,1010101.
따라서 코드 CX와 CZ는 동일하며, 둘 다 [7,4,3]-Hamming 코드와 같습니다.
이 문자열들은 모두 [7,4,3]-Hamming 코드에 포함되어 있으므로 CSS 조건이 충족됩니다: DZ⊆CX, 또는 동등하게 DX⊆CZ.
DX가 CZ의 모든 문자열 중 절반을 포함하므로, u∈CZ를 선택함으로써 얻을 수 있는 서로 다른 벡터 ∣u⊕DX⟩는 두 개뿐입니다.
이는 7-큐비트 Steane 코드가 2차원 코드 공간을 가지기 때문에 예상되는 결과입니다.
이 방식으로 얻은 두 상태를 사용하여 논리 상태 ∣0⟩와 ∣1⟩을 다음과 같이 인코 딩할 수 있습니다.