Skip to main content
IBM Quantum Platform

Quanten-Teleportation

Für dieses Modul "Qiskit im Klassenzimmer" müssen die Schüler eine funktionierende Python Umgebung mit den folgenden Paketen installiert haben:

  • qiskit v2.1.0 oder neuer
  • qiskit-ibm-runtime v0.40.1 oder neuer
  • qiskit-aer v0.17.0 oder neuer
  • qiskit.visualization
  • numpy
  • pylatexenc

Um die oben genannten Pakete einzurichten und zu installieren, lesen Sie die Anleitung Qiskit installieren. Um Aufträge auf echten Quantencomputern ausführen zu können, müssen die Schüler ein Konto bei IBM Quantum® einrichten, indem sie die Schritte in der Anleitung zur Einrichtung Ihres IBM Cloud Kontos befolgen.

Dieses Modul wurde getestet und verbrauchte 14 Sekunden QPU-Zeit. Dies ist nur eine Schätzung. Ihre tatsächliche Nutzung kann davon abweichen.

# 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'

Schauen Sie sich den Modul-Walkthrough von Dr. Katie McCormick unten an, oder klicken Sie hier, um ihn auf YouTube zu sehen.



Einführung und Hintergrund

Die Quantenteleportation ist ein Verfahren der Quantenphysik, mit dem Quanteninformation von einem Ort zum anderen übertragen werden kann, ohne dass dabei Teilchen physikalisch bewegt werden müssen. Im Gegensatz zum Science-Fiction-Konzept der Teleportation wird bei diesem Verfahren keine Materie transportiert. Stattdessen basiert es auf dem Prinzip der Quantenverschränkung, bei dem zwei Teilchen unabhängig von der Entfernung miteinander verbunden werden. Durch eine Reihe präziser Messungen und klassischer Kommunikation lässt sich der Quantenzustand eines Teilchens in einem anderen Teilchen an einem entfernten Ort nachbilden, wodurch die Quanteninformation praktisch „teleportiert“ wird. In diesem Modul werden wir uns ansehen, wie das mathematisch funktioniert, und anschließend werden wir die Quantenteleportation auf einem echten Quantencomputer umsetzen. Die Einführung hier soll kurz ausfallen; für weitere Hintergrundinformationen zur Quanteninformation und eine ausführlichere Erläuterung des Themas Teleportation empfehlen wir den Kurs von John Watrous zu den Grundlagen der Quanteninformation, insbesondere den Abschnitt über Teleportation.

Klassische Bits können die Zustände 0 oder 1 annehmen. Quantenbits (Qubits) können sich in Quantenzuständen befinden, die mit ∣0⟩|0\rangle und ∣1⟩|1\rangle bezeichnet werden, sowie in linearen Kombinationen dieser Zustände, sogenannten „Superpositionen“, wie beispielsweise ∣ψ⟩=α0∣0⟩+α1∣1⟩|\psi\rangle = \alpha_0|0\rangle +\alpha_1|1\rangle, mit α0,α1∈C\alpha_0,\alpha_1 \in \mathbb{C} und ∣α0∣2+∣α1∣2=1|\alpha_0|^2+|\alpha_1|^2 = 1. Obwohl die Zustände in dieser Superposition existieren können, führt eine Messung des Zustands zu einem „Zusammenbruch“ in entweder den Zustand ∣0⟩|0\rangle oder den Zustand ∣1⟩|1\rangle. Die Parameter aa und bb beziehen sich auf die Wahrscheinlichkeit des jeweiligen Messergebnisses gemäß

P0=∣α0∣2P_0 = |\alpha_0|^2 P1=∣α1∣2P_1 = |\alpha_1|^2

Daraus ergibt sich die Nebenbedingung, dass ∣α0∣2+∣α1∣2=1|\alpha_0|^2+|\alpha_1|^2 = 1 gilt.

Ein weiteres wichtiges Merkmal ist, dass Quantenbits "verschränkt" sein können, was bedeutet, dass die Messung eines Qubits das Ergebnis der Messung eines anderen, verschränkten Qubits beeinflussen kann. Zu verstehen, wie sich die Verschränkung von einfachen klassischen Korrelationen unterscheidet, ist nicht ganz einfach. Erläutern wir zunächst unsere Notation. Nennen Sie zwei Qubits, die zu Freund 0 (Alice) und Freund 1 (Bob) gehören und sich jeweils im Zustand ∣0⟩|0\rangle befinden

∣0⟩B∣0⟩A|0\rangle_B|0\rangle_A

oder

∣0⟩1∣0⟩0|0\rangle_1|0\rangle_0

manchmal abgekürzt zu einfach

∣00⟩|00\rangle

Beachten Sie, dass sich das Qubit mit der niedrigsten Nummer (bzw. dem niedrigsten Buchstaben) ganz rechts befindet. Dies ist eine Konvention, die als „Little-Endian“-Notation bezeichnet wird und in Qiskit durchgängig verwendet wird. Wenn der Zwei-Qubit-Zustand der Freunde „ ∣00⟩|00\rangle “ lautet und sie den Zustand ihrer jeweiligen Qubits messen, erhalten sie jeweils eine 0. Ebenso würde jede ihrer Messungen eine 1 ergeben, wenn sich die Qubits im Zustand ∣11⟩|11\rangle befänden. Das unterscheidet sich nicht vom klassischen Fall. In der Quanteninformatik können wir dies jedoch mit der Superposition kombinieren, um Zustände wie

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

In einem solchen Zustand ist noch nicht bekannt, ob sich die Qubits von Alice und Bob im Zustand 0 oder 1 befinden – dies ist noch nicht einmal von der Natur festgelegt –, und dennoch wissen wir, dass sie bei der Messung denselben Zustand für ihr Qubit feststellen werden. Wenn Bob beispielsweise misst, dass sich sein Qubit im Zustand ∣0⟩|0\rangle befindet, kann dies nur geschehen, wenn die Messung den Zwei-Qubit-Zustand auf einen der beiden möglichen Zustände kollabiert hat, nämlich konkret auf ∣00⟩|00\rangle. Damit befindet sich auch Alices Qubit im Zustand ∣0⟩|0\rangle.

Die Verschränkung von Qubits auf diese Weise erfordert nicht, dass die Qubits physisch nahe beieinander bleiben. Mit anderen Worten: Wir könnten Qubits verschränken, sie dann über eine große Entfernung voneinander trennen und ihre Verschränkung zur Übertragung von Informationen nutzen. Ein verschränkter Zustand wie der obige ist eine Grundeinheit der Verschränkung und wird manchmal als "e-Bit" bezeichnet, ein einzelnes Bit der Verschränkung. Diese e-Bits können als Ressourcen in der Quantenkommunikation betrachtet werden, da jedes e-Bit, das zwischen entfernten Partnern ausgetauscht wird, wie hier beschrieben, verwendet werden kann, um Informationen von einem Ort zum anderen zu übertragen.

Der erste Gedanke vieler Menschen, die zum ersten Mal davon hören, ist die Verletzung der Relativitätstheorie: Können wir damit Informationen schneller als das Licht senden? Hinterfragen Sie auf jeden Fall weiterhin die wissenschaftlichen Regeln, aber leider wird es uns nicht möglich sein, Informationen schneller als das Licht zu senden, aus Gründen, die im Laufe dieses Moduls deutlich werden. Spoiler: Erstaunlicherweise liegt es NICHT an der Geschwindigkeit, mit der sich dieser Kollaps ausbreitet, der schneller als das Licht zu sein scheint [1].

Wir beginnen mit zwei Mitarbeitern, Alice und Bob, die sich zunächst am selben Ort befinden und gemeinsam an denselben Qubits arbeiten können. Diese Kollaborateure werden ihre Qubits verschränken. Dann werden sie sich an zwei verschiedene geografische Orte begeben und ihre jeweiligen Qubits mitbringen. Alice erhält dann Quanteninformationen über ein neues Q-Bit. Wir machen keine Annahmen über die Informationen zu Q. Der Zustand von Q könnte ein Geheimnis sein, das Alice nicht kennt; er könnte allen Menschen unbekannt sein. Alice erhält jedoch die Aufgabe, die Informationen über Q an Bob weiterzugeben. Sie wird dies mittels Quantenteleportation tun.

Um dies zu erreichen, müssen wir einige Quantenoperationen oder "Gates" kennen.


Quantenoperatoren (Gatter)

Sie können diesen Abschnitt überspringen, wenn Sie bereits mit Quantengattern vertraut sind. Wenn Sie diese Gates besser verstehen wollen, lesen Sie die Grundlagen der Quanteninformation, insbesondere die ersten beiden Lektionen, auf IBM Quantum Learning.

Für dieses Teleportationsprotokoll werden wir hauptsächlich zwei Arten von Quantengattern verwenden: das Hadamard-Gatter und das CNOT-Gatter. Einige andere werden eine geringere Rolle spielen: das XX -Gate, das ZZ -Gate und das SWAP-Gate.

Dieses Modul kann mit sehr begrenzten Kenntnissen der linearen Algebra abgeschlossen werden, aber manchmal kann es hilfreich sein, quantenmechanische Gatter mit Hilfe von Matrizen und Vektoren zu visualisieren. Daher stellen wir hier auch die Matrix-/Vektorformen von Quantengattern/-zuständen vor.

Die Zustände, die wir bereits vorgestellt haben, sind (teils aus Konvention, teils aus Zwängen) so gewählt, dass sie Vektorformen haben:

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

Auf diese Weise kann ein beliebiger Zustand ∣ψ⟩=a∣0⟩+b∣1⟩|\psi\rangle = a|0\rangle+b|1\rangle geschrieben werden als

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

Es gibt einige Möglichkeiten, die Notation auf Mehr-Qubit-Zustände auszudehnen, aber die nachstehende Wahl ist ziemlich Standard:

∣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}.

Mit dieser Wahl der Vektorschreibweise im Hinterkopf können wir unsere benötigten Quantengatter, ihre Auswirkungen auf Quantenzustände und ihre Matrixformen vorstellen.

H Hadamard-Tor: Erzeugt einen Überlagerungszustand. Ein-Qubit-Tor.

H∣0⟩=12(∣0⟩+∣1⟩),H|0\rangle = \frac{1}{\sqrt{2}}\left(|0\rangle+|1\rangle\right), H∣1⟩=12(∣0⟩−∣1⟩)H|1\rangle = \frac{1}{\sqrt{2}}\left(|0\rangle-|1\rangle\right) H=12(111−1)H=\frac{1}{\sqrt{2}}\begin{pmatrix} 1 & 1 \\ 1 & -1 \end{pmatrix}

Eine Schaltung mit einem Hadamard-Gatter wird wie folgt aufgebaut:

from qiskit import QuantumCircuit

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

Output:

Output of the previous code cell

CNOT-Gatter (Controlled-NOT): Dieses Gatter verwendet zwei Qubits: ein Steuer- und ein Ziel-Qubit. Überprüft den Zustand eines Kontroll-Qubits, der sich nicht verändert hat. Befindet sich das Steuer-Qubit jedoch im Zustand ∣1⟩|1\rangle, so verändert das Gatter den Zustand des Ziel-Qubits; befindet sich das Steuer-Qubit im Zustand ∣0⟩|0\rangle, so erfolgt keinerlei Veränderung. In der folgenden Darstellung wird davon ausgegangen, dass das Qubit AA (das Qubit ganz rechts) das Steuerqubit und das Qubit BB (das Qubit ganz links) das Zielqubit ist. Im Folgenden wird die Notation „ CNOT(qcontrol,qtarget)∣BA⟩CNOT(q_{control},q_{target})|BA\rangle “ verwendet.

CNOT(A,B)∣00⟩=∣00⟩,CNOT(A,B)∣01⟩=∣11⟩,CNOT(A,B)∣10⟩=∣10⟩,CNOT(A,B)∣11⟩=∣01⟩CNOT(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

Manchmal wird CNOT so geschrieben, dass die Reihenfolge der Kontrolle und des Ziels einfach impliziert wird. Aber es gibt keine solche Zweideutigkeit im Code oder in Schaltplänen.

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

Ein CNOT-Gatter sieht in einer Schaltung etwas anders aus, da es zwei Qubits benötigt. So wird sie umgesetzt:

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

Output:

Output of the previous code cell

Überprüfen Sie Ihr Verständnis

Die meisten Gatter haben in Qiskit dieselbe Matrixform wie überall sonst auch. Das CNOT-Gatter wirkt jedoch auf zwei Qubits, sodass plötzlich die Reihenfolge der Qubits zu einem Problem wird. Texte, in denen Qubits geordnet werden ∣q0,q1,...⟩|q_0,q_1,...\rangle, weisen für ihre CNOT-Gatter eine andere Matrixform auf. Überprüfen Sie durch explizite Matrixmultiplikation, ob die obige CNOT-Matrix die richtige Wirkung auf den Zustands ∣01⟩|01\rangle hat.

  • CNOT∣01⟩=(1000000100100100)(0100)=(0001)=∣11⟩CNOT|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 : Äquivalent zu einer NOT-Operation. Ein-Qubit-Tor.

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

In Qiskit sieht das Erstellen eines Schaltkreises mit einem XX Gate wie folgt aus:

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

Output:

Output of the previous code cell

ZZ Tor : Fügt einem Zustand eine "Phase" hinzu (einen Vorfaktor, der im Falle der Z-Eigenzustände ∣0⟩|0\rangle und ∣1⟩|1\rangle entweder eine 1 oder -1 ist). Ein-Qubit-Tor.

Z∣0⟩=∣0⟩,Z∣1⟩=−∣1⟩Z|0\rangle = |0\rangle,\\Z|1\rangle=-|1\rangle Z=(100−1)Z=\begin{pmatrix} 1 & 0 \\ 0 & -1 \end{pmatrix}

In Qiskit sieht das Erstellen eines Schaltkreises mit einem ZZ Gate wie folgt aus:

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

Output:

Output of the previous code cell

Theorie

Lassen Sie uns das Protokoll für die Quantenteleportation mit Hilfe der Mathematik aufstellen. Im nächsten Abschnitt werden wir diesen Aufbau dann mit einem Quantencomputer realisieren.

Alice und Bob verschränken ihre Qubits: Zu Beginn befinden sich das Qubit von Alice und das Qubit von Bob jeweils getrennt im Zustand ∣0⟩|0\rangle (eine gute Annahme und auch die richtige Initialisierung für IBM® Quantencomputer). Wir können dies als ∣0⟩B∣0⟩A|0\rangle_B|0\rangle_A oder einfach als ∣00⟩|00\rangle schreiben. Berechnen wir, was passiert, wenn Alice und Bob mit dem Hadamard-Gatter auf Alices Qubit und dann mit einem CNOT-Gatter mit Alices Qubit als Kontrolle und Bobs Qubit als Ziel agieren:

CNOT(A,B)HA∣0⟩B∣0⟩A=CNOT(A,B)∣0⟩B12(∣0⟩A+∣1⟩A)=12(CNOT(A,B)∣0⟩B∣0⟩A+CNOT(A,B)∣0⟩B∣1⟩A)=12(∣0⟩B∣0⟩A+∣1⟩B∣1⟩A)\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}

Man beachte, dass nun die Qubits von Alice und Bob verschränkt sind. Obwohl es noch nicht von Natur aus feststeht, ob sich ihre beiden Qubits im Zustand ∣0⟩|0\rangle oder im Zustand ∣1⟩|1\rangle befinden, ist bekannt, dass sich ihre Qubits im gleichen Zustand befinden.

Alice und Bob trennen sich: Die beiden Freunde verschieben ihre Qubits an neue Orte, die möglicherweise sehr weit voneinander entfernt sind. Dies ist mit einer Reihe von Vorbehalten verbunden: Es ist nicht trivial, Quanteninformationen zu bewegen, ohne sie zu stören. Aber sie kann verschoben werden, und in der Tat werden Sie sie in diesem Modul verschieben. Aber bedenken Sie, dass wir mit einigen Fehlern rechnen müssen, wenn wir Quanteninformationen viel bewegen.

Q wird eingeführt: Der geheime Zustand wird auf dem Q-Bit Q vorbereitet:

∣ψ⟩Q=α0∣0⟩Q+α1∣1⟩Q|\psi\rangle_Q = \alpha_0 |0\rangle_Q + \alpha_1 |1\rangle_Q

An diesem Punkt grenzt Q einfach an das Qubit von Alice (A). Es gab keine Verschränkung, so dass der Quantenzustand der drei Qubits zusammen wie folgt geschrieben werden kann:

∣ψ⟩AB∣ψ⟩Q=12(∣0⟩B∣0⟩A+∣1⟩B∣1⟩A)(α0∣0⟩Q+α1∣1⟩Q).|\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).

Ziel ist es, die Informationen über Q vom Standort von Alice zum Standort von Bob zu bringen. An dieser Stelle erheben wir keine Ansprüche oder Anforderungen an die Geheimhaltung oder die Geschwindigkeit der Informationsübertragung. Wir untersuchen lediglich, wie Informationen von Alice zu Bob gelangen können.

Da die Information mit Q beginnt, nehmen wir an, dass Q die niedrigste Nummer in der Qubit-Nummerierung zugewiesen ist, so dass Q in der folgenden Rechnung das letzte Qubit rechts ist (Little-Endian-Notation).

Alice verschränkt die Qubits A und Q: Alice wendet nun ein CNOT-Gatter an, wobei Q als Steuerqubit und ihr eigenes Qubit als Zielqubit dienen, und wendet anschließend ein Hadamard-Gatter auf Q an. Berechnen wir den 3-Qubit-Zustand nach dieser Operation:

HQCNOT(A,Q)∣ψ⟩AB∣ψ⟩Q=HQCNOT(A,Q)12(∣0⟩B∣0⟩A+∣1⟩B∣1⟩A)(α0∣0⟩Q+α1∣1⟩Q)=HQCNOT(A,Q)12((α0∣0⟩B∣0⟩A∣0⟩Q+α1∣0⟩B∣0⟩A∣1⟩Q)+(α0∣1⟩B∣1⟩A∣0⟩Q+α1∣1⟩B∣1⟩A∣1⟩Q))=HQ12(α0∣0⟩B∣0⟩A∣0⟩Q+α1∣0⟩B∣1⟩A∣1⟩Q+α0∣1⟩B∣1⟩A∣0⟩Q+α1∣1⟩B∣0⟩A∣1⟩Q)=12(α0∣0⟩B∣0⟩A∣0⟩Q+α0∣0⟩B∣0⟩A∣1⟩Q+α1∣0⟩B∣1⟩A∣0⟩Q−α1∣0⟩B∣1⟩A∣1⟩Q)+12(α0∣1⟩B∣1⟩A∣0⟩Q+α0∣1⟩B∣1⟩A∣1⟩Q+α1∣1⟩B∣0⟩A∣0⟩Q−α1∣1⟩B∣0⟩A∣1⟩Q)\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)\right. \\ &+\left. \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 \right. \\ &+\left. \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 \right. \\ &+ \left. \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 \right. \\ &+ \left. \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}

Da sich A und Q am selben Ort befinden, gruppieren wir die obigen Begriffe nach den Ergebnissen der Messungen an den Q-Bits A und Q:

∣ψ⟩=12((α0∣0⟩B+α1∣1⟩B)∣0⟩A∣0⟩Q+(α0∣0⟩B−α1∣1⟩B)∣0⟩A∣1⟩Q+(α1∣0⟩B+α0∣1⟩B)∣1⟩A∣0⟩Q+(−α1∣0⟩B+α0∣1⟩B)∣1⟩A∣1⟩Q)\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 \right. \\ & + \left. (\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}

Überprüfen Sie Ihr Verständnis

Wie hoch ist angesichts des obigen Ausdrucks für die Zustände aller drei Qubits die Wahrscheinlichkeit, dass eine Messung an den Qubits A und Q das Ergebnis „ ∣0⟩A∣0⟩Q?|0\rangle_A|0\rangle_Q? “ liefert?

  • 25%. Um dies zu erkennen, muss der Zustand von Bob normalisiert werden, d. h ∣A⟨0∣Q⟨0∣12∣0⟩A∣0⟩Q(α0∣0⟩B+α1∣1⟩B)∣2=14∣(α0∣0⟩B+α1∣1⟩B)∣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}

Nun kann Alice die Qubits A und Q messen. Sie kann das Ergebnis dieser Messung nicht beeinflussen, da Quantenmessungen probabilistisch sind. Wenn sie also misst, gibt es vier mögliche Ergebnisse, die alle gleich wahrscheinlich sind: ∣0⟩A∣0⟩Q|0\rangle_A|0\rangle_Q, ∣0⟩A∣1⟩Q|0\rangle_A|1\rangle_Q, ∣1⟩A∣0⟩Q|1\rangle_A|0\rangle_Q und ∣1⟩A∣1⟩Q|1\rangle_A|1\rangle_Q. Beachten Sie, dass jedes Ergebnis unterschiedliche Auswirkungen auf Bobs Qubit hat. Wenn Alice beispielsweise feststellt, dass sich ihre Qubits im Zustand ∣0⟩A∣0⟩Q|0\rangle_A|0\rangle_Q befinden, hat dies dazu geführt, dass der gesamte 3-Qubit-Quantenzustand in den Zustand (α0∣0⟩B+α1∣1⟩B)∣0⟩A∣0⟩Q(\alpha_0|0\rangle_B+\alpha_1|1\rangle_B)|0\rangle_A|0\rangle_Q kollabiert ist. Andere Messergebnisse für Alice führen zu unterschiedlichen Zuständen für Bob. Diese sind in der folgenden Tabelle zusammengefasst.

Alice Ergebnis
Bobs Zustand
Anweisung an Bob
Ergebnis
∣0⟩A∣0⟩Q \vert 0\rangle_A \vert 0\rangle_Qα0∣0⟩B+α1∣1⟩B\alpha_0\vert 0\rangle_B+\alpha_1\vert 1\rangle_BKeineα0∣0⟩B+α1∣1⟩B\alpha_0\vert 0\rangle_B+\alpha_1\vert 1\rangle_B
∣0⟩A∣1⟩Q \vert 0\rangle_A \vert 1\rangle_Qα0∣0⟩B−α1∣1⟩B\alpha_0\vert 0\rangle_B-\alpha_1\vert 1\rangle_BZZα0∣0⟩B+α1∣1⟩B\alpha_0\vert 0\rangle_B+\alpha_1\vert 1\rangle_B
∣1⟩A∣0⟩Q \vert 1\rangle_A \vert 0\rangle_Qα1∣0⟩B+α0∣1⟩B\alpha_1\vert 0\rangle_B+\alpha_0\vert 1\rangle_BXXα0∣0⟩B+α1∣1⟩B\alpha_0\vert 0\rangle_B+\alpha_1\vert 1\rangle_B
∣1⟩A∣1⟩Q \vert 1\rangle_A \vert 1\rangle_Q−α1∣0⟩B+α0∣1⟩B-\alpha_1\vert 0\rangle_B+\alpha_0\vert 1\rangle_BXX dann ZZα0∣0⟩B+α1∣1⟩B\alpha_0\vert 0\rangle_B+\alpha_1\vert 1\rangle_B

Bei allen möglichen Messergebnissen auf Alices Q-Bits bleibt Bobs Q-Bit in einem Zustand, der dem ursprünglichen geheimen Zustand von Q nur vage ähnelt. In dem Fall, in dem Alice ∣0⟩C∣0⟩A|0\rangle_C|0\rangle_A misst (die erste Zeile der Tabelle), bleibt Bobs Qubit in genau dem geheimen Zustand! In den anderen Fällen ist etwas mit dem Staat nicht in Ordnung. Die Koeffizienten ( α\alpha 's) sind vertauscht, oder es gibt ein "-"-Zeichen, wo ein "+"-Zeichen sein sollte, oder beides. Um Bobs Qubit so zu verändern, dass es genau dem geheimen Zustand entspricht, muss Alice Bob anrufen (mit einem Mittel der klassischen Kommunikation) und ihm sagen, dass er zusätzliche Operationen an seinem Qubit durchführen soll, wie in der Tabelle beschrieben. In der dritten Zeile sind beispielsweise die Koeffizienten vertauscht. Wenn Alice Bob anruft und ihm sagt, er solle ein XX -Gatter auf sein Qubit anwenden, verwandelt sich ein ∣0⟩|0\rangle in ein ∣1⟩|1\rangle und umgekehrt, und der geheime Zustand wird sichtbar.

Nun sollte klar sein, warum wir mit diesem Aufbau keine Informationen schneller als Licht übertragen können. Vielleicht haben wir Glück und messen „ ∣0⟩A∣0⟩Q|0\rangle_A|0\rangle_Q “, was bedeutet, dass Bob genau diesen geheimen Zustand hat – und zwar sofort. Aber Bob weiß das erst, wenn wir ihn anrufen und ihm sagen: „Wir haben ‚ ∣0⟩A∣0⟩Q|0\rangle_A|0\rangle_Q ‘ gemessen, du musst also nichts tun.“

In dem Gedankenexperiment werden die Qubits oft physisch getrennt und an einen neuen Ort gebracht. IBM® quantencomputer verwenden Festkörper-Qubits auf einem Chip, die nicht getrennt werden können. Anstatt also Alice und Bob an verschiedene Orte zu versetzen, werden wir die Informationen auf dem Chip selbst trennen, indem wir sogenannte "Swap Gates" verwenden, um die Informationen von einem Qubit zum anderen zu verschieben.


Experiment 1: Grundlegende Teleportation

IBM Quantum empfiehlt, Probleme der Quanteninformatik mit Hilfe eines Rahmens zu lösen, den wir "Qiskit-Muster" nennen. Sie besteht aus den folgenden Schritten.

  • Schritt 1: Übertragen Sie Ihr Problem auf einen Quantenkreis
  • Schritt 2: Optimieren Sie Ihre Schaltung für den Betrieb auf echter Quantenhardware
  • Schritt 3: Führen Sie Ihren Job auf den Quantencomputern von IBM unter Verwendung der Primitive von IBM Quantum aus
  • Schritt 4: Nachbearbeitung der Ergebnisse

Schritt 1: Ordnen Sie Ihr Problem einem Quantenschaltkreis zu

Alle Berechnungen, die wir oben angestellt haben, dienten der Beschreibung von Schritt 1. Wir werden es jetzt umsetzen, indem wir unseren Quantenschaltkreis mit Qiskit bauen! Wir beginnen mit der Erstellung eines Quantenschaltkreises mit drei Qubits und der Verschränkung der beiden Qubits von Alice und Bob. Wir nehmen an, dass dies die Qubits 1 und 2 sind, und wir reservieren das Qubit 0 für den geheimen Zustand.

# 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:

Output of the previous code cell

Das ist alles, was wir tun müssen, damit Alices Zustand zu Bob teleportiert wird. Man sollte jedoch bedenken, dass wir bei der Messung eines Quantenzustands α0∣0⟩+α1∣1⟩\alpha_0 |0\rangle+\alpha_1|1\rangle entweder ∣0⟩|0\rangle oder ∣1⟩|1\rangle erhalten. Am Ende hat Bob also definitiv Alices geheimen Zustand, aber wir können dies nicht ohne Weiteres durch eine Messung überprüfen. Damit eine Messung uns zeigt, dass wir das richtig gemacht haben, müssen wir einen kleinen Trick anwenden. Wir hatten einen Operator mit der Bezeichnung „U“ für „unitar“, den wir zur Vorbereitung von Alices geheimem Zustand verwendet haben. Wir können die Inverse von U am Ende unserer Schaltung anwenden. Wenn man Alices Zustand ∣0⟩|0\rangle auf α0∣0⟩+α1∣1⟩\alpha_0 |0\rangle+\alpha_1|1\rangle abbildet, dann bildet die Umkehrung von U Bobs Zustand α0∣0⟩+α1∣1⟩\alpha_0 |0\rangle+\alpha_1|1\rangle wieder auf ∣0⟩|0\rangle ab. Dieser letzte Schritt wäre also nicht unbedingt erforderlich, wenn das Ziel lediglich darin bestünde, Quanteninformation zu übertragen. Das geschieht nur, damit wir uns selbst überprüfen können.

# 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:

Output of the previous code cell

Wenn wir also alles richtig gemacht haben, sollte unsere Messung an Bobs Qubit einen „ ∣0⟩|0\rangle “-Zustand ergeben. Natürlich sind diese Messungen probabilistisch. Wenn also auch nur eine geringe Wahrscheinlichkeit besteht, dass sich Bobs Qubit im Zustand ∣1⟩|1\rangle befindet, könnte eine einzige Messung zu ∣1⟩|1\rangle führen. Wir würden also wirklich viele Messungen durchführen wollen, um sicherzugehen, dass die Wahrscheinlichkeit für ∣0⟩|0\rangle recht hoch ist.

Schritt 2: Optimierung des Problems für die Quantenausführung

In diesem Schritt werden die Operationen, die wir durchführen wollen, in Bezug auf die Funktionalität eines bestimmten Quantencomputers ausgedrückt. Außerdem wird unser Problem auf den Aufbau des Quantencomputers übertragen.

Wir beginnen mit dem Laden mehrerer Pakete, die für die Kommunikation mit IBM Quantencomputern erforderlich sind. Wir müssen auch ein Backend auswählen, auf dem die Anwendung laufen soll. Wir können entweder das am wenigsten ausgelastete Backend wählen oder ein bestimmtes Backend auswählen, dessen Eigenschaften wir kennen.

Unten finden Sie einen Code, mit dem Sie Ihre Anmeldedaten bei der ersten Verwendung speichern können. Achten Sie darauf, diese Informationen aus dem Notebook zu löschen, nachdem Sie es in Ihrer Umgebung gespeichert haben, damit Ihre Anmeldedaten nicht versehentlich weitergegeben werden, wenn Sie das Notebook freigeben. Weitere Anleitungen finden Sie unter Einrichten Ihres IBM Cloud Kontos und Initialisieren des Dienstes in einer nicht vertrauenswürdigen Umgebung.

# Load IBM Quantum Compute Service
from qiskit_ibm_runtime import QiskitRuntimeService

# Load IBM Quantum Compute 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)

Output:

ibm_sherbrooke

Wir aktivieren ausdrücklich die Logik bei Messungen.

from qiskit.circuit import IfElseOp

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

Jetzt müssen wir den Quantenkreislauf "transpilieren". Dies umfasst viele Teilschritte und ist ein faszinierendes Thema. Nur um ein Beispiel für einen Teilschritt zu geben: Nicht alle Quantencomputer können alle logischen Gatter in Qiskit direkt implementieren. Wir müssen die Gatter unserer Schaltung in Form von Gattern schreiben, die der Quantencomputer implementieren kann. Diesen und andere Prozesse können wir mit einem voreingestellten Passmanager durchführen. Die Einstellung optimization = 3 (die höchste Optimierungsstufe) stellt sicher, dass die Abbildung unseres abstrakten Quantenschaltkreises auf die an den Quantencomputer gegebenen Anweisungen so effizient ist, wie es unsere Vorverarbeitung zulässt.

# 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)

Ein „Sampler“ ist eine Primitive, die dazu dient, mögliche Zustände, die sich aus einem Quantenschaltkreis ergeben, zu untersuchen und statistische Daten darüber zu sammeln, welche Zustände mit welcher Wahrscheinlichkeit gemessen werden könnten. Hier importieren wir den „ IBM Quantum “-Sampler:

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

sampler = Sampler(mode=backend)

Nicht alle Berechnungen auf einem Quantencomputer lassen sich auf klassischen Computern vernünftig simulieren. Diese einfache Teleportation kann durchaus sein, aber es ist überhaupt nicht überraschend, dass wir Informationen klassischerweise an dem einen oder anderen Ort speichern können. Wir empfehlen dringend, diese Berechnungen mit einem echten IBM Quantencomputer durchzuführen. Falls Sie jedoch Ihr monatliches Freikontingent ausgeschöpft haben oder wenn Sie etwas im Unterricht erledigen müssen und nicht in der Warteschlange warten können, können Sie dieses Modul mit einem Simulator absolvieren. Führen Sie dazu einfach die unten stehende Zelle aus und entfernen Sie die entsprechenden Zeilen in den "Ausführen"-Schritten.

# 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)

Schritt 3: Ausführen

Verwenden Sie den Sampler, um Ihren Auftrag auszuführen, mit dem Stromkreis als Argument.

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

Schritt 4: Nachbearbeitung und Analyse

Stellen wir die Ergebnisse dar und interpretieren sie.

# 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:

Output of the previous code cell

Überprüfen Sie Ihr Verständnis

Welche der oben genannten Zustände weisen auf eine erfolgreiche Teleportation hin, und woran lässt sich das erkennen?

  • Die Zustände ∣000⟩|000\rangle, ∣001⟩|001\rangle, ∣010⟩|010\rangle, ∣011⟩|011\rangle stehen alle im Einklang mit einer erfolgreichen Teleportation. Das liegt daran, dass wir ein Gatter hinzugefügt haben, um die anfängliche Vorbereitung des geheimen Zustands rückgängig zu machen. Wenn der geheime Zustand erfolgreich auf Bobs Qubit teleportiert wurde, sollte dieses zusätzliche Gatter Bobs Qubit wieder in den Zustand „ ∣0⟩|0\rangle “ versetzen. Jeder der oben genannten Zustände, bei dem sich Bobs Qubit (Qubit 0, das ebenfalls auf die 0. Komponente des klassischen Registers gemessen wird und somit die höchste bzw. ganz rechts liegende Komponente darstellt) im Zustand „ ∣0⟩|0\rangle “ befindet, deutet auf einen Erfolg hin.

Diese Grafik zeigt alle Messergebnisse für die drei Qubits über 5.000 Versuche oder "Schüsse". Wir haben bereits darauf hingewiesen, dass Alice alle möglichen Zustände der Qubits A und Q mit gleicher Wahrscheinlichkeit messen würde. Wir haben die Q-Bits 0-2 in der Schaltung in dieser Reihenfolge Q, A und B zugewiesen. In Little-Endian-Notation ist Bobs Qubit das am weitesten links stehende/unterste. Die vier Balken auf der linken Seite entsprechen also Bobs Qubit ∣0⟩|0\rangle und den beiden anderen Qubits, die sich mit ungefähr gleicher Wahrscheinlichkeit in allen möglichen Kombinationen befinden. Man beachte, dass fast alle (normalerweise ~95%) der Messungen Bobs Qubit im Zustand ∣0⟩|0\rangle ergeben, was bedeutet, dass unser Aufbau erfolgreich war! Es gibt eine Handvoll Schüsse (~5%), die Bobs Qubit in den Zustand ∣1⟩|1\rangle versetzt haben. Das sollte logischerweise nicht möglich sein. Alle modernen Quantencomputer leiden jedoch in viel stärkerem Maße unter Rauschen und Fehlern als klassische Computer. Und die Quantenfehlerkorrektur ist noch ein junges Gebiet.


Experiment 2: Teleportation über einen Prozessor hinweg

Das Interessanteste an der Quantenteleportation ist wohl, dass ein Quantenzustand sofort über große Entfernungen teleportiert werden kann (obwohl die klassische Kommunikation von Extra-Gates nicht sofort erfolgt). Wie bereits erwähnt, können wir die Qubits nicht aus dem Prozessor herauslösen und sie verschieben. Aber wir können die Information von einem Qubit zum anderen verschieben, bis sich die an der Teleportation beteiligten Qubits auf gegenüberliegenden Seiten des Prozessors befinden. Wir wiederholen die oben beschriebenen Schritte, bauen aber eine größere Schaltung mit genügend Qubits, um den Prozessor zu überbrücken.

Schritt 1: Ordnen Sie Ihr Problem einem Quantenschaltkreis zu

Dieses Mal ändern sich die Qubits, die Alice und Bob entsprechen. Wir werden also nicht ein einzelnes Qubit "A" und ein anderes "B" nennen. Vielmehr werden wir die Qubits nummerieren und Variablen verwenden, um die aktuelle Position der Informationen auf den Qubits von Alice und Bob darzustellen. Alle anderen Schritte mit Ausnahme der Swap-Gates sind wie zuvor beschrieben.

# 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:

Output of the previous code cell

Im Schaltplan können Sie sehen, dass die logischen Schritte die gleichen sind. Der einzige Unterschied besteht darin, dass wir die Tauschgatter verwendet haben, um den Zustand von Alices Q-Bit von Q-Bit 6 ( A5A_5 ) auf Q-Bit 1 ( A0A_0 ) zu bringen, direkt neben Q. Und wir haben Swap-Gates verwendet, um Bobs Anfangszustand von Q-Bit 7 ( B0B_0 ) auf Q-Bit 12 ( B5B_5 ) zu bringen. Man beachte, dass der Zustand von Q-Bit 12 nicht einmal mit dem geheimen Zustand von Q in Verbindung steht, bis Messungen an den entfernten Q-Bits 0 und 1 durchgeführt werden, und der Zustand von Q-Bit 12 ist nicht gleich dem geheimen Zustand, bis die bedingten XX und ZZ Gatter angewendet werden.

Schritt 2: Optimieren Sie Ihre Schaltung

Wenn wir den Pass-Manager zum Umsetzen und Optimieren unserer Schaltungen verwenden, ist es in der Regel sinnvoll, optimization_level = 3 einzustellen, denn wir wollen, dass unsere Schaltungen so effizient wie möglich sind. In diesem Fall gibt es für uns keinen rechnerischen Grund, Zustände von den Qubits 6 und 7 auf die Qubits 1 und 12 zu übertragen. Das haben wir nur gemacht, um die Teleportation über eine bestimmte Entfernung zu demonstrieren. Wenn wir den Pass-Manager bitten, unsere Schaltung zu optimieren, wird er erkennen, dass es keinen logischen Grund für diese Tauschgatter gibt, und er wird sie entfernen und die Gatteroperationen auf benachbarten Qubits durchführen. Für diesen speziellen Fall verwenden wir also 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())

Output:

105

Mit der Funktion plot_circuit_layout können wir visualisieren, wo sich diese Qubits auf dem Quantenprozessor befinden.

Schritt 3: Ausführen

Wie bisher empfehlen wir den Betrieb auf echten IBM Quantencomputern. Wenn Ihre monatliche freie Nutzung erreicht ist, können Sie die Simulatorzellen deaktivieren, um sie auf einem Simulator auszuführen.

# 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:

Output of the previous code cell

Schritt 4: Klassische Nachbearbeitung

Auch hier sehen wir, dass die Wahrscheinlichkeiten für die möglichen Ergebnisse für Alices Qubits ziemlich einheitlich sind. Es besteht eine starke Präferenz dafür, Bobs Qubit in ∣0⟩|0\rangle zu finden, nachdem der geheime Code invertiert wurde, d.h. es besteht eine hohe Wahrscheinlichkeit, dass wir den geheimen Zustand korrekt über den Prozessor von Q zu Bob teleportiert haben (Qubits 0 bis 12). Wir stellen jedoch fest, dass für Bob nun eine höhere Wahrscheinlichkeit besteht, dass er nicht gemessen wird: ∣0⟩|0\rangle. Dies ist eine wichtige Lektion in der Quanteninformatik: Je mehr Gatter man hat, insbesondere Multi-Qubit-Gatter wie Swap-Gatter, desto mehr Rauschen und Fehler werden auftreten.


Fragen

Lehrkräfte können Versionen dieser Hefte mit Antwortschlüsseln und Hinweisen zur Einordnung in gängige Lehrpläne anfordern, indem sie diese kurze Umfrage zur Verwendung der Hefte ausfüllen.

Kritische Konzepte

  • Qubits können verschränkt sein, d. h. die Messung eines Qubits beeinflusst oder bestimmt sogar den Zustand eines anderen Qubits.
  • Verschränkung unterscheidet sich von klassischen Korrelationen; so könnten sich beispielsweise die Qubits A und B in einer Überlagerung von Zuständen wie α0∣00⟩+α1∣11⟩\alpha_0|00\rangle+\alpha_1|11\rangle befinden. Der Zustand von A oder B könnte von Natur aus unbestimmt sein, und dennoch könnte garantiert werden, dass sich A und B im selben Zustand befinden.
  • Durch eine Kombination von Verschränkungen und Messungen können wir einen Zustand (der Informationen speichern kann) von einem Qubit auf ein anderes übertragen. Diese Übertragung kann sogar über große Entfernungen erfolgen, was als Quantenteleportation bezeichnet wird.
  • Die Quantenteleportation beruht auf Quantenmessungen, die probabilistisch sind. Daher kann eine klassische Kommunikation notwendig sein, um die teleportierten Zustände zu beeinflussen. Dadurch wird verhindert, dass bei der Quantenteleportation Informationen schneller als das Licht übertragen werden. Die Quantenteleportation verstößt nicht gegen die Relativitätstheorie oder die Kausalität.
  • Moderne Quantencomputer sind anfälliger für Rauschen und Fehler als klassische Computer. Rechnen Sie mit einem Fehler von einigen Prozent.
  • Je mehr Gatter man hintereinander schaltet (insbesondere 2-Qubit-Gatter), desto mehr Fehler und Rauschen sind zu erwarten.

Richtig/Falsch-Fragen

  1. T/F Die Quantenteleportation kann genutzt werden, um Informationen schneller als das Licht zu übertragen.
  2. T/F Moderne Erkenntnisse deuten darauf hin, dass sich der Zusammenbruch eines Quantenzustands schneller als das Licht ausbreitet.
  3. T/F In Qiskit sind die Qubits in Zuständen geordnet, wobei das Qubit mit der niedrigsten Nummer rechts steht, wie in ∣q3,q2,q1,q0⟩|q_3,q_2,q_1, q_0\rangle

MC-Fragen

  1. Die Qubits A und B sind verschränkt und dann durch eine große Entfernung dd getrennt. Qubit A wird gemessen. Welche Aussage über die Geschwindigkeit, mit der der Zustand von Qubit B beeinflusst wird, ist richtig?
  • a. Qubit B wird in den bisherigen Experimenten innerhalb der experimentellen Toleranz sofort beeinflusst.
  • b. Qubit B ist nach einer Zeit d/cd/c betroffen, d. h. der Quantenzustand "kollabiert" ungefähr mit Lichtgeschwindigkeit, innerhalb der experimentellen Toleranz.
  • c. Qubit B ist erst betroffen, nachdem die klassische Kommunikation stattgefunden hat, was bedeutet, dass sie in einer längeren Zeit als d/cd/c stattfindet.
  • d. Keines der oben genannten.
  1. Man beachte, dass die Messwahrscheinlichkeit mit den Amplituden in Quantenzuständen zusammenhängt. Befindet sich ein Qubit beispielsweise anfänglich im Zustand α0∣0⟩+α1∣1⟩\alpha_0|0\rangle+\alpha_1 |1\rangle, beträgt die Wahrscheinlichkeit, den Zustand ∣0⟩|0\rangle zu messen, ∣α0∣2|\alpha_0|^2. Aufgrund der endlichen Anzahl von Messungen werden nicht alle Messreihen genau diesen Wahrscheinlichkeiten entsprechen (genauso wie beim Werfen einer Münze zweimal hintereinander „Kopf“ fallen kann). Welchem der folgenden Quantenzustände könnte das untenstehende Messhistogramm entsprechen? Wählen Sie die beste Option aus.
verschränkte_teleportation_fig
  • a. ∣0⟩|0\rangle
  • b. 12(∣0⟩−∣1⟩)\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. 45∣0⟩+35∣1⟩\frac{4}{5}|0\rangle+\frac{3}{5}|1\rangle
  • e. 35∣0⟩+45∣1⟩\frac{3}{5}|0\rangle+\frac{4}{5}|1\rangle
  1. Welche(r) der folgenden Zustände zeigt/zeigen die Qubits A und B verschränkt? Wählen Sie alle Optionen aus, die zutreffen.
  • a. 12(∣0⟩B∣0⟩A+∣1⟩B∣1⟩A)\frac{1}{\sqrt{2}}\left(|0\rangle_B|0\rangle_A+|1\rangle_B|1\rangle_A\right)
  • b. 45∣0⟩B∣0⟩A+35∣1⟩B∣1⟩A\frac{4}{5}|0\rangle_B|0\rangle_A+\frac{3}{5}|1\rangle_B|1\rangle_A
  • c. 12(∣0⟩B∣1⟩A−∣1⟩B∣0⟩A)\frac{1}{\sqrt{2}}\left(|0\rangle_B|1\rangle_A-|1\rangle_B|0\rangle_A\right)
  • d. 12(∣0⟩B∣0⟩A+∣1⟩B∣0⟩A)\frac{1}{\sqrt{2}}\left(|0\rangle_B|0\rangle_A+|1\rangle_B|0\rangle_A\right)
  • e. ∣0⟩B∣0⟩A|0\rangle_B|0\rangle_A
  1. In diesem Modul haben wir einen verschränkten Zustand vorbereitet: 12(∣0⟩B∣0⟩A+∣1⟩B∣1⟩A)\frac{1}{\sqrt{2}}\left(|0\rangle_B|0\rangle_A+|1\rangle_B|1\rangle_A\right). Es gibt jedoch viele andere verschränkte Zustände, die man für ein ähnliches Protokoll verwenden könnte. Welcher der folgenden Zustände könnte ein 2-Qubit-Messhistogramm wie das folgende ergeben? Wählen Sie die beste Antwort aus.
entangled_teleportation_fig_0110
  • a. 12(∣0⟩B∣0⟩A+∣1⟩B∣1⟩A)\frac{1}{\sqrt{2}}\left(|0\rangle_B|0\rangle_A+|1\rangle_B|1\rangle_A\right)
  • b. 45∣0⟩B∣0⟩A+35∣1⟩B∣1⟩A\frac{4}{5}|0\rangle_B|0\rangle_A+\frac{3}{5}|1\rangle_B|1\rangle_A
  • c. 12(∣0⟩B∣1⟩A−∣1⟩B∣0⟩A)\frac{1}{\sqrt{2}}\left(|0\rangle_B|1\rangle_A-|1\rangle_B|0\rangle_A\right)
  • d. 45∣0⟩B∣1⟩A+35∣1⟩B∣0⟩A\frac{4}{5}|0\rangle_B|1\rangle_A+\frac{3}{5}|1\rangle_B|0\rangle_A
  • e. ∣0⟩B∣0⟩A|0\rangle_B|0\rangle_A

DISKUSSIONSFRAGEN

  1. Beschreiben Sie Ihrem Partner/Ihrer Gruppe das Quanten-Teleportationsprotokoll, von Anfang bis Ende. Fragen Sie, ob sie etwas hinzufügen möchten oder Fragen haben.

  2. Gibt es irgendetwas Einzigartiges an dem verschränkten Ausgangszustand zwischen Alice und Bob: 12(∣0⟩B∣0⟩A+∣1⟩B∣1⟩A)?\frac{1}{\sqrt{2}}\left(|0\rangle_B|0\rangle_A+|1\rangle_B|1\rangle_A\right)? Wenn ja, was ist das Besondere an ihm? Wenn nicht, welche anderen verschränkten Zustände hätten wir verwenden können?

War diese Seite hilfreich?
Melden Sie auf GitHub einen Fehler, einen Tippfehler oder fordern Sie Inhalte an.