Ist a² - b² dasselbe wie (a+b)*(a-b)?
Mathematisch gesehen ist die Antwort natürlich ja, denn sie sind gleich:
a² - b² = a*a-b*b = (a+b)*(a-b)
Wenn Sie jedoch Quantenarithmetik betreiben, ist es ratsam zu überlegen, ob die Berechnung von a² - b² oder die Berechnung von (a+b)*(a-b) besser ist, auch wenn das Ergebnis dasselbe ist.
Warum interessieren wir uns für Quantenarithmetik? Arithmetik und Logik sind fester Bestandteil einiger der nützlichsten Quantenalgorithmen, wie z. B. die Erstellung komplexer Orakel in einer Grover-Suche, die Einbettung klassischer Weisheit in einen VQE-Ansatz oder der Vergleich von Vermögenspreisen mit einer Benchmark bei der Berechnung von Optionspreisen mit Hilfe des Amplitudenschätzungsalgorithmus.
Um nützliche Algorithmen zu implementieren, ist es daher oft notwendig, arithmetische Funktionen zu implementieren.
Umsetzung von a² - b² und (a+b)(a-b)
Die Berechnung von a*a-b*b würde zwei Multiplikationen erfordern (a mit sich selbst multiplizieren und dann b mit sich selbst multiplizieren), gefolgt von der Subtraktion von b*b von a*a. Das könnte etwa so aussehen[1]:
Die Berechnung von (a+b)*(a-b) würde eine Addition, eine Subtraktion und dann eine Multiplikation erfordern. Nehmen wir an, wir bevorzugen diesen Ansatz. Aber auch hier könnten wir es mit einer anderen Anzahl von Ancilla-Qubits implementieren. Hier ist zum Beispiel eine Implementierung:
Und hier ist eine weitere Umsetzung:
Die Wahl der Anzahl der Ancillabits (oder, mit anderen Worten, die Gesamtzahl der Qubits, die die Schaltung verwendet) könnte sich auf die Tiefe der Schaltung auswirken. Je nachdem, was wir über die Hardware wissen - verfügbare Qubits, Genauigkeit usw. - könnten wir die eine der anderen vorziehen.
Es könnte zusätzliche systemweite Überlegungen geben: Die ersten beiden Implementierungen bewahren beispielsweise den Wert von a, damit er später in der Schaltung verwendet werden kann. Bei der dritten Implementierung bleibt der Wert von a nicht erhalten.
Schätzung der Ressourcen
Als Quanten-Software-Ingenieur, der einen Schaltkreis für diese Arithmetik entwickeln soll, würde ich gerne die Anzahl der Qubits und die Tiefe des Schaltkreises für jeden der vier Fälle abschätzen können:
- a² - b² mit weniger Ancilla-Bits
- a² - b² mit mehr Ancilla-Bits
- (a+b)*(a-b) mit weniger Ancilla-Bits
- (a+b)*(a-b) mit mehr Ancilla-Bits
Wenn ich keine Schätzung vornehme, verbringe ich vielleicht viel Zeit mit der Implementierung dieser bestimmten Funktion, nur um dann festzustellen, dass ich neu starten muss, weil ich die Grenzen der Hardware oder andere Ziele überschritten habe, die ich habe.
Glücklicherweise ist dies mit der Classiq-Plattform sehr einfach. Durch die Verwendung der Classiq-Modellierungssprache kann ich schnell zwischen den verschiedenen Optionen wechseln. Für die ersten beiden Versionen könnte ich zum Beispiel ein Modell mit dem folgenden Code erstellen:
Dadurch würden zwei völlig unterschiedliche Schaltkreise entstehen, die jeweils die Anforderungen erfüllen:
Zusammenfassung
Quantenarithmetik ist wichtig und nicht so einfach, wie es auf den ersten Blick scheint.
(a+b)*(a-b) scheint zwar einfach zu sein, aber was wäre, wenn man eine Schaltung bauen müsste, die folgende Funktionen erfüllt
Es wird schnell unmöglich, diese auf Gatterebene zu entwerfen, so dass eine fortschrittliche Plattform wie die von Classiq erforderlich ist.
Die Classiq-Plattform bietet eine effiziente Methode zum Entwurf eines Schaltkreises, der diese Arithmetik implementiert, sowie zur Abschätzung der erforderlichen Ressourcen.
[1] das '/'-Zeichen in jeder Zeile bedeutet, dass die a- und b-Register tiefer als ein Qubit sein können