Funktionsaufruf und Oracle
Um die Berechnung einer Funktion als "Bauteil", der Quantenzustände
in Quantenzustände überführt, in einen Quantencomputer einzubauen,
müssen wir mehrere quantenmechanische Systeme betrachten, die aus
mehreren Qubits bestehen.
Für den einfachen Fall einer Funktion
benötigen wir ein 2-Qubit-System.
Für jede Funktion f : {0, 1} ® {0, 1}
definieren wir die Operation
Uf durch
Uf |m> |n>
= |m> |n + f(m)> |
wobei m und
n die Werte 0
und 1 annehmen können und das Plus-Zeichen "Addition modulo 2"
(also insbesondere 1 + 1 = 0) bedeutet.
Da der resultierende Zustand im zweiten Register vom
Ausgangszustand beider Register abhängt, handelt es sich hier
um einen Prozess, der, physikalisch gesprochen, eine
Wechselwirkung zwischen den beiden Registern (Qubits) darstellt.
Berechnen wir als Beispiel die Wirkung von Uf
für die konstante Funktion
Wir finden leicht
Uf |0>|0>
= |0>|1>
|
Uf |0>|1>
= |0>|0>
|
Uf |1>|0>
= |1>|1>
|
Uf |1>|1>
= |1>|0>
|
Der Zustand im ersten Register bleibt immer unverändert.
Haben wir es mit einer Superposition zu tun, so werden diese Formeln
linear kombiniert. Beispielsweise ist
Uf ( |0>|0>
+ |1>|0> )
= |0>|1>
+ |1>|1>
|
Die Wirkung der Transformation Uf
auf den Zustand
|0>|0>
+ |1>|0>
wollen wir in folgender interaktiver Form darstellen:
Anklicken der Checkbox schaltet diesen Bauteil ein. Im
vorliegenden Beispiel wird das zweite Register vor dem
Funktionsaufruf im Zustand
|0>, das erste Register in der Superposition
|0> + |1> sein. Nach der Anwendung des Funktionsaufrufs
ist
|y> =
|0>|1> +
|1>|1>, was auch als
|y> =
|0>|f(0)> +
|1>|f(1)>
|
geschrieben werden kann. (Das gilt für jede Funktion
f : {0, 1} ® {0, 1},
wie aus der obigen Definition von
Uf folgt).
Hier liegt also ein Zustand vor, in dem alle Paare
(m, f(m)),
d.h. alle möglichen Funktionswerte ("gleichzeitig")
enthalten sind!
Die Gesetze der Quantenphysik verbieten uns allerdings, sie alle mit Sicherheit
"abzulesen", sofern wir nur eine einzige Kopie des Systems in diesem Zustand
zur Verfügung haben (siehe Interpretation und Messung).
Der durch Uf
dargestellte Bauteil läßt sich für jede der vier Funktionen
f : {0, 1} ® {0, 1}
durch eine geeignete Hintereinanderschaltung von NOT-Gates
und kontrollierten NOT-Gates realisieren. Wir illustrieren
das in interaktiven Modellen anhand des Input-Zustands
|y> = |0>|0> + |1>|0>:
Funktionsaufrufe dieses Typs finden bei der Konzeption von
Quantencomputern in zweierlei Hinsicht Verwendung:
- Als Aufruf eines (bekannten) "Unterprogramms" zur Berechnung einer Funktion:
In diesem Fall dient der Bauteil einfach als "Abkürzung" für einen
Unter-Schaltplan, um dessen Details man sich nicht zu kümmern braucht.
- Als "Oracle": Das ist für grundsätzliche Überlegungen über
Quantencomputer besonders wichtig. Ein "Oracle" ist ein
Unterprogramm zur Berechnung einer Funktion, aber mit der zusätzlichen Spielregel,
dass es uns ohne Kommentar überreicht wird und wir zunächst
nicht wissen, welche Funktion es darstellt. Die einzige Möglichkeit,
darüber etwas herauszufinden, besteht darin, es "aufzurufen", d.h.
Zustände "hineinzuschicken", weiterzuverarbeiten und schließlich
Messungen zu machen.
Wie wir gesehen haben, ist es möglich, durch einen einzigen
Aufruf einen Quantenzustand zu erhalten, in dem Informationen über
alle Funktionswerte enthalten sind. So etwas gibt es in
"klassischen" Computern natürlich nicht.
Theoretische Nachbemerkung über
den Grund, warum wir zur Darstellung von Funktionen zwei Register
benötigt haben:
Die Operation Uf
ist eine unitäre Transformation, weil sie
eine (Orthonormal-)Basis in eine (Orthonormal-)Basis überführt (und daher
eine Quantenzustand in einen Quantenzustand).
Eine (Orthonormal-)Basis für das 2-Qubit-System ist durch
{|0>|0>,
|0>|1>,
|1>|0>,
|1>|1>}
|
gegeben.
Die Wirkung von Uf
besteht lediglich darin, diese Basiselemente zu permutieren.
Der vielleicht zunächst naheliegendere Ansatz, eine Funktion
als Operation
|0>
®
|f(0)>
|1>
®
|f(1)>
|
in einem einzigen Register darzustellen,
führt nicht immer auf eine unitäre Transformation.
Etwa für die konstante Funktion
f(0) = f(1) = 1
hieße das ja
Als Folge würde die Superposition
|0> - |1>
auf 0 abgebildet werden, und 0
(nicht zu verwechseln mit
|0>)
ist kein quantenmechanisch interpretierbarer Zustand.
Streben wir also eine Konstruktion an,
- die sich für alle Funktionen eignet,
- als Input jeden (normierten) Quantenzustand entgegennimmt und
- als Output immer einen (normierten) Quantenzustand liefert,
|
so muss unser Quantencomputer aus (zumindest) zwei Registern
bestehen.
All das lässt sich auf Funktionen zwischen beliebigen (endlichen)
Zahlenmengen verallgemeinern, wobei die Zahl der zu verwendenden Register
entsprechend groß gewählt werden muss.
|