Freigeben über


Konjugationen

Konjugationen sind in Quantenberechnungen weit verbreitet. Mathematisch ausgedrückt sind sie Muster im Format U†VU für zwei unitäre Transformationen U und V. Dieses Muster ist aufgrund der Besonderheiten des Quantenspeichers relevant: Berechnungen bauen Quantenkorrelationen (Verschränkung) auf, um die einzigartigen Vorteile des Quantencomputings zu nutzen. Das bedeutet aber auch, dass Qubits, die von einer Unterroutine nicht mehr benötigt werden, nicht einfach zurückgesetzt und freigegeben werden können, da die Beobachtung ihres Zustands Auswirkungen auf den Rest des Systems hätte. Aus diesem Grund muss die Wirkung einer vorherigen Berechnung in der Regel rückgängig gemacht werden, um Quantenspeicher freigeben und wiederverwenden zu können.

Q# verfügt daher über ein dediziertes Konstrukt zum Ausdrücken von Berechnungen, die eine solche Bereinigung erfordern. Die Ausdrücke bestehen aus zwei Codeblöcken, von denen einer die Implementierung von U und einer die Implementierung von V enthält. Die Entberechnung (d. h. die Anwendung von U†) erfolgt automatisch als Teil des Ausdrucks.

Der Ausdruck hat das Format.

within {
    <statements>
}
apply {
    <statements>
}

wobei <statements> durch eine beliebige Anzahl von Anweisungen ersetzt wird, die die Implementierung von U bzw. V definieren. Beide Blöcke können beliebige klassische Berechnungen enthalten, abgesehen von den üblichen Einschränkungen für die automatische Erzeugung von adjungierten Versionen, die für den within-Block gelten. Veränderlich gebundene Variablen, die als Teil des within-Blocks verwendet werden, dürfen nicht als Teil des apply-Blocks neu zugewiesen werden.