제8장. 안정자 코드와 표면 코드

7장에서 우리는 3큐빗 코드나 9큐빗 쇼어 코드처럼, 논리적 \(|0\rangle_L\)\(|1\rangle_L\)을 ‘손으로 직접’ 설계하는 방식을 보았습니다. 하지만 이는 매우 영리하지만 ad-hoc(임시방편적)인 방법입니다. 수백만 큐빗을 다루기 위해서는 코드를 체계적으로 설계하고, 분석하고, 분류할 수 있는 일반적인 수학적 프레임워크가 필요합니다.

그것이 바로 안정자 형식론(Stabilizer Formalism)입니다. 이 강력한 이론은 ’코드 공간’을 “특정 연산자들에 의해 고정되는(stabilized) 공간”으로 정의하며, 오류 탐지 원리를 교환/반교환 관계로 명쾌하게 설명합니다.

이 장에서는 이 안정자 형식론을 배우고, 현재 가장 유력한 양자컴퓨터 아키텍처 후보인 표면 코드(Surface Code)가 이 형식론 위에서 어떻게 작동하는지 살펴봅니다.


1. 기본 개념 (Fundamental Concepts)

  • 파울리 그룹 (\(G_n\)): \(n\)-큐빗 시스템에 작용할 수 있는 모든 \(X, Y, Z\) 오류의 ’알파벳’입니다. \(n\)-큐빗 파울리 연산자들의 집합( \(\pm 1, \pm i\) 위상 포함)을 말합니다.

  • 안정자 그룹 (\(S\)) (Stabilizer Group): 코드 공간을 정의하는 ‘측정 도구’ 집합입니다. \(S\)는 파울리 그룹 \(G_n\)의 부분 그룹이며, 다음 두 조건을 만족합니다.

    1. 교환성 (Abelian): \(S\)에 속한 모든 연산자 \(M_i, M_j\)는 서로 교환합니다. (\([M_i, M_j] = 0\))
    2. 비-자명성: \(-I\) (전체 위상 -1)를 포함하지 않습니다.
  • 코드 공간 (\(V_S\)) (Code Space): 안정자 그룹 \(S\)의 모든 연산자 \(M\)에 대해 고유값 +1을 갖는 상태 벡터들의 부분공간입니다. 즉, \(S\)에 의해 ‘안정화된(고정된)’ 공간입니다. \[V_S = \{ |\psi\rangle \mid M |\psi\rangle = (+1) |\psi\rangle \quad \forall M \in S \}\]\(V_S\)가 바로 우리의 ’논리적 0’과 ’논리적 1’이 거주하는, 오류로부터 보호되는 공간입니다.

  • 안정자 생성자 (Stabilizer Generators): 거대한 그룹 \(S\) 전체를 다룰 필요 없이, \(S\)를 생성하는 최소한의 독립적인 연산자 집합 \(\langle M_1, M_2, \dots, M_g \rangle\)만 있으면 됩니다.

    • 7장에서 배운 \(M_1 = Z_1 Z_2, M_2 = Z_2 Z_3\)가 바로 3큐빗 코드의 ’생성자’였습니다.
  • 오류 탐지 (Error Detection): 안정자 형식론의 핵심입니다.

    • 어떤 오류 \(E\)가 발생하여 상태가 \(|\psi'\rangle = E |\psi\rangle_L\)가 되었습니다.
    • 안정자 \(M_i\)를 측정합니다.
    • 만약 \(E\)\(M_i\)교환(commute)하면 (\(EM_i = M_i E\)): \(M_i |\psi'\rangle = M_i E |\psi\rangle_L = E M_i |\psi\rangle_L = E (+1) |\psi\rangle_L = +|\psi'\rangle\). (고유값 +1, 오류 탐지 못함)
    • 만약 \(E\)\(M_i\)반교환(anti-commute)하면 (\(EM_i = -M_i E\)): \(M_i |\psi'\rangle = M_i E |\psi\rangle_L = -E M_i |\psi\rangle_L = -E (+1) |\psi\rangle_L = -|\psi'\rangle\). (고유값 -1, 오류 탐지 성공!)
    • 결론: 오류 \(E\)는 하나 이상의 안정자 생성자와 반교환해야만 탐지됩니다.
  • 코드 파라미터 \([[n, k, d]]\): 코드는 세 숫자로 분류됩니다.

    • \(n\): 총 물리 큐빗 수.
    • \(k\): 인코딩된 논리 큐빗 수. (\(k = n - g\), \(g\)는 생성자 개수)
    • \(d\): 코드의 거리(Distance). 탐지/수정 불가능한 (즉, 모든 안정자와 교환하는) 가장 작은 논리 연산자의 무게(weight, 즉 작용하는 큐빗 수). \(d=2t+1\)일 때 \(t\)개의 오류를 수정할 수 있습니다.
  • 표면 코드 (Surface Code): 안정자 코드의 가장 실용적인 예시입니다. 2D 격자(grid)에 큐빗을 배치하고, 가장 가까운 이웃(local) 큐빗들만으로 안정자 생성자를 만듭니다.

    • 장점: 1) 실제 칩(2D)에 구현하기 좋음, 2) 오류 탐지에 국소적 연산만 필요함, 3) 오류율이 특정 임계값(threshold) 이하면 코드를 크게 만들수록 논리 오류율을 ‘지수적으로’ 줄일 수 있습니다. 🏆

2. 기호 및 핵심 관계식

  • 파울리 그룹 (Generators): \(G_n = \langle X_1, \dots, X_n, Z_1, \dots, Z_n \rangle\) (위상 제외)
  • 안정자 그룹 (Generators): \(S = \langle M_1, \dots, M_g \rangle\) (단, \(g=n-k\))
  • 코드 공간 (\(V_S\)): \(M_i |\psi\rangle_L = |\psi\rangle_L\)
  • 오류 탐지 조건: \(E \in G_n\). \([E, M_i] \neq 0\) (즉, 반교환)
  • 오류 미탐지 조건 (논리 오류): \(E \in C(S) \setminus S\).
    • \(C(S)\)\(S\)와 교환하는 모든 연산자의 집합(Centralizer)입니다.
    • \(C(S) \setminus S\)는, 모든 안정자와 교환하지만(\([E, M_i]=0\)) 안정자 그룹 자체의 원소는 아닌(\(E \notin S\)) 연산자 \(E\)를 의미합니다. 이것이 바로 논리 연산자(\(\bar{X}, \bar{Z}\))입니다.
  • 거리 \(d\): \(d = \min \{ \text{weight}(E) \mid E \in C(S) \setminus S \}\)

3. 손쉬운 예제 (Examples with Deeper Insight)

예제 1: 3-큐빗 비트 플립 코드 (7장 복습)

  • 파라미터: \(n=3\) 물리 큐빗.
  • 생성자 (Generators): (총 \(g=2\)개)
    • \(M_1 = Z_1 Z_2 \otimes I_3\)
    • \(M_2 = I_1 \otimes Z_2 Z_3\)
  • 논리 큐빗 수 \(k\): \(k = n - g = 3 - 2 = 1\) 큐빗.
  • 코드 공간 \(V_S\): \(Z_1 Z_2 |\psi\rangle = |\psi\rangle\) 이고 \(Z_2 Z_3 |\psi\rangle = |\psi\rangle\) 를 만족해야 합니다.
    • \(|000\rangle\): \((+1)|000\rangle, (+1)|000\rangle\). (OK)
    • \(|111\rangle\): \((+1)|111\rangle, (+1)|111\rangle\). (OK)
    • \(|100\rangle\): \(Z_1 Z_2 |100\rangle = (-1)|100\rangle\). (탈락)
    • 코드 공간 \(V_S = \text{span}\{ |000\rangle, |111\rangle \}\). 7장의 \(|0\rangle_L, |1\rangle_L\)과 정확히 일치합니다.
  • 오류 탐지: \(E = X_1\) (1번 큐빗 비트 플립)
    • \([M_1, E]\)? \(\to [Z_1 Z_2, X_1] = Z_1[Z_2, X_1] + [Z_1, X_1]Z_2 = 0 + (-2Z_1 X_1)Z_2 \neq 0\). (반교환)
    • \([M_2, E]\)? \(\to [Z_2 Z_3, X_1] = 0\). (교환)
    • 신드롬: \(M_1\)은 -1, \(M_2\)는 +1. 7장에서 (1, 0) 신드롬과 같습니다.

예제 2: 5-큐빗 “완벽한” 코드 \([[5, 1, 3]]\)

  • 파라미터: \(n=5\), \(g=4\) \(\implies k=1\).

  • 생성자: \(M_1=XZZXI, M_2=IXZZX, M_3=XIXZZ, M_4=ZIXIXZ\) (순환)

  • 거리 \(d\):

    • 논리 Z: \(\bar{Z} = ZZZZZ\). (모든 \(M_i\)와 교환함, weight=5)
    • 논리 X: \(\bar{X} = XXXXX\). (모든 \(M_i\)와 교환함, weight=5)
  • 💡 상세 설명 (10개의 오류, 10개의 신드롬)

    이 코드는 1-큐빗 오류를 수정할 수 있습니다(\(d=3 \to t=1\)).

    • 단일 큐빗 오류는 \(X_1, Y_1, Z_1, \dots, Z_5\) 로 총 \(3 \times n = 15\)가지입니다.
    • \(g=4\)개의 생성자는 \(2^4 = 16\)개의 신드롬 조합을 만들 수 있습니다. (오류 없음(1) + 오류(15))
    • \(E=X_1\) \(\to\) \(M_1, M_4\)와 반교환 \(\to\) 신드롬 (1,0,0,1)
    • \(E=Z_1\) \(\to\) \(M_2, M_3\)와 반교환 \(\to\) 신드롬 (0,1,1,0)
    • \(E=Y_1\) \(\to\) \(M_1, M_2, M_3, M_4\) 모두와 반교환 \(\to\) 신드롬 (1,1,1,1)

    15개의 모든 단일 큐빗 오류가 15개의 서로 다른 고유한 신드롬을 만들어냅니다. 따라서 신드롬만 보고도 “아, 1번 큐빗에 Y 오류가 났구나”라고 정확히 진단하고 \(Y_1^\dagger\)로 복구할 수 있습니다. 15개의 오류를 15개의 증상으로 완벽히 구분하므로 ‘완벽한(perfect)’ 코드라 불립니다.

예제 3: 표면 코드 (Surface Code) - [[9, 1, 3]] (단순화)

  • 상황: \(3 \times 3\) 격자에 큐빗을 배치합니다. (실제로는 \(n=13\) 큐빗 \([[13, 1, 3]]\)이 더 표준적이나, \(n=9\)로 개념 설명)

  • 큐빗: 노드(node)에 9개 큐빗 배치 (1~9)

  • 안정자 생성자 (\(g=n-k=9-1=8\)개):

    • 면(Plaquette) 안정자 (\(Z\)): 4개의 면. \(M_1=Z_1 Z_2 Z_4 Z_5\), \(M_2=Z_2 Z_3 Z_5 Z_6\), …
    • 정점(Vertex) 안정자 (\(X\)): 4개의 내부 정점. \(M_5=X_1 X_2 X_4 X_5\) … (면과 정점을 다르게 정의할 수도 있음. 여기서는 토릭 코드를 단순화)
  • 💡 상세 설명 (오류 감지: Anyons)

    1. 오류 없음: 모든 면(\(Z\))과 정점(\(X\))의 고유값은 +1입니다. “진공 상태”.
    2. \(X_5\) 오류 발생 (가운데 5번 큐빗에 \(X\) 오류):
      • \(X_5\)\(X\) 안정자(정점)와는 교환합니다. (\([X_5, X_i X_j X_k X_5] = 0\))
      • \(X_5\)\(Z\) 안정자(면)와는 반교환합니다.
      • \(X_5\)는 4개의 면(\(M_1, M_2, M_3, M_4\)) 모두에 속해있습니다.
      • 신드롬: \(M_1, M_2, M_3, M_4\)의 고유값이 모두 -1로 바뀝니다! 4개의 면에 ‘결함’(anyons)이 나타납니다.
    3. \(Z_5\) 오류 발생:
      • \(Z_5\)\(Z\) 안정자와 교환합니다.
      • \(Z_5\)는 자신을 포함하는 \(X\) 안정자와 반교환합니다.
      • 신드롬: 4개의 정점(\(X\) 안정자)에 결함이 나타납니다.
    4. 오류 체인(Error Chain): \(E = Z_4 Z_5\) (4번, 5번 큐빗에 \(Z\) 오류)
      • \(Z_4 Z_5\)\(X_1 X_2 X_4 X_5\) (4, 5번 포함) 및 \(X_4 X_5 X_7 X_8\) (4, 5번 포함)와는 교환합니다. (Z가 X와 2번씩 만나므로)
      • \(Z_4 Z_5\)\(X\) 안정자 중 \(X_1 X_4 X_2 X_5\)\(X_2 X_3 X_5 X_6\)
      • (정정) \(Z_4 Z_5\) 오류는 \(X\) 안정자 중 오류 체인의 끝점에 있는 안정자들만(-1로) 바꿉니다. 중간에 있는 안정자는 \(Z\)를 2개 만나서 교환(+1)됩니다.
      • 신드롬: 우리는 오류 자체(\(Z_4, Z_5\))를 보는 것이 아니라, 오류 체인의 ’끝점’에 나타난 두 개의 ’결함’만 봅니다.
    5. 논리적 오류: \(E = Z_1 Z_4 Z_7\) (1-4-7을 잇는 \(Z\) 오류 체인)
      • 이 체인은 격자의 한쪽 끝에서 반대쪽 끝까지 이어집니다. ’끝점’이 격자 외부에 있으므로, 내부의 모든 \(X\) 안정자와 교환합니다.
      • 신드롬은 (0, 0, …, 0)입니다. 오류가 탐지되지 않습니다.
      • 이것이 바로 \(\bar{Z}\) 논리 연산자입니다. 코드의 거리 \(d\)는 이 가장 짧은 논리 연산자의 길이(이 경우 3)입니다. \(\implies [[9, 1, 3]]\) 코드.

4. 연습문제

  1. \([n, k, d]\) 파라미터: 7장의 3큐빗 위상 플립 코드(\(|+++\rangle, |---\rangle\))의 안정자 생성자는 무엇이며, \([[n, k, d]]\) 파라미터는 무엇입니까?
  2. 안정자 교환: 5큐빗 코드의 \(M_1=XZZXI\)\(M_2=IXZZX\)가 서로 교환하는지(\([M_1, M_2]=0\)) 확인하십시오. (힌트: \(XZ = -ZX, ZZ=I, XX=I\))
  3. 거리(Distance): 9큐빗 쇼어 코드(\([[9, 1, 3]]\))는 \(t\)개의 오류를 수정할 수 있습니다. \(t\)는 얼마입니까?
  4. 표면 코드 신드롬: \(3 \times 3\) 표면 코드(예제 3)에서 \(X_2\) 오류(2번 큐빗 \(X\) 오류)가 발생했습니다. 어떤 종류의 안정자(X 또는 Z)가, 그리고 몇 개가 -1 고유값을 갖게 될지 예측하십시오.

5. 해설

  1. 7장 예제 2에서 위상 플립 코드는 \(X_1 X_2\)\(X_2 X_3\)로 신드롬을 측정했습니다.
    • 생성자: \(M_1 = X_1 X_2\), \(M_2 = X_2 X_3\).
    • \(n=3, g=2 \implies k=n-g=1\).
    • 논리 연산자: \(\bar{Z} = Z_1 Z_2 Z_3\), \(\bar{X} = X_1 X_2 X_3\) (혹은 \(X_1\)). ( \(\bar{X}=X_1 X_2 X_3\), \([ \bar{X}, M_1] = [X_1 X_2 X_3, X_1 X_2] = X_3(X_1 X_2)(X_1 X_2) = X_3 \neq 0\). 수정: \(\bar{X} = X_1 X_2 X_3\)가 아님. \(\bar{X} = X_1\).)
    • 논리 연산자 \(\bar{X} = X_1 X_2 X_3\), \(\bar{Z} = Z_1 Z_2 Z_3\). ( \(X\)끼리, \(Z\)끼리 교환) 수정: \(\bar{Z} = Z_1 Z_2 Z_3\), \(\bar{X} = X_1\). \([\bar{X}, M_1] = [X_1, X_1 X_2] = 0\). \([\bar{X}, M_2] = [X_1, X_2 X_3] \neq 0\).
    • 재수정: \(\bar{X} = X_1 X_2 X_3\), \(\bar{Z} = Z_1 Z_2 Z_3\). (비트 플립 코드: \(\bar{Z}=Z_1 Z_2 Z_3, \bar{X}=X_1 X_2 X_3, d=3\). 위상 플립 코드: \(\bar{Z}=Z_1 Z_2 Z_3, \bar{X}=X_1 X_2 X_3, d=3\).)
    • 파라미터는 \([[3, 1, 3]]\) 입니다. (두 코드 모두)
  2. \([M_1, M_2] = [XZZXI, IXZZX]\). 겹치는 부분은 2, 3, 4번 큐빗입니다.
    • 2번 큐빗: \([Z, X] \neq 0\) (반교환)
    • 3번 큐빗: \([Z, Z] = 0\) (교환)
    • 4번 큐빗: \([X, Z] \neq 0\) (반교환)
    • 총 2번(짝수)의 반교환이 일어나므로, \(M_1 M_2 = (-1)^2 M_2 M_1 = M_2 M_1\). 따라서 \([M_1, M_2]=0\) (교환합니다).
  3. \(d = 2t+1\). \(3 = 2t+1 \implies 2t=2 \implies t=1\). 9큐빗 쇼어 코드는 1개의 임의의 단일 큐빗 오류를 수정할 수 있습니다.
  4. \(X_2\) 오류는 \(X\) 타입 오류입니다.
    • \(X\) 오류는 \(Z\) 안정자와 반교환합니다. \(X\) 안정자와는 교환합니다.
    • 2번 큐빗이 포함된 면(Plaquette) 안정자(\(Z\) 타입)는 \(M_1=Z_1 Z_2 Z_4 Z_5\)\(M_2=Z_2 Z_3 Z_5 Z_6\)입니다.
    • 따라서 \(M_1\)\(M_2\)가 -1 고유값을 갖게 됩니다. (총 2개Z-안정자)