CNOT 게이트와 얽힘 생성 회로
CNOT(제어-NOT) 게이트는 두 큐비트 사이의 조건부 연산을 수행하는 2-큐비트 게이트로, 양자 얽힘을 생성하는 핵심 소자다. 아다마르 게이트와 조합하면 벨 상태를 비롯한 최대 얽힘 상태를 회로 수준에서 체계적으로 만들 수 있다. 이 챕터에서는 CNOT의 행렬 표현, 동작 원리, 그리고 얽힘 회로 설계까지 단계적으로 다룬다.
개념 소개
고전 컴퓨터의 XOR 게이트를 양자역학적으로 확장한 것이 CNOT(Controlled-NOT) 게이트다. 두 개의 큐비트—**제어 큐비트(control)**와 표적 큐비트(target)—를 입력으로 받아, 제어 큐비트가 일 때만 표적 큐비트에 X(파울리-X, 비트 플립) 연산을 적용한다. 제어 큐비트가 이면 표적 큐비트는 변하지 않는다.
진리표로 정리하면 다음과 같다.
| 입력 (제어, 표적) | 출력 |
|---|---|
| $ | 00\rangle$ |
| $ | 01\rangle$ |
| $ | 10\rangle$ |
| $ | 11\rangle$ |
표적 큐비트만 보면 제어 큐비트와의 XOR 연산 결과와 일치한다. 단, 양자 게이트는 고전 논리와 달리 **가역적(unitary)**이어야 하므로, CNOT 역시 유니터리 행렬로 표현된다.
핵심 원리
행렬 표현
계산 기저 순서로 CNOT의 행렬은 다음과 같다.
이 행렬은 유니터리()이며 에르미트()이기도 해서 자기 자신이 역연산이 된다. 즉, CNOT을 두 번 적용하면 항등 연산이 된다.
중첩 상태에 적용 — 얽힘 생성
CNOT이 강력한 이유는 중첩 상태에 적용할 때 나타난다. 제어 큐비트를 아다마르(H) 게이트로 먼저 중첩 상태로 만든 뒤 CNOT을 작용하면 두 큐비트가 분리 불가능한 얽힘 상태가 된다.
아다마르 게이트: $$ H = \frac{1}{\sqrt{2}}\begin{pmatrix} 1 & 1 \ 1 & -1 \end{pmatrix}, \quad H|0\rangle = \frac{|0\rangle + |1\rangle}{\sqrt{2}} \equiv |+\rangle $$
벨 상태 생성 과정:
초기 상태 에서 시작한다.
제어 큐비트에 H 적용:
CNOT 적용:
결과 상태 은 과 의 중첩으로, 어느 큐비트 하나만의 상태로 분해할 수 없다. 이것이 최대 얽힘(maximally entangled) 상태의 정의다.
네 가지 벨 상태
초기 입력을 달리하면 나머지 세 벨 상태도 같은 H+CNOT 회로로 생성할 수 있다.
| 초기 상태 | 벨 상태 | 표기 |
|---|---|---|
| $ | 00\rangle$ | $\frac{ |
| $ | 01\rangle$ | $\frac{ |
| $ | 10\rangle$ | $\frac{ |
| $ | 11\rangle$ | $\frac{ |
예시·응용
Qiskit으로 벨 상태 회로 구현
from qiskit import QuantumCircuit
from qiskit_aer import AerSimulator
from qiskit.quantum_info import Statevector
# 2-큐비트 회로 생성
qc = QuantumCircuit(2)
# 1단계: 제어 큐비트(q0)에 아다마르 게이트
qc.h(0)
# 2단계: CNOT (제어=q0, 표적=q1)
qc.cx(0, 1)
# 상태벡터 출력
sv = Statevector.from_instruction(qc)
print(sv)
# 출력: [0.707+0j, 0, 0, 0.707+0j]
# → |00⟩과 |11⟩ 성분만 1/√2 크기로 존재
qc.measure_all()
sim = AerSimulator()
result = sim.run(qc, shots=1024).result()
print(result.get_counts())
# 예시 출력: {'00': 512, '11': 512} — 항상 같은 값으로 측정
측정 결과가 항상 00 또는 11로만 나오는 것은 두 큐비트가 완전히 상관되어 있다는 얽힘의 직접적인 증거다.
응용: 양자 텔레포테이션과 양자 오류 정정
벨 상태는 양자 텔레포테이션 프로토콜의 자원 채널로 쓰인다. 송신자와 수신자가 벨 쌍을 공유한 뒤, 고전 통신 2비트만으로 임의의 양자 상태를 전달할 수 있다. 또한 3-큐비트 비트 플립 코드 같은 양자 오류 정정 회로도 CNOT 두 개로 인코딩 단계를 구성한다.
정리
CNOT 게이트는 제어 큐비트가 일 때 표적 큐비트를 비트 플립하는 2-큐비트 유니터리 연산이다. 아다마르 게이트와 결합하면 분리 불가능한 최대 얽힘 상태인 벨 상태를 생성할 수 있으며, 이 H+CNOT 구조는 양자 텔레포테이션, 초고밀도 부호화, 양자 오류 정정 등 다양한 양자 정보 프로토콜의 기본 빌딩 블록으로 기능한다.
연습문제
Q1.초기 상태 |10⟩에 H⊗I를 적용한 뒤 CNOT을 작용했을 때 최종 상태를 계산하고, 이것이 어떤 벨 상태에 해당하는지 밝히시오.
힌트 보기
제어 큐비트가 |1⟩이면 H|1⟩ = (|0⟩ − |1⟩)/√2 임을 이용한다.
해설 보기
H|1⟩ = (|0⟩−|1⟩)/√2 이므로, H⊗I 적용 후 상태는 (|00⟩−|10⟩)/√2. 여기에 CNOT을 적용하면 |10⟩ → |11⟩이 되어 (|00⟩−|11⟩)/√2 = |Φ⁻⟩. 이는 네 벨 상태 중 |Φ⁻⟩에 해당한다.
Q2.CNOT 게이트를 두 번 연속 적용하면 어떤 결과가 나오는가? 행렬 계산으로 설명하시오.
해설 보기
CNOT 행렬은 에르미트 유니터리이므로 CNOT² = CNOT·CNOT = I(항등 행렬). 즉 임의의 2-큐비트 상태에 CNOT을 두 번 적용하면 원래 상태로 되돌아온다. 이는 고전 XOR의 가역성과 같은 구조다.
Q3.벨 상태 |Φ⁺⟩ = (|00⟩+|11⟩)/√2 에서 큐비트 하나만 측정했을 때 나머지 큐비트의 상태는 어떻게 결정되는가?
힌트 보기
측정 결과가 0인 경우와 1인 경우로 나누어 생각한다.
해설 보기
첫 번째 큐비트를 측정하여 0이 나오면 상태는 |00⟩로 붕괴하므로 두 번째 큐비트는 확정적으로 |0⟩이 된다. 측정 결과가 1이면 |11⟩로 붕괴하여 두 번째 큐비트는 |1⟩이 된다. 두 결과 각각 확률 1/2로 발생하며, 측정 전까지 나머지 큐비트의 상태는 정해져 있지 않다. 이것이 얽힘의 비국소적 상관성이다.