5.1.2 Bit-Orakel
Dieser Ansatz funktioniert nicht nur für die logische -Funktion, sondern für jede beliebige Funktion
die Bits als Eingabe erhält und ein einzelnes Bit ausgibt. Für jede solche Funktion können wir eine Operation auf Bits definieren:
für alle . Genau wie Gl. 5.3 ist diese Operation ihr eigenes Inverse, zweimaliges anwenden verändert den Zustand also nicht.
Es ist beruhigend, dass wir jede Funktion wie in Gl. 5.4 umkehrbar implementieren können. Zunächst einmal bedeutet das, dass jede Berechnung auf einem klassischen Computer so durchgeführt werden kann, dass die ursprüngliche Eingabe wiederhergestellt werden kann. Weiterhin können Berechnungen, die umkehrbar sind, auch auf Quantencomputern durchführen. Das bedeutet, dass Quantencomputer alles berechnen können was auch klassische Computer können! Außerdem können wir damit jede Funktion als Orakel auf einem Quantencomputer implementieren.
Lass uns einmal sehen, wie das funktioniert. Die Quantenversion der Operation aus Gl. 5.4 ist wie folgt definiert:
für alle . Gl. 5.5 bestimmt dabei, wie sich auf allen Basiszuständen von Qubits verhält. Wie immer können wir diese Definition durch Linearität auf auf beliebige Zustände auf Qubits erweitern. Da einfach nur die Basiszustände permutiert, kannst du wie in 4.4 zeigen, dass es eine gültige Quantenoperation darstellt.
Wir nennen die Quantenoperation aus Gl. 5.5 das Bit-Orakel für (wir könnten auch die Funktion aus Gl. 5.4 als klassisches Bit-Orakel bezeichnen, aber wir brauchen diesen Namen nicht). Die Bezeichnung ‘Orakel’ bedeutet einfach, dass sich das Anwenden dieser Operation so verhält, als würden wir ein allmächtiges Orakel bitten, uns den Wert der Funktion für jede beliebige Eingabe zu geben. Wir wissen nicht genau, wie das Orakel implementiert ist oder woher es die Antworten bekommt, wir werden nur zählen, wie viele Fragen wir an das Orakel stellen müssen, um eine gewisse Eigenschaft der Funktion herauszufinden. Viele interessante Algorithmische Probleme können so modelliert werden, wie wir im Rest der Quest sehen werden.
Das Konzept eines Orakels ist ein wenig wie das ‘Rate meine Zahl’-Spiel. Ein:e Freund:in von dir denkt sich eine Zahl aus und du fragst dann Fragen der Form “Ist deine Zahl x”? Darauf erhältst du dann entweder “Ja” oder “Nein” als Antwort. Mit anderen Worten stellt dein:e Freund:in eine Funktion dar, die “Nein” auf allen Eingaben außer einer einzigen (der Zahl, die festgelegt wurde) ausgibt. Jede Frage die du stellst gibt dir mehr Informationen über die Zahl. Du könntest dir zum Beispiel gedanken darüber machen, wie viele Fragen du stellen musst, um die Zahl zu finden. Und was wäre, wenn du deine Fragen an ein Quantenorakel stellen könntest, anstelle an deine:n Freund:in? Könntest du die Lösung dann mit weniger Fragen finden? In dieser Woche wirst du mehrere interessante Beispiele kennenlernen, wo das tatsächlich der Fall ist!
Lass uns mal einige Beispiele für Bit-Orakel besprechen. Nehmen wir an, ist die AND-Funktion. Laut Gl. 5.1 können wir AND als Multiplikation modulo 2 interpretieren, da . Das entsprechende Bit-Orakel
ist nichts anderes als das Toffoli Gatter aus 4.4. Selbst für und die Funktion , die einfach ihre Eingabe ausgibt, erhalten wir ein interessantes Ergebnis: für alle gilt dann
Das entspricht einfach dem bekannten kontrolliertem-NOT-Gatter aus Gl. 3.64 in Abschnitt 3.2.4! Das Bit-Orakel bildet also mehrere interessante Quantenoperationen, die wir zuvor per Hand definiert hatten. In der folgenden Übung kannst du versuchen, alle anderen Ein-Bit-Orakel zu implementieren.
Übungsaufgabe 5.1 (Bit-Orakel für Ein-Bit-Funktionen).
Sei eine Funktion mit einem einzelnen Eingabe- und Ausgabe-Bit. Eine solche Funktion ist vollständig durch die Werte definiert. Das sind zwei Bits, also gibt es genau vier solcher Funktionen. Wir haben gerade besprochen, wie man die das Bit-Orakel für die Funktion implementiert. Kannst du die Bit-Orakel für die anderen drei Funktionen in Quirky implementieren?
Lösung.
Die anderen drei Funktionen sind sowie die zwei konstanten Funktionen und .- •
- •
- •