Freigeben über


Quantenspezifische Datentypen

In diesem Thema wird der Qubit Typ zusammen mit zwei anderen Typen beschrieben, die für die Quantendomäne etwas spezifisch sind: Pauli und Result.

Qubit

Q# behandelt Qubits als undurchsichtige Elemente, die sowohl an Funktionen als auch an Vorgänge übergeben werden können, aber nur mit ihnen interagieren können, indem sie an Anweisungen übergeben werden, die für den gezielten Quantenprozessor nativ sind. Solche Anweisungen werden immer in Form von Operationen definiert, da ihre Absicht darin besteht, den Quantenzustand zu ändern. Die Einschränkung, die Funktionen den Quantenzustand nicht ändern können, trotz der Tatsache, dass Qubits als Eingabeargumente übergeben werden können, wird durch die Anforderung erzwungen, dass Funktionen nur andere Funktionen aufrufen können und keine Vorgänge aufrufen können.

Die Q#-Bibliotheken werden mit einem Standardsatz systeminterner Vorgänge kompiliert, d. h. Vorgänge, die keine Definition für ihre Implementierung innerhalb der Sprache haben. Bei der Zielbestimmung werden die Implementierungen, die sie in Bezug auf die anweisungen ausdrücken, die für das Ausführungsziel nativ sind, vom Compiler verknüpft. Ein Q#-Programm kombiniert diese Vorgänge so, wie sie von einer Zielmaschine definiert werden, um neue Vorgänge auf höherer Ebene zu erstellen, um die Quantenberechnung auszudrücken. Auf diese Weise ist es Q# sehr einfach, die logik zugrunde liegenden Quanten- und Hybrid-Quantenklassikalgorithmen auszudrücken, während sie auch sehr allgemein in Bezug auf die Struktur einer Zielmaschine und deren Realisierung des Quantenzustands ist.

Innerhalb Q# selbst gibt es keinen Typ oder Konstrukt in Q#, der den Quantenzustand darstellt. Stattdessen stellt ein Qubit die kleinste adressierbare physische Einheit in einem Quantencomputer dar. Daher ist ein Qubit ein langlebiges Element, sodass Q# keine linearen Typen benötigen. Daher beziehen wir uns nicht explizit auf den Zustand innerhalb Q#, sondern beschreiben, wie der Zustand vom Programm transformiert wird, z. B. über die Anwendung von Vorgängen wie X und H. Ähnlich wie ein Grafikshaderprogramm eine Beschreibung der Transformationen zu jedem Vertex ansammelt, sammelt ein Quantenprogramm in Q# Transformationen zu Quantenzuständen an, dargestellt als völlig undurchsichtige Verweise auf die interne Struktur eines Zielcomputers.

Ein Q# Programm hat keine Fähigkeit, in den Zustand eines Qubits einzutrospektieren, und ist somit völlig agnostisch darüber, was ein Quantenzustand ist oder wie es realisiert wird. Vielmehr kann ein Programm Vorgänge wie Measure aufrufen, um Informationen über den Quantenzustand der Berechnung zu erfahren.

Pauli

Werte vom Typ Pauli einen Ein-Qubit-Pauli-Operator angeben; die Möglichkeiten sind PauliI, PauliX, PauliYund PauliZ. Pauli Werte werden hauptsächlich verwendet, um die Basis für eine Quantenmessung anzugeben.

Ergebnis

Der Result Typ gibt das Ergebnis einer Quantenmessung an. Q# spiegelt die meisten Quantenhardware, indem Messungen in Produkten von Ein-Qubit-Pauli-Operatoren bereitgestellt werden; ein Result von Zero gibt an, dass der Eigenwert +1 gemessen wurde, und ein Result von One gibt an, dass der -1 Eigenwert gemessen wurde. Das heißt, Q# stellt Eigenwerte durch die Macht dar, auf die -1 ausgelöst wird. Diese Konvention ist häufiger in der Quantenalgorithmengemeinschaft üblich, da sie klassische Bits genauer zuordnet.