주 콘텐츠로 건너뛰기

양자 텔레포테이션

이 Qiskit in Classrooms 모듈을 진행하려면 다음 패키지가 설치된 Python 환경이 필요합니다:

  • qiskit v2.1.0 이상
  • qiskit-ibm-runtime v0.40.1 이상
  • qiskit-aer v0.17.0 이상
  • qiskit.visualization
  • numpy
  • pylatexenc

위 패키지의 설치 및 설정 방법은 Qiskit 설치 가이드를 참고하세요. 실제 양자 컴퓨터에서 작업을 실행하려면 IBM Cloud 계정 설정 가이드의 단계에 따라 IBM Quantum® 계정을 생성해야 합니다.

이 모듈은 테스트 결과 QPU 시간 14초를 사용했습니다. 이는 추정치이며, 실제 사용량은 다를 수 있습니다.

# Added by doQumentation — required packages for this notebook
!pip install -q numpy qiskit qiskit-aer qiskit-ibm-runtime
# Uncomment and modify this line as needed to install dependencies
#!pip install 'qiskit>=2.1.0' 'qiskit-ibm-runtime>=0.40.1' 'qiskit-aer>=0.17.0' 'numpy' 'pylatexenc'

아래에서 Dr. Katie McCormick의 모듈 설명 영상을 시청하거나, 여기를 클릭해 YouTube에서 시청할 수 있습니다.


소개 및 배경

양자 텔레포테이션은 입자를 물리적으로 이동시키지 않고도 양자 정보를 한 위치에서 다른 위치로 전송할 수 있는 양자 물리학의 기법입니다. 공상 과학 소설의 텔레포테이션 개념과 달리, 이 과정은 물질을 운반하지 않습니다. 대신, 거리에 관계없이 두 입자가 연결되는 양자 얽힘의 원리에 의존합니다. 정밀한 측정과 고전 통신을 통해 한 입자의 양자 상태를 멀리 떨어진 다른 입자에서 재현할 수 있으며, 이로써 양자 정보가 사실상 "텔레포테이션"됩니다. 이 모듈에서는 이것이 수학적으로 어떻게 작동하는지 살펴보고, 실제 양자 컴퓨터에서 양자 텔레포테이션을 구현해 보겠습니다. 여기서의 소개는 간략하게 진행되며, 양자 정보에 대한 더 많은 배경 지식과 텔레포테이션에 대한 자세한 설명은 John Watrous의 양자 정보의 기초 강좌, 특히 텔레포테이션 섹션을 권장합니다.

고전 비트는 0 또는 1 상태에 있을 수 있습니다. 양자 비트(Qubit)는 0|0\rangle1|1\rangle로 표기되는 양자 상태 및 이러한 상태의 선형 결합인 "중첩(superposition)"에 있을 수 있으며, 예를 들어 ψ=α00+α11|\psi\rangle = \alpha_0|0\rangle +\alpha_1|1\rangle이고, α0,α1C,\alpha_0,\alpha_1 \in \mathbb{C}, 이며 α02+α12=1|\alpha_0|^2+|\alpha_1|^2 = 1입니다. 상태가 이 중첩으로 존재할 수 있지만, 상태를 측정하면 0|0\rangle 또는 1|1\rangle 상태로 "붕괴"합니다. 파라미터 aabb는 각 측정 결과의 확률과 다음과 같이 관련됩니다.

P0=α02P_0 = |\alpha_0|^2 P1=α12P_1 = |\alpha_1|^2

따라서 α02+α12=1|\alpha_0|^2+|\alpha_1|^2 = 1이라는 제약이 생깁니다.

또 다른 핵심 특성은 양자 비트가 "얽힐" 수 있다는 것인데, 이는 한 Qubit의 측정이 얽혀 있는 다른 Qubit의 측정 결과에 영향을 줄 수 있다는 것을 의미합니다. 얽힘이 단순한 고전적 상관관계와 어떻게 다른지 이해하는 것은 다소 까다롭습니다. 먼저 표기법을 설명하겠습니다. 친구 0(앨리스)과 친구 1(밥)에 속하는 두 Qubit을 각각 0|0\rangle 상태로 부릅니다.

0B0A|0\rangle_B|0\rangle_A

또는

0100|0\rangle_1|0\rangle_0

간단히 줄여서

00|00\rangle

가장 낮은 번호(또는 문자)의 Qubit이 가장 오른쪽에 있다는 점에 주의하세요. 이것은 Qiskit 전체에서 사용되는 "리틀 엔디언(little-endian)" 표기법이라는 규칙입니다. 두 친구의 2-Qubit 상태가 00|00\rangle이고 각자의 Qubit 상태를 측정하면, 두 사람 모두 0을 얻게 됩니다. 마찬가지로 Qubit이 11|11\rangle 상태에 있다면, 각자의 측정은 1을 반환합니다. 이는 고전적인 경우와 다르지 않습니다. 그러나 양자 컴퓨팅에서는 중첩과 결합하여 다음과 같은 상태를 얻을 수 있습니다.

12(00+11)\frac{1}{\sqrt{2}}(|00\rangle+|11\rangle)

이와 같은 상태에서 앨리스와 밥의 Qubit이 0 또는 1 상태에 있는지는 아직 알 수 없으며, 자연조차 아직 결정하지 않았지만, 그들이 동일한 상태를 측정할 것은 알고 있습니다. 예를 들어, 밥이 자신의 Qubit을 0|0\rangle 상태로 측정한다면, 그것이 가능한 유일한 경우는 측정이 2-Qubit 상태를 두 가지 가능한 상태 중 하나인 00|00\rangle으로 붕괴시킨 경우입니다. 그러면 앨리스의 Qubit도 0|0\rangle 상태에 남게 됩니다.

이런 식의 Qubit 얽힘은 Qubit이 서로 물리적으로 가까이 있을 필요가 없습니다. 다시 말해, Qubit을 얽힌 다음 멀리 분리하고 그 얽힘을 이용해 정보를 전달할 수 있습니다. 위와 같은 얽힘 상태는 얽힘의 기본 단위이며, "e-비트(e-bit)"라고도 불리며, 얽힘의 단일 비트를 나타냅니다. 이 e-비트는 양자 통신의 자원으로 생각할 수 있으며, 여기에서 설명하는 것처럼 멀리 떨어진 파트너 간에 공유된 각 e-비트는 한 위치에서 다른 위치로 정보를 이동하는 데 사용할 수 있습니다.

처음 이것을 배우는 많은 사람들이 처음으로 떠올리는 생각은 상대성 이론 위반입니다: 이것을 이용해 빛보다 빠르게 정보를 보낼 수 있을까요? 과학적 규칙에 대해 계속 의문을 제기하고 탐구하시기 바라지만, 안타깝게도 이 모듈을 진행하면서 명확해질 이유로 인해 빛보다 빠르게 정보를 전송하는 것은 불가능합니다. 스포일러: 놀랍게도 이 붕괴가 전파되는 속도 때문이 아닌데, 이 붕괴는 실제로 빛보다 빠르게 일어나는 것처럼 보입니다 [1]. 앨리스와 밥이라는 두 협력자를 시작으로, 처음에는 같은 위치에 있어서 동일한 Qubit을 함께 다룰 수 있습니다. 이 협력자들은 자신의 Qubit을 얽힙니다. 그런 다음 두 개의 서로 다른 지리적 위치로 이동하면서 각자의 Qubit을 가져갑니다. 앨리스는 새 Qubit Q에 대한 양자 정보를 얻게 됩니다. Q에 담긴 정보에 대해서는 어떠한 가정도 하지 않습니다. Q의 상태는 앨리스도 모르는 비밀일 수 있으며, 모든 사람에게 알려지지 않을 수도 있습니다. 그러나 앨리스는 Q에 담긴 정보를 밥에게 전달하는 임무를 받았습니다. 그녀는 양자 텔레포테이션을 사용하여 이를 수행합니다.

이를 위해 몇 가지 양자 연산 또는 "게이트(Gate)"를 알아야 합니다.

양자 연산자 (Gate)

이미 양자 Gate에 익숙하다면 이 섹션을 건너뛰어도 됩니다. 이 Gate들을 더 잘 이해하고 싶다면 IBM Quantum Learning의 양자 정보의 기초, 특히 처음 두 강의를 확인하세요.

이 텔레포테이션 프로토콜에서는 주로 두 가지 유형의 양자 Gate를 사용합니다: Hadamard Gate와 CNOT Gate. 그 외 몇 가지 Gate가 부수적으로 사용됩니다: XX Gate, ZZ Gate, 그리고 SWAP Gate.

이 모듈은 선형 대수 배경이 매우 제한적이어도 완료할 수 있지만, 행렬과 벡터를 사용하여 양자 역학적 Gate를 시각화하는 것이 도움이 될 수 있습니다. 따라서 여기서 양자 Gate/상태의 행렬/벡터 형태도 제시합니다.

이미 제시한 상태는 (일부는 관례에 의해, 일부는 제약에 의해) 다음의 벡터 형태를 갖도록 선택되었습니다:

0=(10)|0\rangle = \begin{pmatrix}1 \\ 0\end{pmatrix} 1=(01)|1\rangle = \begin{pmatrix}0 \\ 1\end{pmatrix}

이렇게 하면, 임의의 상태 ψ=a0+b1|\psi\rangle = a|0\rangle+b|1\rangle은 다음과 같이 쓸 수 있습니다.

ψ=(ab)|\psi\rangle =\begin{pmatrix}a \\ b\end{pmatrix}

다중 Qubit 상태로 표기법을 확장하는 방법에는 몇 가지 선택지가 있지만, 아래의 방법이 상당히 표준적입니다:

00=(1000),01=(0100),10=(0010),11=(0001).|00\rangle = \begin{pmatrix}1 \\ 0 \\ 0 \\ 0\end{pmatrix},|01\rangle = \begin{pmatrix}0 \\ 1 \\ 0 \\ 0\end{pmatrix}, |10\rangle = \begin{pmatrix}0 \\ 0 \\ 1 \\0\end{pmatrix},|11\rangle = \begin{pmatrix}0 \\ 0 \\ 0 \\ 1\end{pmatrix}.

이 벡터 표기법을 염두에 두고, 필요한 양자 Gate와 양자 상태에 대한 효과, 그리고 행렬 형태를 소개합니다.

H Hadamard Gate: 중첩 상태를 생성합니다. 단일 Qubit Gate입니다.

H0=12(0+1),H|0\rangle = \frac{1}{\sqrt{2}}\left(|0\rangle+|1\rangle\right), H1=12(01)H|1\rangle = \frac{1}{\sqrt{2}}\left(|0\rangle-|1\rangle\right) H=12(1111)H=\frac{1}{\sqrt{2}}\begin{pmatrix} 1 & 1 \\ 1 & -1 \end{pmatrix}

Hadamard Gate가 있는 Circuit은 다음과 같이 만듭니다:

from qiskit import QuantumCircuit

qc = QuantumCircuit(1)
qc.h(0)
qc.draw("mpl")

Output of the previous code cell

CNOT Controlled-NOT Gate: 이 Gate는 두 개의 Qubit을 사용합니다: 제어(control) Qubit과 목표(target) Qubit. 제어 Qubit의 상태를 확인하지만 변경하지는 않습니다. 제어 Qubit이 1|1\rangle 상태에 있으면 Gate가 목표 Qubit의 상태를 변경하고, 제어 Qubit이 0|0\rangle 상태에 있으면 아무것도 변경하지 않습니다. 아래 표기법에서 Qubit AA(가장 오른쪽 Qubit)가 제어이고 Qubit BB(가장 왼쪽 Qubit)가 목표라고 가정합니다. 아래에서 사용되는 표기법은 CNOT(qcontrol,qtarget)BACNOT(q_{control},q_{target})|BA\rangle입니다.

CNOT(A,B)00=00,CNOT(A,B)01=11,CNOT(A,B)10=10,CNOT(A,B)11=01CNOT(A,B)|00\rangle = |00\rangle, \\ CNOT(A,B)|01\rangle = |11\rangle, \\ CNOT(A,B)|10\rangle = |10\rangle, \\ CNOT(A,B)|11\rangle = |01\rangle

CNOT은 때때로 제어와 목표의 순서가 암묵적으로 표기될 수 있습니다. 그러나 코드나 Circuit 다이어그램에서는 이러한 모호성이 없습니다.

CNOT=(1000000100100100)CNOT=\begin{pmatrix} 1 & 0 & 0 & 0 \\ 0 & 0 & 0 & 1 \\ 0 & 0 & 1 & 0 \\ 0 & 1 & 0 & 0\end{pmatrix}

CNOT Gate는 두 개의 Qubit이 필요하기 때문에 Circuit에서 약간 다르게 보입니다. 구현 방법은 다음과 같습니다:

qc = QuantumCircuit(2)
qc.cx(0, 1)
qc.draw("mpl")

Output of the previous code cell

이해 확인

아래 질문을 읽고, 답을 생각한 후 삼각형을 클릭하여 정답을 확인하세요.

대부분의 Gate는 Qiskit에서도 다른 곳과 동일한 행렬 형태를 가집니다. 그러나 CNOT Gate는 두 개의 Qubit에 작용하므로, Qubit의 순서 규칙이 문제가 됩니다. q0,q1,...|q_0,q_1,...\rangle 순서로 Qubit을 정렬하는 교재에서는 CNOT Gate의 행렬 형태가 다르게 표시됩니다. 위의 CNOT 행렬이 상태 01|01\rangle에 올바르게 작용하는지 명시적인 행렬 곱셈으로 검증해 보세요.

정답:

CNOT01=(1000000100100100)(0100)=(0001)=11CNOT|01\rangle =\begin{pmatrix} 1 & 0 & 0 & 0 \\ 0 & 0 & 0 & 1 \\ 0 & 0 & 1 & 0 \\ 0 & 1 & 0 & 0\end{pmatrix}\begin{pmatrix}0 \\ 1 \\ 0 \\0\end{pmatrix} = \begin{pmatrix}0 \\ 0 \\ 0 \\1\end{pmatrix} = |11\rangle

XX Gate: NOT 연산과 동등합니다. 단일 Qubit Gate입니다.

X0=1,X1=0X|0\rangle = |1\rangle,\\X|1\rangle=|0\rangle X=(0110)X=\begin{pmatrix} 0 & 1 \\ 1 & 0 \end{pmatrix}

Qiskit에서 XX Gate가 있는 Circuit을 생성하는 방법은 다음과 같습니다:

qc = QuantumCircuit(1)
qc.x(0)
qc.draw("mpl")

Output of the previous code cell

ZZ Gate: 상태에 "위상(phase)"을 추가합니다(계수인데, Z 고유 상태 0|0\rangle1|1\rangle의 경우 각각 1 또는 -1이 됩니다). 단일 Qubit Gate입니다.

Z0=0,Z1=1Z|0\rangle = |0\rangle,\\Z|1\rangle=-|1\rangle Z=(1001)Z=\begin{pmatrix} 1 & 0 \\ 0 & -1 \end{pmatrix}

Qiskit에서 ZZ Gate가 있는 Circuit을 생성하는 방법은 다음과 같습니다:

qc = QuantumCircuit(1)
qc.z(0)
qc.draw("mpl")

Output of the previous code cell

이론

양자 텔레포테이션 프로토콜을 수학적으로 설명해 보겠습니다. 그런 다음 다음 섹션에서 이 설정을 양자 컴퓨터로 구현해 볼 것입니다.

Alice와 Bob이 Qubit를 얽힘 상태로 만들기: 처음에 Alice의 Qubit와 Bob의 Qubit는 각각 0|0\rangle 상태에 있습니다 (이는 합리적인 가정이며, IBM® 양자 컴퓨터의 올바른 초기화 상태이기도 합니다). 이를 0B0A|0\rangle_B|0\rangle_A 또는 간단히 00|00\rangle으로 표기할 수 있습니다. Alice가 자신의 Qubit에 Hadamard Gate를 적용하고, 이어서 Alice의 Qubit를 제어 Qubit로, Bob의 Qubit를 타겟 Qubit로 하는 CNOT Gate를 적용했을 때 어떤 일이 일어나는지 계산해 보겠습니다:

CNOT(A,B)HA0B0A=CNOT(A,B)0B12(0A+1A)=12(CNOT(A,B)0B0A+CNOT(A,B)0B1A)=12(0B0A+1B1A)\begin{aligned} CNOT(A,B)H_A |0\rangle_B|0\rangle_A &= CNOT(A,B)|0\rangle_B\frac{1}{\sqrt{2}}\left(|0\rangle_A+|1\rangle_A\right)\\ &=\frac{1}{\sqrt{2}}\left(CNOT(A,B)|0\rangle_B|0\rangle_A+CNOT(A,B)|0\rangle_B|1\rangle_A\right)\\ &=\frac{1}{\sqrt{2}}\left(|0\rangle_B|0\rangle_A+|1\rangle_B|1\rangle_A\right) \end{aligned}

이제 Alice와 Bob의 Qubit가 얽힘 상태임을 알 수 있습니다. 자연이 두 Qubit가 모두 0|0\rangle 상태인지 1|1\rangle 상태인지 아직 결정하지 않았지만, 두 Qubit가 같은 상태에 있다는 것은 알 수 있습니다. Alice와 Bob이 분리되기: 두 친구는 Qubit를 각자의 새로운 위치로 옮깁니다. 위치는 매우 멀리 떨어질 수도 있습니다. 여기에는 많은 주의사항이 있습니다. 양자 정보를 방해 없이 이동시키는 것은 결코 쉽지 않습니다. 하지만 이동은 가능하며, 이 모듈에서 실제로 이동시켜 볼 것입니다. 다만, 양자 정보를 많이 이동시킬수록 일부 오류가 발생할 수 있다는 점을 염두에 두어야 합니다.

Q의 도입: 비밀 상태가 Qubit Q에 준비됩니다:

ψQ=α00Q+α11Q|\psi\rangle_Q = \alpha_0 |0\rangle_Q + \alpha_1 |1\rangle_Q

이 시점에서 Q는 단순히 Alice의 Qubit (A) 옆에 있습니다. 얽힘은 아직 일어나지 않았으므로, 세 Qubit의 양자 상태를 함께 다음과 같이 쓸 수 있습니다:

ψABψQ=12(0B0A+1B1A)(α00Q+α11Q).|\psi\rangle_{AB}|\psi\rangle_Q = \frac{1}{\sqrt{2}}\left(|0\rangle_B|0\rangle_A+|1\rangle_B|1\rangle_A\right)\left(\alpha_0 |0\rangle_Q + \alpha_1 |1\rangle_Q\right).

목표는 Q에 있는 정보를 Alice의 위치에서 Bob의 위치로 옮기는 것입니다. 이 시점에서는 비밀 유지나 정보 전달 속도에 대한 어떠한 주장이나 요구사항도 없습니다. 단지 정보가 Alice에서 Bob으로 어떻게 이동할 수 있는지 탐구하고 있을 뿐입니다. 정보가 Q에서 시작하므로, Q에 가장 낮은 Qubit 번호가 할당된다고 가정합니다. 리틀-엔디언 표기법에 따라 Q는 아래 수식에서 가장 오른쪽 Qubit가 됩니다.

Alice가 Qubit A와 Q를 얽힘 상태로 만들기: Alice는 이제 자신의 Qubit를 제어 Qubit로, Q를 타겟 Qubit로 하는 CNOT Gate를 적용한 다음, Q에 Hadamard Gate를 적용합니다. 그 연산 이후 세 Qubit의 상태를 계산해 보겠습니다:

HQCNOT(A,Q)ψABψQ=HQCNOT(A,Q)12(0B0A+1B1A)(α00Q+α11Q)=HQCNOT(A,Q)12((α00B0A0Q+α10B0A1Q)+(α01B1A0Q+α11B1A1Q))=HQ12(α00B0A0Q+α10B1A1Q+α01B1A0Q+α11B0A1Q)=12(α00B0A0Q+α00B0A1Q+α10B1A0Qα10B1A1Q)+12(α01B1A0Q+α01B1A1Q+α11B0A0Qα11B0A1Q)\begin{aligned} H_Q CNOT(A,Q)|\psi\rangle_{AB}|\psi\rangle_Q &= H_Q CNOT(A,Q)\frac{1}{\sqrt{2}}\left(|0\rangle_B|0\rangle_A+|1\rangle_B|1\rangle_A\right)\left(\alpha_0 |0\rangle_Q + \alpha_1 |1\rangle_Q\right)\\ &= H_Q CNOT(A,Q)\frac{1}{\sqrt{2}}\left(\left(\alpha_0 |0\rangle_B|0\rangle_A|0\rangle_Q + \alpha_1 |0\rangle_B|0\rangle_A|1\rangle_Q\right)+\left(\alpha_0 |1\rangle_B|1\rangle_A|0\rangle_Q + \alpha_1 |1\rangle_B|1\rangle_A|1\rangle_Q\right)\right)\\ &= H_Q \frac{1}{\sqrt{2}}\left(\alpha_0 |0\rangle_B|0\rangle_A|0\rangle_Q + \alpha_1 |0\rangle_B|1\rangle_A|1\rangle_Q+\alpha_0 |1\rangle_B|1\rangle_A|0\rangle_Q + \alpha_1 |1\rangle_B|0\rangle_A|1\rangle_Q\right)\\ &= \frac{1}{2}\left(\alpha_0 |0\rangle_B|0\rangle_A|0\rangle_Q + \alpha_0 |0\rangle_B|0\rangle_A|1\rangle_Q + \alpha_1 |0\rangle_B|1\rangle_A|0\rangle_Q-\alpha_1 |0\rangle_B|1\rangle_A|1\rangle_Q\right)\\ &+\frac{1}{2}\left(\alpha_0 |1\rangle_B|1\rangle_A|0\rangle_Q + \alpha_0 |1\rangle_B|1\rangle_A|1\rangle_Q + \alpha_1 |1\rangle_B|0\rangle_A|0\rangle_Q - \alpha_1 |1\rangle_B|0\rangle_A|1\rangle_Q\right) \end{aligned}

A와 Q는 같은 위치에 있으므로, 위의 항들을 Qubit A와 Q의 측정 결과에 따라 묶어 보겠습니다:

ψ=12((α00B+α11B)0A0Q+(α00Bα11B)0A1Q+(α10B+α01B)1A0Q+(α10B+α01B)1A1Q)\begin{aligned} |\psi\rangle = \frac{1}{2}\left((\alpha_0 |0\rangle_B+\alpha_1 |1\rangle_B)|0\rangle_A|0\rangle_Q + (\alpha_0 |0\rangle_B-\alpha_1 |1\rangle_B)|0\rangle_A|1\rangle_Q + (\alpha_1 |0\rangle_B+\alpha_0 |1\rangle_B)|1\rangle_A|0\rangle_Q+ (-\alpha_1 |0\rangle_B+\alpha_0 |1\rangle_B)|1\rangle_A|1\rangle_Q \right)\\ \end{aligned}

이해도 확인

아래 질문을 읽고 답을 생각해 본 후, 삼각형을 클릭하여 해답을 확인하세요.

위의 세 Qubit 상태 표현식을 고려할 때, Qubit A와 Q의 측정 결과가 0A0Q|0\rangle_A|0\rangle_Q가 될 확률은 얼마인가요?

답:

25%입니다. 이를 확인하려면, Bob의 상태가 정규화되어야 한다는 점을 기억하세요. A0Q0120A0Q(α00B+α11B)2=14(α00B+α11B)2=14 |_A \langle0|_Q\langle0| \frac{1}{2} |0\rangle_A|0\rangle_Q (\alpha_0 |0\rangle_B+\alpha_1 |1\rangle_B)|^2 = \frac{1}{4}|(\alpha_0 |0\rangle_B+\alpha_1 |1\rangle_B)|^2 = \frac{1}{4}

이제 Alice는 Qubit A와 Q를 측정할 수 있습니다. 양자 측정은 확률적이므로 Alice는 측정 결과를 제어할 수 없습니다. 따라서 측정 시 가능한 결과는 4가지이며, 모두 동일한 확률을 가집니다: 0A0Q,|0\rangle_A|0\rangle_Q, 0A1Q,|0\rangle_A|1\rangle_Q, 1A0Q,|1\rangle_A|0\rangle_Q, 그리고 1A1Q.|1\rangle_A|1\rangle_Q. 각 결과가 Bob의 Qubit에 다른 영향을 준다는 점에 주목하세요. 예를 들어, Alice가 자신의 Qubit가 0A0Q|0\rangle_A|0\rangle_Q 상태임을 측정한다면, 전체 3-Qubit 양자 상태는 (α00B+α11B)0A0Q(\alpha_0|0\rangle_B+\alpha_1|1\rangle_B)|0\rangle_A|0\rangle_Q로 붕괴됩니다. Alice의 다른 측정 결과들은 Bob에게 다른 상태를 남깁니다. 이 내용이 아래 표에 정리되어 있습니다.

Alice의 측정 결과Bob의 상태Bob에게 전달할 지시결과
0A0Q \vert 0\rangle_A \vert 0\rangle_Qα00B+α11B\alpha_0\vert 0\rangle_B+\alpha_1\vert 1\rangle_B없음α00B+α11B\alpha_0\vert 0\rangle_B+\alpha_1\vert 1\rangle_B
0A1Q \vert 0\rangle_A \vert 1\rangle_Qα00Bα11B\alpha_0\vert 0\rangle_B-\alpha_1\vert 1\rangle_BZZα00B+α11B\alpha_0\vert 0\rangle_B+\alpha_1\vert 1\rangle_B
1A0Q \vert 1\rangle_A \vert 0\rangle_Qα10B+α01B\alpha_1\vert 0\rangle_B+\alpha_0\vert 1\rangle_BXXα00B+α11B\alpha_0\vert 0\rangle_B+\alpha_1\vert 1\rangle_B
1A1Q \vert 1\rangle_A \vert 1\rangle_Qα10B+α01B-\alpha_1\vert 0\rangle_B+\alpha_0\vert 1\rangle_BXX 다음 ZZα00B+α11B\alpha_0\vert 0\rangle_B+\alpha_1\vert 1\rangle_B
Alice의 Qubit에 대한 가능한 모든 측정 결과에 대해, Bob의 Qubit는 Q에 원래 있던 비밀 상태와 어렴풋이 닮은 상태로 남습니다. Alice가 $0\rangle_C0\rangle_A를측정하는경우(표의첫번째행),BobQubit는정확히비밀상태로남습니다!다른경우에는상태에문제가있습니다.계수(를 측정하는 경우(표의 첫 번째 행), Bob의 Qubit는 정확히 비밀 상태로 남습니다! 다른 경우에는 상태에 문제가 있습니다. 계수(\alpha)가뒤바뀌거나,"+"부호가있어야할곳에""부호가있거나,또는두가지모두해당됩니다.BobQubit를비밀상태와정확히같게만들기위해,AliceBob에게전화해서(어떤고전적통신수단을사용해서든)표에설명된대로Bob이자신의Qubit에추가연산을수행하도록알려야합니다.예를들어,세번째행에서는계수가뒤바뀌어있습니다.AliceBob에게전화해서)가 뒤바뀌거나, "+" 부호가 있어야 할 곳에 "-" 부호가 있거나, 또는 두 가지 모두 해당됩니다. Bob의 Qubit를 비밀 상태와 정확히 같게 만들기 위해, Alice는 Bob에게 전화해서(어떤 고전적 통신 수단을 사용해서든) 표에 설명된 대로 Bob이 자신의 Qubit에 추가 연산을 수행하도록 알려야 합니다. 예를 들어, 세 번째 행에서는 계수가 뒤바뀌어 있습니다. Alice가 Bob에게 전화해서 XGate를자신의Qubit에적용하라고하면,Gate를 자신의 Qubit에 적용하라고 하면,0\rangle

이제 왜 이 방법으로 빛보다 빠르게 정보를 보낼 수 없는지 명확해졌습니다. 운이 좋으면 0A0Q|0\rangle_A|0\rangle_Q를 측정해서 Bob이 즉시 비밀 상태를 갖게 될 수도 있습니다. 하지만 Bob은 우리가 전화해서 "우리가 0A0Q|0\rangle_A|0\rangle_Q를 측정했으니 아무것도 안 해도 됩니다"라고 알려줄 때까지 그 사실을 알 수 없습니다.

사고 실험에서는 Qubit가 물리적으로 분리되어 새로운 위치로 이동하는 경우가 많습니다. IBM® 양자 컴퓨터는 칩 위의 고체 상태 Qubit를 사용하며, 이를 분리할 수 없습니다. 따라서 Alice와 Bob을 다른 위치로 이동시키는 대신, 이른바 "스왑 Gate"를 사용하여 정보를 한 Qubit에서 다른 Qubit로 이동시킴으로써 칩 자체에서 정보를 분리할 것입니다.

실험 1: 기본 텔레포테이션

IBM Quantum은 "Qiskit 패턴"이라는 프레임워크를 사용하여 양자 컴퓨팅 문제를 해결할 것을 권장합니다. 이 프레임워크는 다음과 같은 단계로 구성됩니다.

  • 1단계: 문제를 양자 Circuit으로 매핑하기
  • 2단계: 실제 양자 하드웨어에서 실행할 수 있도록 Circuit 최적화하기
  • 3단계: Runtime Primitives를 사용하여 IBM 양자 컴퓨터에서 작업 실행하기
  • 4단계: 결과 후처리하기

1단계: 문제를 양자 Circuit으로 매핑하기

위에서 수행한 모든 수식 계산이 1단계를 설명한 것입니다. 이제 Qiskit을 사용하여 양자 Circuit을 구축하면서 이를 구현해 보겠습니다! 세 개의 Qubit로 양자 Circuit을 생성하고, Alice와 Bob의 두 Qubit를 얽힘 상태로 만드는 것부터 시작합니다. 이를 Qubit 1과 2로 설정하고, Qubit 0은 비밀 상태를 위해 예약해 두겠습니다.

# Step 1: Map your problem to a quantum circuit

# Import some general packages
from qiskit import ClassicalRegister, QuantumCircuit, QuantumRegister
import numpy as np

# Define registers
secret = QuantumRegister(1, "Q")
Alice = QuantumRegister(1, "A")
Bob = QuantumRegister(1, "B")

cr = ClassicalRegister(3, "c")

qc = QuantumCircuit(secret, Alice, Bob, cr)

# We entangle Alice's and Bob's qubits as in our work above. We apply a Hadamard gate and then a CNOT gate.
# Note that the second argument in the CNOT gate is the target.
qc.h(Alice)
qc.cx(Alice, Bob)

# Inserting a barrier changes nothing about the logic. It just allows us to force gates to be positioned in "layers".
qc.barrier()

# Now we will use random variables to create the secret state. Don't worry about the "u" gate and the details.
np.random.seed(42) # fixing seed for repeatability
theta = np.random.uniform(0.0, 1.0) * np.pi # from 0 to pi
varphi = np.random.uniform(0.0, 2.0) * np.pi # from 0 to 2*pi

# Assign the secret state to the qubit on the other side of Alice's (qubit 0), labeled Q
qc.u(theta, varphi, 0.0, secret)
qc.barrier()

# Now entangle Q and Alice's qubits as in the discussion above.
qc.cx(secret, Alice)
qc.h(secret)
qc.barrier()

# Now Alice measures her qubits, and stores the outcomes in the "classical registers" cr[]
qc.measure(Alice, cr[1])
qc.measure(secret, cr[0])

# Now we insert some conditional logic. If Alice measures Q in a "1" we need a Z gate, and if Alice measures A in a "1" we need an X gate (see the table).
with qc.if_test((cr[1], 1)):
qc.x(Bob)
with qc.if_test((cr[0], 1)):
qc.z(Bob)

qc.draw(output="mpl")

Output of the previous code cell

Alice의 상태를 Bob에게 텔레포트하기 위해 필요한 작업은 이것이 전부입니다. 하지만 양자 상태 α00+α11\alpha_0 |0\rangle+\alpha_1|1\rangle을 측정하면 0|0\rangle 또는 1|1\rangle 중 하나가 나온다는 점을 기억하세요. 따라서 이 모든 과정이 끝나면 Bob은 분명 Alice의 비밀 상태를 갖게 되지만, 측정만으로는 이를 쉽게 확인할 수 없습니다. 측정을 통해 올바르게 수행했는지 확인하려면 트릭을 써야 합니다. Alice의 비밀 상태를 준비하는 데 "U" ("유니터리"의 약자)로 표기된 연산자를 사용했습니다. Circuit의 끝에 U의 역연산을 적용할 수 있습니다. U가 Alice의 0|0\rangle 상태를 α00+α11\alpha_0 |0\rangle+\alpha_1|1\rangle으로 매핑했다면, U의 역연산은 Bob의 α00+α11\alpha_0 |0\rangle+\alpha_1|1\rangle을 다시 0|0\rangle으로 매핑할 것입니다. 따라서 이 마지막 부분은 양자 정보를 단순히 이동시키는 것이 목적이라면 반드시 할 필요는 없습니다. 이것은 우리 스스로를 확인하기 위해서만 수행하는 것입니다.

# Add the inverse of U and measure Bob's qubit.
qc.barrier()

qc.u(theta, varphi, 0.0, Bob).inverse() # inverse of u(theta,varphi,0.0)
qc.measure(Bob, cr[2]) # add measurement gate

qc.draw(output="mpl")

Output of the previous code cell

올바르게 수행했다면, Bob의 Qubit 측정 결과는 0|0\rangle 상태여야 합니다. 물론, 이 측정들은 확률적입니다. 따라서 Bob의 Qubit가 1|1\rangle 상태로 측정될 아주 작은 가능성이라도 있다면, 단 한 번의 측정에서 1|1\rangle이 나올 수도 있습니다. 0|0\rangle의 확률이 매우 높다는 것을 확신하려면 많은 측정을 수행해야 합니다.

2단계: 양자 실행을 위한 문제 최적화하기

이 단계에서는 수행하려는 연산을 특정 양자 컴퓨터의 기능으로 표현하고, 문제를 양자 컴퓨터의 레이아웃에 매핑합니다.

IBM 양자 컴퓨터와 통신하는 데 필요한 여러 패키지를 로드하는 것부터 시작합니다. 또한 실행할 Backend를 선택해야 합니다. 가장 사용량이 적은 Backend를 선택하거나, 속성을 알고 있는 특정 Backend를 선택할 수 있습니다.

아래에 처음 사용 시 자격 증명을 저장하는 코드가 있습니다. 자격 증명을 환경에 저장한 후, 노트북을 공유할 때 자격 증명이 실수로 공유되지 않도록 노트북에서 이 정보를 삭제하세요. 자세한 안내는 IBM Cloud 계정 설정신뢰할 수 없는 환경에서 서비스 초기화를 참조하세요.

# Load the Qiskit Runtime service
from qiskit_ibm_runtime import QiskitRuntimeService

# Load the Qiskit Runtime service

# Syntax for first saving your token. Delete these lines after saving your credentials.
# QiskitRuntimeService.save_account(channel='ibm_quantum_platform', instance = '<YOUR_IBM_INSTANCE_CRN>', token='<YOUR-API_KEY>', overwrite=True, set_as_default=True)
# service = QiskitRuntimeService(channel='ibm_quantum_platform')

# Load saved credentials
service = QiskitRuntimeService()

# Use the least busy backend, or uncomment the loading of a specific backend like "ibm_brisbane".
backend = service.least_busy(operational=True, simulator=False, min_num_qubits=127)
# backend = service.backend("ibm_brisbane")
print(backend.name)
ibm_sherbrooke

측정에 대한 논리를 명시적으로 활성화합니다.

from qiskit.circuit import IfElseOp

backend.target.add_instruction(IfElseOp, name="if_else")

이제 양자 Circuit을 "트랜스파일"해야 합니다. 이 과정에는 많은 하위 단계가 포함되어 있으며 흥미로운 주제입니다. 하위 단계의 예를 들면: 모든 양자 컴퓨터가 Qiskit의 모든 논리 Gate를 직접 구현할 수 있는 것은 아닙니다. 우리 Circuit의 Gate를 양자 컴퓨터가 구현할 수 있는 Gate로 표현해야 합니다. 사전 설정된 패스 매니저를 사용하여 해당 과정 및 다른 과정들을 수행할 수 있습니다. optimization = 3(최고 수준의 최적화)으로 설정하면 추상적인 양자 Circuit에서 양자 컴퓨터에 전달되는 명령으로의 매핑이 전처리 가능한 수준에서 최대한 효율적으로 이루어집니다.

# Step 2: Transpile
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager

target = backend.target
pm = generate_preset_pass_manager(target=target, optimization_level=3)
qc_isa = pm.run(qc)

Sampler는 양자 Circuit에서 발생할 수 있는 상태를 샘플링하고, 어떤 상태가 어떤 확률로 측정될 수 있는지에 대한 통계를 수집하도록 설계된 Primitive입니다. 여기서 Qiskit Runtime Sampler를 가져옵니다:

# Load the Runtime primitive and session
from qiskit_ibm_runtime import SamplerV2 as Sampler

sampler = Sampler(mode=backend)

양자 컴퓨터의 모든 계산이 고전 컴퓨터에서 합리적으로 시뮬레이션될 수 있는 것은 아닙니다. 이 단순한 텔레포테이션은 분명히 시뮬레이션할 수 있지만, 고전적으로 한 곳에서 다른 곳으로 정보를 저장할 수 있다는 것이 전혀 놀랍지 않습니다. 실제 IBM 양자 컴퓨터를 사용하여 이 계산을 수행하는 것을 강력히 권장합니다. 하지만 무료 월간 사용량을 모두 소진했거나, 수업 중에 완료해야 하는 작업이 대기열에서 기다릴 수 없는 경우, 이 모듈은 시뮬레이터를 사용하여 완료할 수 있습니다. 이를 위해 아래 셀을 실행하고 "실행" 단계의 관련 줄의 주석을 해제하세요.

# Load the backend sampler
from qiskit.primitives import BackendSamplerV2

# Load the Aer simulator and generate a noise model based on the currently-selected backend.
from qiskit_aer import AerSimulator
from qiskit_aer.noise import NoiseModel

noise_model = NoiseModel.from_backend(backend)

# Define a simulator using Aer, and use it in Sampler.
backend_sim = AerSimulator(noise_model=noise_model)
sampler_sim = BackendSamplerV2(backend=backend_sim)

# Alternatively, load a fake backend with generic properties and define a simulator.
# backend_gen = GenericBackendV2(num_qubits=18)
# sampler_gen = BackendSamplerV2(backend=backend_gen)

3단계: 실행

Sampler를 사용하여 Circuit을 인수로 전달하고 작업을 실행하세요.

job = sampler.run([qc_isa])
# job = sampler_sim.run([qc_isa])
res = job.result()
counts = res[0].data.c.get_counts()

4단계: 후처리 및 분석

결과를 시각화하고 해석해 보겠습니다.

# This required 5 s to run on a Heron r2 processor on 10-28-24
from qiskit.visualization import plot_histogram

plot_histogram(counts)

Output of the previous code cell

이해도 확인

아래 질문을 읽고 답을 생각해 본 후, 삼각형을 클릭하여 해답을 확인하세요.

위의 어떤 상태가 성공적인 텔레포테이션을 나타내며, 어떻게 알 수 있나요?

답:

000,|000\rangle, 001,|001\rangle, 010,|010\rangle, 011|011\rangle 상태는 모두 성공적인 텔레포테이션과 일치합니다. 이는 비밀 상태의 초기 준비를 되돌리는 Gate를 추가했기 때문입니다. 비밀 상태가 Bob의 Qubit에 성공적으로 텔레포트되었다면, 그 추가 Gate는 Bob의 Qubit를 0|0\rangle 상태로 되돌려야 합니다. 따라서 위에서 Bob의 Qubit (Qubit 0, 고전 레지스터의 0번째 구성 요소로 측정되며 따라서 가장 높은/오른쪽) 이 0|0\rangle 상태에 있는 모든 상태가 성공을 나타냅니다.

이 플롯은 5,000번의 시행 또는 "샷"에 걸쳐 세 Qubit의 모든 측정 결과를 보여줍니다. 앞서 Alice는 Qubit A와 Q에 대한 모든 가능한 상태를 동일한 확률로 측정한다고 설명했습니다. Circuit에서 Q, A, B 순서로 Qubit 0-2를 할당했습니다. 리틀-엔디언 표기법에서 Bob의 Qubit는 가장 왼쪽/낮은 위치에 있습니다. 따라서 왼쪽의 네 막대는 Bob의 Qubit가 0|0\rangle 상태이고, 다른 두 Qubit가 거의 동일한 확률로 모든 가능한 조합에 있는 경우에 해당합니다. 측정의 거의 대부분 (보통 ~95%)이 Bob의 Qubit를 0|0\rangle 상태로 산출하며, 이는 우리의 설정이 성공했음을 의미합니다! Bob의 Qubit가 1|1\rangle 상태로 나타난 소수의 샷 (~5%)이 있습니다. 이는 논리적으로 불가능해야 합니다. 그러나 모든 현대 양자 컴퓨터는 고전 컴퓨터보다 훨씬 더 많은 노이즈와 오류에 시달립니다. 그리고 양자 오류 수정은 여전히 새롭게 떠오르는 분야입니다.

실험 2: 프로세서 전체에 걸쳐 텔레포테이션하기

양자 텔레포테이션에서 가장 흥미로운 점은, 양자 상태를 먼 거리에 걸쳐 즉각적으로 텔레포테이션할 수 있다는 것입니다 (추가 게이트에 대한 고전적 통신은 즉각적이지 않지만). 이미 언급했듯이, 프로세서에서 큐비트를 떼어 내어 이동시킬 수는 없습니다. 하지만 정보를 한 큐비트에서 다른 큐비트로 이동시켜, 텔레포테이션에 관여하는 큐비트들이 프로세서의 반대편에 위치하도록 만들 수 있습니다. 위에서 수행한 단계를 반복하되, 이번에는 프로세서 전체에 걸칠 수 있을 만큼 충분한 큐비트로 더 큰 Circuit을 만들겠습니다.

Step 1: Map your problem to a quantum circuit

이번에는 Alice와 Bob에 해당하는 큐비트가 달라집니다. 따라서 특정 큐비트를 "A" 또는 "B"로 이름 짓지 않겠습니다. 대신, 큐비트에 번호를 매기고 Alice와 Bob의 정보가 현재 어느 큐비트에 있는지를 변수로 나타내겠습니다. 스왑 게이트를 제외한 나머지 단계는 앞서 설명한 것과 동일합니다.

# Step 1: Map

# Define registers
qr = QuantumRegister(13, "q")

qc = QuantumCircuit(qr, cr)

# Define registers
secret = QuantumRegister(1, "Q")
ebitsa = QuantumRegister(6, "A")
ebitsb = QuantumRegister(6, "B")
# q = ClassicalRegister(1, "q meas")
# a = ClassicalRegister(1, "a")
# b = ClassicalRegister(1, "b")
cr = ClassicalRegister(3, "c")
qc = QuantumCircuit(secret, ebitsa, ebitsb, cr)

# We'll start Alice in the middle of the circuit, then move information outward in both directions.
Alice = 5
Bob = 0
qc.h(ebitsa[Alice])
qc.cx(ebitsa[Alice], ebitsb[Bob])

# Starting with Bob and Alice in the center, we swap their information onto adjacent qubits, until the information is on distant qubits.

for n in range(Alice):
qc.swap(ebitsb[Bob], ebitsb[Bob + 1])
qc.swap(ebitsa[Alice], ebitsa[Alice - 1])
Alice = Alice - 1
Bob = Bob + 1

qc.barrier()

# Create a random state for Alice (qubit zero)
np.random.seed(42) # fixing seed for repeatability
# theta = np.random.uniform(0.0, 1.0) * np.pi #from 0 to pi
theta = 0.3
varphi = np.random.uniform(0.0, 2.0) * np.pi # from 0 to 2*pi

qc.u(theta, varphi, 0.0, secret)

# Entangle Alice's two qubits
qc.cx(secret, ebitsa[Alice])
qc.h(secret)

qc.barrier()

# Make measurements of Alice's qubits and store the results in the classical register.
qc.measure(ebitsa[Alice], cr[1])
qc.measure(secret, cr[0])

# Send instructions to Bob's qubits based on the outcome of Alice's measurements.
with qc.if_test((cr[1], 1)):
qc.x(ebitsb[Bob])
with qc.if_test((cr[0], 1)):
qc.z(ebitsb[Bob])

qc.barrier()

# Invert the preparation we did for Carl's qubit so we can check whether we did this correctly.
qc.u(theta, varphi, 0.0, ebitsb[Bob]).inverse() # inverse of u(theta,varphi,0.0)
qc.measure(ebitsb[Bob], cr[2]) # add measurement gate

qc.draw("mpl")

Output of the previous code cell

Circuit 다이어그램을 보면 논리적 단계는 동일하다는 것을 알 수 있습니다. 달라진 점은 스왑 게이트를 사용하여 Alice 큐비트의 상태를 큐비트 6(A5A_5)에서 큐비트 1(A0A_0)으로, 즉 Q 바로 옆으로 이동시켰다는 것입니다. 그리고 스왑 게이트를 사용하여 Bob의 초기 상태를 큐비트 7(B0B_0)에서 큐비트 12(B5B_5)로 이동시켰습니다. 큐비트 12의 상태는 멀리 떨어진 큐비트 0과 1에서 측정이 이루어지기 전까지는 Q의 비밀 상태와 전혀 관련이 없으며, 조건부 XXZZ 게이트가 적용된 후에야 비로소 비밀 상태와 같아집니다.

Step 2: Optimize your circuit

일반적으로 패스 매니저를 사용하여 Circuit을 Transpiler 하고 최적화할 때는 optimization_level = 3으로 설정하는 것이 합리적입니다. Circuit을 최대한 효율적으로 만들고 싶기 때문입니다. 하지만 이 경우에는, 큐비트 6과 7의 상태를 큐비트 1과 12로 전송해야 할 계산상의 이유가 없습니다. 이는 단지 거리를 두고 텔레포테이션을 시연하기 위해 수행한 작업입니다. 패스 매니저에게 Circuit 최적화를 요청하면, 이 스왑 게이트들이 논리적으로 불필요하다는 것을 인식하고 제거한 뒤 인접한 큐비트에서 게이트 연산을 수행할 것입니다. 따라서 이 특별한 경우에는 optimization_level = 0을 사용합니다.

# Step 2: Transpile
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager

target = backend.target
pmzero = generate_preset_pass_manager(target=target, optimization_level=0)

qc_isa_zero = pmzero.run(qc)

print(qc_isa_zero.depth())
105

plot_circuit_layout 함수를 사용하면 이 큐비트들이 양자 프로세서의 어디에 위치하는지 시각화할 수 있습니다.

Step 3: Execute

앞서와 마찬가지로, 실제 IBM 양자 컴퓨터에서 실행하는 것을 권장합니다. 월간 무료 사용량이 소진되었다면, 시뮬레이터 셀의 주석을 해제하여 시뮬레이터에서 실행해도 됩니다.

# This required 5 s to run on a Heron r2 processor on 10-28-24
job = sampler.run([qc_isa_zero])
# job = sampler_sim.run([qc_isa_zero])
counts = job.result()[0].data.c.get_counts()
from qiskit.visualization import plot_histogram

plot_histogram(counts)

Output of the previous code cell

Step 4: Classical post-processing

이번에도 Alice의 큐비트에 대한 가능한 결과들의 확률이 꽤 균일하게 나타납니다. 비밀 코드를 역으로 적용한 후 Bob의 큐비트가 0|0\rangle으로 측정될 확률이 높게 나타나는데, 이는 비밀 상태를 프로세서 전체에 걸쳐 Q에서 Bob(큐비트 0에서 12)으로 올바르게 텔레포테이션했을 가능성이 높다는 것을 의미합니다. 하지만 이전에 비해 Bob에 대해 0|0\rangle측정되지 않을 확률이 더 높아졌다는 점에 주목해야 합니다. 이것은 양자 컴퓨팅의 중요한 교훈입니다: 게이트, 특히 스왑 게이트와 같은 다중 큐비트 게이트가 많을수록 더 많은 노이즈와 오류가 발생합니다.

Questions

강사는 이 간단한 설문을 통해 노트북 사용 방식에 대한 정보를 제공하면, 공통 교육과정 배치 지침과 정답 키가 포함된 노트북 버전을 요청할 수 있습니다.

Critical concepts

  • 큐비트는 얽힐 수 있으며, 이는 한 큐비트의 측정이 다른 큐비트의 상태에 영향을 주거나 심지어 결정할 수 있다는 것을 의미합니다.
  • 얽힘은 고전적 상관관계와 다릅니다. 예를 들어, 큐비트 A와 B는 α000+α111\alpha_0|00\rangle+\alpha_1|11\rangle과 같은 상태의 중첩 상태에 있을 수 있습니다. A 또는 B의 상태는 자연에 의해 아직 결정되지 않을 수 있지만, A와 B가 같은 상태에 있다는 것은 보장될 수 있습니다.
  • 얽힘과 측정의 조합을 통해 상태(정보를 저장할 수 있는)를 한 큐비트에서 다른 큐비트로 전송할 수 있습니다. 이 전송은 먼 거리에 걸쳐서도 가능하며, 이것을 양자 텔레포테이션이라고 합니다.
  • 양자 텔레포테이션은 확률적인 양자 측정에 의존합니다. 따라서 텔레포테이션된 상태를 조정하기 위해 고전적 통신이 필요할 수 있습니다. 이로 인해 양자 텔레포테이션은 빛보다 빠르게 정보를 전달할 수 없습니다. 양자 텔레포테이션은 상대성 이론이나 인과율을 위반하지 않습니다.
  • 현대 양자 컴퓨터는 고전 컴퓨터보다 노이즈와 오류에 더 취약합니다. 몇 퍼센트의 오류를 예상하세요.
  • 순차적으로 추가하는 게이트(특히 2큐비트 게이트)가 많을수록 더 많은 오류와 노이즈가 발생할 수 있습니다.

True/False questions

  1. T/F 양자 텔레포테이션은 빛보다 빠르게 정보를 전송하는 데 사용될 수 있다.
  2. T/F 현대의 증거에 따르면 양자 상태의 붕괴는 빛보다 빠르게 전파된다.
  3. T/F Qiskit에서 큐비트는 q3,q2,q1,q0|q_3,q_2,q_1, q_0\rangle처럼 가장 낮은 번호의 큐비트가 오른쪽에 오는 순서로 배열된다.

MC questions

  1. 큐비트 A와 B가 얽혀 있다가 큰 거리 dd만큼 분리됩니다. 큐비트 A가 측정됩니다. 큐비트 B의 상태가 영향을 받는 속도에 관해 어떤 설명이 옳습니까?
  • a. 지금까지 실행된 실험에서 실험 허용 오차 내에서 큐비트 B는 즉각적으로 영향을 받는다.
  • b. 큐비트 B는 d/cd/c 시간 후에 영향을 받으며, 이는 양자 상태가 실험 허용 오차 내에서 대략 빛의 속도로 "붕괴"됨을 의미한다.
  • c. 큐비트 B는 고전적 통신이 이루어진 후에만 영향을 받으며, 즉 d/cd/c보다 긴 시간이 걸린다.
  • d. 위의 어느 것도 아님
  1. 측정 확률은 양자 상태의 진폭과 관련이 있다는 것을 기억하세요. 예를 들어, 큐비트가 처음에 α00+α11\alpha_0|0\rangle+\alpha_1 |1\rangle 상태에 있다면, 0|0\rangle 상태를 측정할 확률은 α02|\alpha_0|^2입니다. 유한한 샘플링으로 인해 모든 측정 결과 집합이 이 확률과 정확히 일치하지는 않습니다(동전을 던질 때 앞면이 연속으로 두 번 나올 수 있는 것처럼). 아래의 측정 히스토그램은 다음 중 어떤 양자 상태에 해당할 수 있습니까? 가장 좋은 선택지를 고르세요.

entangled_teleportation_fig

  • a. 0|0\rangle
  • b. 12(01)\frac{1}{\sqrt{2}}\left(|0\rangle-|1\rangle\right)
  • c. 12(0+1)\frac{1}{\sqrt{2}}\left(|0\rangle+|1\rangle\right)
  • d. 450+351\frac{4}{5}|0\rangle+\frac{3}{5}|1\rangle
  • e. 350+451\frac{3}{5}|0\rangle+\frac{4}{5}|1\rangle
  1. 다음 상태 중 큐비트 A와 B가 얽혀 있는 것은 무엇입니까? 해당하는 것을 모두 고르세요.
  • a. 12(0B0A+1B1A)\frac{1}{\sqrt{2}}\left(|0\rangle_B|0\rangle_A+|1\rangle_B|1\rangle_A\right)
  • b. 450B0A+351B1A\frac{4}{5}|0\rangle_B|0\rangle_A+\frac{3}{5}|1\rangle_B|1\rangle_A
  • c. 12(0B1A1B0A)\frac{1}{\sqrt{2}}\left(|0\rangle_B|1\rangle_A-|1\rangle_B|0\rangle_A\right)
  • d. 12(0B0A+1B0A)\frac{1}{\sqrt{2}}\left(|0\rangle_B|0\rangle_A+|1\rangle_B|0\rangle_A\right)
  • e. 0B0A|0\rangle_B|0\rangle_A
  1. 이 모듈에서 우리는 얽힌 상태 12(0B0A+1B1A)\frac{1}{\sqrt{2}}\left(|0\rangle_B|0\rangle_A+|1\rangle_B|1\rangle_A\right)를 준비했습니다. 하지만 유사한 프로토콜에 사용할 수 있는 다른 얽힌 상태도 많습니다. 아래 상태 중 다음과 같은 2큐비트 측정 히스토그램을 생성할 수 있는 것은 무엇입니까? 가장 좋은 선택지를 고르세요.

entangled_teleportation_fig_0110

  • a. 12(0B0A+1B1A)\frac{1}{\sqrt{2}}\left(|0\rangle_B|0\rangle_A+|1\rangle_B|1\rangle_A\right)
  • b. 450B0A+351B1A\frac{4}{5}|0\rangle_B|0\rangle_A+\frac{3}{5}|1\rangle_B|1\rangle_A
  • c. 12(0B1A1B0A)\frac{1}{\sqrt{2}}\left(|0\rangle_B|1\rangle_A-|1\rangle_B|0\rangle_A\right)
  • d. 450B1A+351B0A\frac{4}{5}|0\rangle_B|1\rangle_A+\frac{3}{5}|1\rangle_B|0\rangle_A
  • e. 0B0A|0\rangle_B|0\rangle_A

Discussion questions

  1. 양자 텔레포테이션 프로토콜을 처음부터 끝까지 파트너/그룹에게 설명해 보세요. 추가할 내용이 있는지, 또는 질문이 있는지 확인해 보세요.

  2. Alice와 Bob 사이의 초기 얽힌 상태 12(0B0A+1B1A)\frac{1}{\sqrt{2}}\left(|0\rangle_B|0\rangle_A+|1\rangle_B|1\rangle_A\right)에는 특별한 점이 있습니까? 있다면 무엇이 특별합니까? 없다면 어떤 다른 얽힌 상태를 사용할 수 있었을까요?