Abo
  • 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. Bundesanstalt für Straßenwesen, Bergisch Gladbach
  2. DEKRA SE, Stuttgart

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.

 Simulatoren: Quantencomputer werden heute schon programmiert
  1.  
  2. 1
  3. 2


Anzeige
Spiele-Angebote
  1. 32,95€
  2. 32,49€
  3. 4,99€

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
       


Kingdom Hearts 3 - Test

Das Actionspiel Kingdom Hearts 3 von Square Enix bietet schöne und stimmige Abenteuer in vielen unterschiedlichen Welten von Disney.

Kingdom Hearts 3 - Test Video aufrufen
Sechs Airpods-Konkurrenten im Test: Apple hat nicht die Längsten
Sechs Airpods-Konkurrenten im Test
Apple hat nicht die Längsten

Nach dem Klangsieger und dem Bedienungssieger haben wir im dritten Test den kabellosen Bluetooth-Hörstöpsel mit der weitaus besten Akkulaufzeit gefunden. Etwas war aber wieder nicht dabei: die perfekten True Wireless In-Ears.
Ein Test von Ingo Pakalski


    Galaxy S10+ im Test: Top und teuer
    Galaxy S10+ im Test
    Top und teuer

    Mit dem Galaxy S10+ bringt Samsung erstmals eine Dreifachkamera in eines seiner Top-Smartphones. Die Entwicklung, die mit dem Galaxy A7 begann, hat sich gelohnt: Das Galaxy S10+ macht sehr gute Bilder, beim Preis müssen wir aber schlucken.
    Ein Test von Tobias Költzsch

    1. Samsung Gesichtsentsperrung des Galaxy S10 lässt sich austricksen
    2. Samsung Galaxy S10 Europäer erhalten weiter langsameren Prozessor
    3. Galaxy S10 im Hands on Samsung bringt vier neue Galaxy-S10-Modelle

    Trüberbrook im Test: Provinzielles Abenteuer
    Trüberbrook im Test
    Provinzielles Abenteuer

    Neuartiges Produktionsverfahren, prominente Sprecher: Das bereits vor seiner Veröffentlichung für den Deutschen Computerspielpreis nominierte Adventure Trüberbrook bietet trotz solcher Auffälligkeiten nur ein allzu braves Abenteuer in der deutschen Provinz der 60er Jahre.
    Von Peter Steinlechner

    1. Quellcode Al Lowe verkauft Disketten mit Larry 1 auf Ebay
    2. Wet Dreams Don't Dry im Test Leisure Suit Larry im Land der Hipster
    3. Life is Strange 2 im Test Interaktiver Road-Movie-Mystery-Thriller

      •  /