Quantum Teleportation
What You'll Learn: How to transfer a quantum state from one qubit to another using a shared entangled pair and two classical bits — without physically moving the qubit.
Level: Beginner | Time: 20 minutes | Qubits: 3 | Framework: Qiskit
Prerequisites: Bell State
The Idea
Suppose Alice has a qubit in some unknown state |ψ⟩ and wants to send it to Bob. She can't just measure it and send the result — measurement destroys the quantum state. She also can't copy it (no-cloning theorem). So how can she transfer the information?
The answer: quantum teleportation. If Alice and Bob share a pre-existing entangled pair (a Bell state), Alice can perform a special measurement on her qubit and her half of the Bell pair, send the two classical bits of the measurement result to Bob, and Bob can use those bits to reconstruct the exact state |ψ⟩ on his qubit.
The original state is destroyed at Alice's end (it has to be — otherwise we'd have cloning). And Bob needs the classical bits before he can do anything — so there's no faster-than-light communication. But the fidelity is perfect: Bob gets exactly the state Alice had.
This protocol was proposed by Bennett, Brassard, Crépeau, Jozsa, Peres, and Wootters in 1993 and first demonstrated experimentally in 1997.
How It Works
The Circuit
CODE┌─────────┐ ┌───┐ q_0: ────┤ prepare ├──■──┤ H ├─── M ─────────────── └─────────┘┌─┴─┐└───┘ │ q_1: ───────■───────┤ X ├───────── M ──────■──────── ┌─┴─┐ └───┘ │ q_2: ─────┤ X ├────────────────────────────X── Z ── M └───┘ (conditioned)
Step 1: Share a Bell Pair
PYTHONqc.h(1) # Superposition on qubit 1 qc.cx(1, 2) # Entangle qubits 1 and 2: (|00⟩ + |11⟩)/√2
Alice gets qubit 1, Bob gets qubit 2. They can be anywhere in the universe — the entanglement persists regardless of distance.
Step 2: Alice's Bell Measurement
PYTHONqc.cx(0, 1) # CNOT: entangle message qubit with Alice's Bell qubit qc.h(0) # Hadamard: complete the Bell basis measurement qc.measure(0, 0) # Measure → one of four outcomes (00, 01, 10, 11) qc.measure(1, 1)
Alice now has two classical bits. This measurement "projects" the three-qubit system into a state where Bob's qubit is |ψ⟩ — up to a known correction that depends on Alice's bits.
Step 3: Bob's Corrections
PYTHON# If Alice's bit 1 = 1, apply X (bit flip) with qc.if_test((cr[1], 1)): qc.x(2) # If Alice's bit 0 = 1, apply Z (phase flip) with qc.if_test((cr[0], 1)): qc.z(2)
| Alice's Bits | Bob Applies | Why |
|---|---|---|
| 00 | Nothing | State already correct |
| 01 | X | Bit flip correction |
| 10 | Z | Phase flip correction |
| 11 | X then Z | Both corrections |
After corrections, Bob's qubit is exactly in state |ψ⟩.
The Math
Setup
Let Alice's unknown state be |ψ⟩ = α|0⟩ + β|1⟩ and the shared Bell pair be |Φ+⟩ = (|00⟩ + |11⟩)/√2 on qubits 1, 2.
The initial 3-qubit state is:
|ψ⟩₀ ⊗ |Φ+⟩₁₂ = (α|0⟩ + β|1⟩) ⊗ (|00⟩ + |11⟩)/√2
After Bell Measurement
Rewriting in the Bell basis on qubits 0, 1:
= ½ [ |Φ+⟩₀₁(α|0⟩ + β|1⟩)₂ + |Φ-⟩₀₁(α|0⟩ − β|1⟩)₂ + |Ψ+⟩₀₁(α|1⟩ + β|0⟩)₂ + |Ψ-⟩₀₁(α|1⟩ − β|0⟩)₂ ]
Each Bell measurement outcome corresponds to Bob having a specific transformation of |ψ⟩. The correction gates (I, X, Z, XZ) undo that transformation.
Why It Works
The key insight is that the Bell measurement doesn't reveal α or β — it only tells Bob which correction to apply. The quantum information is never transmitted classically. It's "hidden" in the correlations of the entangled pair.
Expected Output
When teleporting the |+⟩ state with 1024 shots:
| Outcome (c₂c₁c₀) | Expected | Meaning |
|---|---|---|
| All 8 bitstrings | ~128 each | Alice's bits are random; Bob's bit (c₂) is ~50/50 |
Bob's qubit (bit 2) is what matters: after correction, it should have the same statistics as the original state.
| Teleported State | Bob's P(0) | Bob's P(1) |
|---|---|---|
| |0⟩ | ~100% | ~0% |
| |1⟩ | ~0% | ~100% |
| |+⟩ | ~50% | ~50% |
| |−⟩ | ~50% | ~50% |
Running the Circuit
PYTHONfrom circuit import run_circuit, verify_teleportation # Teleport the |+⟩ state (default) counts = run_circuit(shots=1024) # Teleport |1⟩ counts = run_circuit(shots=1024, initial_state="one") # Verify all four cardinal states result = verify_teleportation(shots=4096) for check in result["checks"]: print(f" {check['name']}: {check['detail']}")
Try It Yourself
-
Teleport |1⟩: Change
initial_state="one"and verify Bob always gets 1. -
Remove corrections: Comment out Bob's X and Z gates. What happens to the teleportation fidelity?
-
Verify no-cloning: After the protocol, measure Alice's qubit 0. Is it still in state |ψ⟩? (It shouldn't be — it collapsed during the Bell measurement.)
-
Entanglement swapping: Chain two teleportations to create entanglement between qubits that never interacted directly.
What's Next
- Superdense Coding — The "dual" protocol: send 2 classical bits using 1 qubit + entanglement
- GHZ State — Extend entanglement to 3+ qubits
- Bell State — Review the entangled pair that makes teleportation possible
Applications
| Application | How Teleportation Is Used |
|---|---|
| Quantum Networks | Transfer quantum states between distant nodes without a quantum channel |
| Quantum Repeaters | Extend entanglement range by chaining teleportation + entanglement swapping |
| Fault-Tolerant QC | Move logical qubits between error-correction regions (lattice surgery) |
| Blind Quantum Computing | Client delegates computation to server without revealing the input state |
| Quantum Internet | Foundation protocol for all quantum communication networks |
References
- Bennett, C.H., Brassard, G., Crépeau, C., Jozsa, R., Peres, A., Wootters, W.K. (1993). "Teleporting an Unknown Quantum State via Dual Classical and Einstein-Podolsky-Rosen Channels." Physical Review Letters 70(13), 1895-1899. DOI: 10.1103/PhysRevLett.70.1895
- Bouwmeester, D. et al. (1997). "Experimental quantum teleportation." Nature 390, 575-579.
- Nielsen, M.A. & Chuang, I.L. Quantum Computation and Quantum Information, Section 1.3.7 (Quantum teleportation).