• 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. Kraftverkehr Nagel SE & Co. KG, Versmold
  2. über duerenhoff GmbH, Stuttgart, Frankfurt, Düsseldorf, Hamburg

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.

Golem Akademie
  1. Einführung in die Programmierung mit Rust
    19.-22 April 2021, online
  2. C++ 20: Concepts - Ranges - Coroutinen - Module
    19.-23. April 2021, online
Weitere IT-Trainings

  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. (u. a. Ryzen 5 5600X 358,03€)

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
       


Knights of the Old Republic (2003) - Golem retro_

Diverse Auszeichnungen zum Spiel des Jahres, hohe Verkaufszahlen und Begeisterung nicht nur unter reinen Star-Wars-Anhängern - wir spielen Kotor im Golem retro_.

Knights of the Old Republic (2003) - Golem retro_ Video aufrufen
Programm für IT-Jobeinstieg: Hoffen auf den Klebeeffekt
Programm für IT-Jobeinstieg
Hoffen auf den Klebeeffekt

Aktuell ist der Jobeinstieg für junge Ingenieure und Informatiker schwer. Um ihnen zu helfen, hat das Land Baden-Württemberg eine interessante Idee: Es macht sich selbst zur Zeitarbeitsfirma.
Ein Bericht von Peter Ilg

  1. Arbeitszeit Das Sechs-Stunden-Experiment bei Sipgate
  2. Neuorientierung im IT-Job Endlich mal machen!
  3. IT-Unternehmen Die richtige Software für ein Projekt finden

Weclapp-CTO Ertan Özdil: Wir dürfen nicht in Schönheit und Perfektion untergehen!
Weclapp-CTO Ertan Özdil
"Wir dürfen nicht in Schönheit und Perfektion untergehen!"

Der CTO von Weclapp träumt von smarter Software, die menschliches Eingreifen in der nächsten ERP-Generation reduziert. Deutschen Perfektionismus hält Ertan Özdil aber für gefährlich.
Ein Interview von Maja Hoock


    Fiat 500 als E-Auto im Test: Kleinstwagen mit großem Potenzial
    Fiat 500 als E-Auto im Test
    Kleinstwagen mit großem Potenzial

    Fiat hat einen neuen 500er entwickelt. Der Kleine fährt elektrisch - und zwar richtig gut.
    Ein Test von Peter Ilg

    1. Vierradlenkung Elektrischer GMC Hummer SUV fährt im Krabbengang seitwärts
    2. MG Cyberster MG B Roadster mit Lasergürtel und Union Jack
    3. Elektroauto E-Auto-Prämie übersteigt in 2021 schon Vorjahressumme

      •  /