• IT-Karriere:
  • Services:

Ein Programmierbeispiel mit Quipper

Die erste Funktion, plus_minus, erzeugt zunächst mit qinit aus einem gewöhnlichen Bit ein Qubit, das den gleichen Messwert wie das Bit hat, also entweder 0 oder 1. Die Funktion soll aber als Ausgabewert ein Qubit liefern, das mit 50 Prozent Wahrscheinlichkeit mit 0 oder 1 gemessen wird. Es gibt aber zwei unterschiedliche Zustände eines Qubits, die diese Eigenschaft haben: der Zustand Plus und der Zustand Minus. Dazu muss der Quantencomputer ein Hadamard-Gatter auf das Qubit anwenden.

Stellenmarkt
  1. Interhyp Gruppe, München
  2. IT-Systemhaus der Bundesagentur für Arbeit, Fürth

Wenn das Hadamard-Gatter auf ein Qubit im Zustand 0 angewendet wird, nimmt es den Zustand Minus ein, sonst den Zustand Plus. Eine zweite Anwendung des Hadamard-Gatters würde das Qubit danach wieder in seinen ursprünglichen Zustand zurückversetzen. Da der Code von Quipper an Haskall angelehnt ist, beginnt die Implementierung der Funktion hier mit "do".

  1. plus_minus :: Bool -> Circ Qubit
  2. plus_minus b = do
  3. q <- qinit b
  4. r <- hadamard q
  5. return r

Die Share-Funktion erzeugt ein Qubit und verschränkt es durch ein kontrolliertes (quanten-)NOT-Gatter mit einem anderen Qubit. Die Funktion benötigt also ein Qubit als Eingabewert, das verschränkt werden soll, und gibt die beiden verschränkten Qubits als Ausgabewert zurück.

  1. share :: Qubit -> Circ (Qubit, Qubit)
  2. share a = do
  3. b <- qinit False
  4. b <- qnot b 'controlled' a
  5. return (a,b)

Mit beiden Funktionen zusammen kann der Quantencomputer angewiesen werden, ein Paar verschränkter Qubits zu erzeugen. Ganz konkret wird hier der Bellzustand 00 erzeugt. Das ist ein Paar verschränkter Qubits, die beide den Zustand Minus haben, aber durch Anwendung eines Hadamard-Gatters wieder in den Zustand 0 versetzt werden können. Sie dienen in der Teleportation nur als Vermittler.

  1. bell00 :: Circ (Qubit, Qubit)
  2. bell00 = do
  3. a <- plus_minus False
  4. (a,b) <- share a
  5. return (a,b)

Die eigentliche Teleportation findet in diesen sechs Zeilen statt. Alice will das Qubit q teleportieren. Dazu wird mit bell00 ein Paar verschränkter Qubits (a,b) erzeugt. Alice benutzt das erste Qubit, a, und ihr eigenes Qubit, q, um ein Paar herkömmlicher Bits (x,y) zu erzeugen. Das geschieht durch eine Funktion "alice", die hier noch nicht definiert ist. Die Messwerte dieser beiden Bits sind vollkommen zufällig. Die Messwerte werden aber von Bob benötigt.

Denn Bob bekommt nur das Qubit b zugeschickt, das noch keine Informationen trägt. Aber mit Hilfe der beiden Bits (x,y) kann Bob das Qubit b so manipulieren, dass es den Wert annimmt, den das Qubit q anfangs hatte. Das alles passiert in der Funktion "bob", die auch noch zu definieren ist.

  1. teleport :: Qubit -> Circ Qubit
  2. teleport q = do
  3. (a,b) <- bell00
  4. (x,y) <- alice q a
  5. b <- bob b (x,y)
  6. return b

Die Funktion alice benötigt das Qubit q, das teleportiert werden soll, und eines der beiden verschränkten Qubits a und b. Auf das Qubit a wird ein kontrolliertes NOT Gatter angewendet, mit dem Zustand q als Kontrollvariable. Sollte q den Zustand 1 haben, wird der Zustand von a umgekehrt, sonst nicht. Anschließend wird ein Hadamard-Gatter auf q angewendet. Wie schon bei der Plus_minus-Funktion führt das bei der anschließenden Messung dazu, dass q mit 50 Prozent Wahrscheinlichkeit mit 1 oder 0 gemessen wird.

Die Funktion alice misst anschließend q und a. Dabei werden die Zustände dieser beiden Qubits zerstört und die erste Hälfte der Teleportation ist vollzogen. Was bleibt, sind zwei Bits als Messwerte, die Rückgabewerte der Funktion. Diese beiden Bits werden anschließend an Bob weitergegeben, der damit das Qubit q wieder herstellen kann.

  1. alice :: Qubit -> Qubit -> Circ (Bit,Bit)
  2. alice q a = do
  3. a <- qnot a 'controlled' q
  4. q <- hadamard q
  5. (x,y) <- measure (q,a)
  6. return (x,y)

Die Messergebnisse von q und a lassen sich nicht vorhersagen. Aber beide Qubits sind direkt oder indirekt mit Bobs Qubit b verschränkt. Die Messung des Zustands von q und a liefert alle Informationen, die Bob braucht, um aus b wieder den Zustand q zu erzeugen, vorausgesetzt er hat das Qubit b erhalten und es wurde nicht verändert. Das ist der einzige Weg, den ursprünglichen Zustand des Qubits q wieder zu erzeugen, denn der wurde bei der Messung der Qubits zerstört.

Die Messergebnisse y und x sagen Bob, was er mit dem Qubit b tun muss, um daraus den Zustand des zerstörten Qubits q zu erzeugen. Falls y eine 1 ist, muss er ein X Gate anwenden, ein Phasenschieber mit einem bestimmten Winkel, der den Zustand des Qubits um die X-Achse rotiert. Falls x eine 1 ist, wird ein Z Gate angewendet, das ganz ähnlich funktioniert. Die beiden Bits werden jetzt nicht mehr benötigt und b ist in dem Zustand, den ursprünglich das von Alice teleportierte Qubit q hatte.

  1. bob :: Qubit -> (Bit,Bit) -> Circ Qubit
  2. bob b (x,y) = do
  3. b <- gate_X b 'controlled' y
  4. b <- gate_Z b 'controlled' x
  5. cdiscard (x,y)
  6. return b

Die Implementierung fortgeschrittenerer Algorithmen ist entsprechend komplexer. Sie wird mehr Funktionen erfordern, aber auch mehr Komfort durch vorhandene Bibliotheken bieten, in der die Teleportation eines Qubits von einer Speicherstelle zu einer anderen mit einem einzigen Befehl geschieht. Diese Grundlagen sollen schon jetzt gelegt werden, noch bevor die Technik tatsächlich Anwendungsbereit ist.

Wenn die Hardware existiert, sollen die ersten Programme schon längst mit Hilfe der Simulatoren entwickelt sein und in den Datenbanken auf ihre Ausführung warten. Und so wird die Programmierung von Quantencomputern heute schon zu einem realen Problem.

Bitte aktivieren Sie Javascript.
Oder nutzen Sie das Golem-pur-Angebot
und lesen Golem.de
  • ohne Werbung
  • mit ausgeschaltetem Javascript
  • mit RSS-Volltext-Feed
 Simulatoren: Quantencomputer werden heute schon programmiert
  1.  
  2. 1
  3. 2


Anzeige
Hardware-Angebote
  1. (reduzierte Überstände, Restposten & Co.)

jnv 08. Aug 2017

wtf. So eine blöde Einstellung...

divStar 08. Aug 2017

Ich würde dir gerne glauben, denn ich traue das allen genannten Akteuren absolut zu...

NitroX007 07. Aug 2017

@Tollversteher +1


Folgen Sie uns
       


IT-Freelancer: Der kürzeste Pfad zum nächsten Projekt
IT-Freelancer
Der kürzeste Pfad zum nächsten Projekt

Die Nachfrage nach IT-Freelancern ist groß - die Konkurrenz aber auch. Der nächste Auftrag kommt meist aus dem eigenen Netzwerk oder von Vermittlern. Doch wie findet man den passenden Mix?
Ein Bericht von Manuel Heckel

  1. Selbstständiger Sysadmin "Jetzt fehlen nur noch die Aufträge"

iPhone, iPad und Co.: Apple bringt iOS 14, iPadOS 14, TVOS 14 und WatchOS 7
iPhone, iPad und Co.
Apple bringt iOS 14, iPadOS 14, TVOS 14 und WatchOS 7

Auch ohne neue iPhones lässt es sich Apple nicht nehmen, seine neue iOS-Version 14 zu veröffentlichen. Auch andere Systeme erhalten Upgrades.

  1. Apple Pay EU will Apple zur Freigabe von NFC-Chip bringen
  2. Apple One Abos der verschiedenen Apple-Dienste im Paket
  3. Corona Apple hat eigenen Mund-Nasen-Schutz entwickelt

Prozessor: Wie arm ARM mit Nvidia dran ist
Prozessor
Wie arm ARM mit Nvidia dran ist

Von positiv bis hin zum Desaster reichen die Stimmen zum Deal: Was der Kauf von ARM durch Nvidia bedeuten könnte.
Eine Analyse von Marc Sauter

  1. Prozessoren Nvidia kauft ARM für 40 Milliarden US-Dollar
  2. Chipdesigner Nvidia bietet mehr als 40 Milliarden Dollar für ARM
  3. Softbank-Tochter Nvidia hat Interesse an ARM

    •  /