Quantenspezifische Datentypen

In diesem Thema werden der Typ Qubit sowie zwei anderen Typen beschrieben, die für den Quantenbereich spezifisch sind: Pauli und Result.

Qubit

Q# behandelt Qubits als nicht transparente Elemente, die sowohl an Funktionen als auch an Vorgänge übergeben werden können. Mit ihnen kann aber nur interagiert werden, wenn sie an native Anweisungen für den jeweiligen Quantenprozessor übergeben werden. Solche Befehle werden immer in Form von Vorgängen definiert, da ihre Absicht darin besteht, den Quantenzustand zu verändern. Die Einschränkung, dass Funktionen den Quantenzustand nicht verändern dürfen, obwohl Qubits als Eingabeargumente übergeben werden können, wird dadurch erzwungen, dass Funktionen nur andere Funktionen, aber keine Vorgänge aufrufen können.

Die Q#-Bibliotheken werden gegen einen Standardsatz von intrinsischen Vorgängen kompiliert, d. h. Vorgänge, die keine Definition für ihre Implementierung innerhalb der Sprache haben. Bei der Ausrichtung werden die Implementierungen, die sie in Form von Anweisungen ausdrücken, die für das Ausführungsziel nativ sind, vom Compiler verknüpft. Daher kombiniert ein Q#-Programm diese Vorgänge gemäß der Definition durch den Zielcomputer zu allgemeineren Vorgängen für die Quantenberechnung. Auf diese Weise erleichtert Q# das Ausdrücken der Logik, die Quantenalgorithmen und hybriden quantenklassischen Algorithmen zugrunde liegt, und gleichzeitig sehr allgemein in Bezug auf die Struktur eines Zielcomputers und seiner Realisierung des Quantenzustands zu sein.

In Q# sich selbst gibt es keinen Typ oder kein Konstrukt in Q#, das den Quantenzustand darstellt. Stattdessen stellt ein Qubit die kleinste adressierbare physische Einheit auf einem Quantencomputer dar. Als solche ist ein Qubit ein langlebiges Element, sodass Q# keine linearen Typen benötigt. Daher verweisen wir nicht explizit auf den Zustand in Q#, sondern beschreiben, wie der Zustand durch das Programm transformiert wird, z. B. durch Anwendung von Vorgängen wie X und H. Ähnlich wie ein Grafikshaderprogramm eine Beschreibung von Transformationen für jeden Vertex akkumuliert, akkumuliert ein Quantenprogramm in Q# Transformationen für Quantenzustände, die als vollständig intransparente Verweise auf die interne Struktur eines Zielcomputers dargestellt werden.

Ein Q#-Programm hat keine Möglichkeit, in den Zustand eines Qubits hineinzuschauen, und ist daher völlig ahnungslos darüber, was ein Quantenzustand ist oder wie er realisiert wird. Stattdessen kann ein Programm Vorgänge wie Measure aufrufen, um Informationen über den Quantenzustand der Berechnung zu erhalten.

Pauli

Werte vom Typ Pauli geben einen Pauli-Operator für ein einzelnes Qubit an; die Möglichkeiten sind PauliI, PauliX, PauliY und PauliZ. Pauli-Werte werden in erster Linie verwendet, um die Basis für eine Quantenmessung anzugeben.

Ergebnis

Der Result-Typ gibt das Ergebnis einer Quantenmessung an. Q# spiegelt die meiste Quantenhardware wider, indem es Messungen in Produkten von Pauli-Operatoren mit einem Qubit bereitstellt; ein Result von Zero zeigt an, dass der Eigenwert +1 gemessen wurde, und ein Result von One, dass der Eigenwert -1 gemessen wurde. Das heißt, Q# stellt Eigenwerte durch die Potenz dar, mit der -1 erhöht wird. Diese Konvention ist in der Community der Quantenalgorithmen gebräuchlicher, da sie eher den klassischen Bits entspricht.